HOWTO-rozpracováno a hlavně dezorganizováno !!!

V tomto HOWTO se budu snažit zdokumentovat postupy, které jsem zvolil při řešení problémů, konfigurací a situací během práce na operačních systémech GNU/Linux. Nejedná se o přesné popisy či oficiální návody ale spíše o "laboratorní protokoly" se záznamy mých experimentů. Takže to rači doma nezkoušejte :-).

Přimountování síťového disku "Z" pomocí mount -t smbfs na VSCHT Praha

Takto vypadá řádek z /etc/fstab sloužíci k připojení disku "Z":
      #.... HTTP()
      //mandarinka/home/bernauem /home/milan/mnt/z cifs users,noauto,uid=milan,gid=milan,file_mode=0644,dir_mode=0755,username=bernauem,rw 0 0
    

A takto lze připojit síťový disk "pyr"
      #.... PYR
      //pyr/scratch /home/milan/mnt/p cifs users,noauto,uid=milan,gid=milan,file_mode=0644,dir_mode=0755,username=bernauem,rw 0 0
    

Do souboru /etc/fstab se zapisují diskové svazky-oddíly a jiná zařízení, po kterých bude chtěno aby se přimontovala (připojila) do námi zvoleného adresáře. Nacházejí se zde samozrejmě řádky, které patří standartním oddílům jako je např. / - kořenový, /home - domovský, swap atd... To jsou oddíly které se většinou mountují automaticky při startu systému (viz Start systému GNU/Linux). No a pak jsou tu "exoti", které si tam sami naťukáme. Zápis do /etc/fstab podléhá těmto pravidlům: vysvětlení jednotlivých položek z výše uvedeného příkladu ...

Příkaz xargs

Nejlepší je začít
 
      man xargs 
    
Ten obsahuje, jako obvykle, spoustu informací a asi nejlepší je přeskočit úvod a vrhnout se na sekci EXAMPLES . Tak hned první příklad
 
      find /tmp -name core -type f -print | xargs /bin/rm -f 
    
je hodně názorný. Lidsky řečeno: najdi všechny soubory core v adresáři /tmp a odstraň je. A jaká je role xargs v tomhle všem? Proste vezme řetezec se standartního vstupu (v tomto případě roury "|") a sestaví nám příkaz rm -f. Asi by to šlo řešit i následovně
 
      rm -f $(find /tmp -name core -type f -print).
    
Problém nastane když by bylo hafo souborů core tak by expanze v shellu provedená pomocí $(...) byla pomalá až nemožná. Na dalších příkladech se tvrdě maká ...

Start systému GNU/Linux

O zavedení celého systému se stará LILO nebo GRUB. V první fázi se rozbalí a zavede námi zvolený obraz jádra. Potom se provede detekce hardwaru. Jádro následně vytvoří první proces, init, který se postará o start dalších procesů. Konfigurace init je k nalezení v
/etc/inittab
V něm je definován např. implicitní runlevel, počet konzolí...atd. Init potom spustí skript (Mandrake, RedHat)
/etc-rc.d/rc.sysinit
Debian
/etc/init.d/rcS
který, zjednodušeně řečeno, "namountuje" disky (oddíly), postará se o zavedení modulů (ovladačů) atd. Po dokonční bootovacího procesu init spustí startovací skripty, které jsou uloženy v
/etc/rcX.d
kde X odpovídá defaultnímu runlevelu. X může nabývat hodnot 0-6. Tyto hodnoty odpovídají různým runlevelům. V debianu je defaultním runlevelem X=2. Takto vypadjí jednotlivé runlevely v Debianu:

Zbavení se nepoužívaných knihoven (knihovny bez závislostí)

Debian:
deborphan
resp.
orphaner
Mandrake:
rpm -e `urpmi_rpm-find-leaves -g`

gdb a FORTRAN

Nejdříve je třeba zkompilovat program s podporou debugovaní. To samozřejmě záleží na použitém kompilátoru. Používám Intelovský kompilátor (verze 8.1). je třeba při kompilaci přidat tyto argumenty:
      ifort -g -debug ...
    
V Makefile to může vypadat následovně:
      #-----------------------------------------------------------------
      #     CVS log
      #     $Id: Makefile,v 2.7 2006/05/25 16:53:09 milan Exp $
      #     ICT. 
      #     $Log: Makefile,v $
      #     Revision 1.1.1.1  2006/04/27 12:48:19  milan
      #     Initial revision. CVS IMPORT
      #
      #     $Revision: 1.0 $	
      #-----------------------------------------------------------------
      #PATH_TO_COMPILER=/opt/intel_fc_80/bin/
      COMPILER=ifort
      FC=$(PATH_TO_COMPILER)$(COMPILER)
      
      #source, object and include 
      SRC=mscr-1.f dbanpre.f dlinpk.f daux.f ddaspk.f rrate.f alfaeq.f nush.f
      OBJ=mscr-1.o dbanpre.o dlinpk.o daux.o ddaspk.o rrate.o alfaeq.o nush.o
      
      INCLUDE=basic_declar.inc
      
      #other files to put in the archive
      MISC=Makefile
      
      #common name of archive output files
      ARCHIVE_FILE=mscr_d1
      
      # macros
      FFLAGS=""
      OPT=""
      
      EXECS=mscr-1
      DEXECS=mscrdbg-1
      OPT=-O3 -zero
      DOPT=-O0 -zero -g -debug variable_locations -inline_debug_info \
      -fpstkchk
      
      .DEFAULT:  .f
      .SUFFIXES: .f 
      
      #=================================================================
      all:
      @echo "Error - please specify a target!"
      @echo "Permissible targets for this Makefile are:"
      @echo "                                          "
      @echo "bin                          (normal)"
      @echo "debug                        (debug)"
      @echo "clean - remove alle object and temporary files"
      @echo "tgz   - make tgz archive of all source files"
      @echo "zip   - make zip archive of all source files"
      
      # Build a speed-optimized (-O3) binary 
      bin:
      $(MAKE) FFLAGS="-132 -O3 " $(OBJ) $(INCLUDE)
      $(FC) $(OPT) -o $(EXECS) $(OBJ)
      
      # Build a non-optimized binary with more debugging information
      debug:
      $(MAKE) FFLAGS="-132 -O0 -g -traceback" $(OBJ) $(INCLUDE)
      $(FC) $(DOPT) -o $(DEXECS) $(OBJ)
      
      # make ordnug:=)
      clean:
      rm -f $(OBJ) *~
      # make archive of all source files and other stuff
      tgz:
      tar -zcvf $(ARCHIVE_FILE).tgz $(SRC) $(MISC) 
      zip:
      zip $(ARCHIVE_FILE).zip  $(SRC) $(MISC)
    
Potom už stačí spustit gdb buď z příkazového řádku a nebo z emacs (například F10, t, d). ...

Running parallel Fortran programs (MPI Fortran)

DL_POLY example (Makefile):
#========== gfortran (MPI) ===========================================
	gfortran: dpp
	cp /usr/include/mpich2/mpif.h .
	$(MAKE) LD="mpif90 -o" LDFLAGS="" TIMER="" \
	FC=mpif90 \
	FFLAGS="-c -O3 -ffast-math -funroll-all-loops -fpeel-loops -ftracer -funswitch-loops -funit-at-a-time \
	-fopenmp -I/usr/lib64/mpi/gcc/openmpi/include -pthread -I/usr/lib64/mpi/gcc/openmpi/lib64 " \
	CPFLAGS="-D$(STRESS) -DMPI -P -D'POINTER=integer' -DFLUORO -DFLUSH" \
	EX=$(EX) BINROOT=$(BINROOT) $(TYPE)
Then run from shell:
[milan@ofey-bent0.0]$ mpirun.mpich2 -n 4 ../../src/dl_poly_2.13/execute/DLPOLY.X &

M.B 22 Jan 2013