Unter UNIX: *.so, unter Windows: *.dll. Im Gegensatz dazu gibt es statischen Libraries: *.a. Details see Literature.
Wenn ein Programm gestartet wird lädt der Loader die Libraries in folgender Reihenfolge: $LD_LIBRARY_PATH
, /etc/ld.so.conf
(LINUX) oder /var/ld (Solaris)
$ cat /etc/ld.so.conf
/usr/X11R6/lib/Xaw95
/usr/X11R6/lib/Xaw3d
/usr/X11R6/lib
...
$ echo $LD_LIBRARY_PATH
/tmp/OraInstall2005-12-22_09-36-10AM/jre/lib/i386/server:/opt/CA/SharedComponents/lib
Sollten mal Probleme auftauchen kann man mit ldd <library>
schauen, was genau das Problem sein könnte:
$ ldd libjava.so
linux-gate.so.1 => (0xffffe000)
libjvm.so => /tmp/OraInstall2005-12-22_09-36-10AM/jre/lib/i386/server/libjvm.so (0x40025000)
libverify.so => not found
libnsl.so.1 => /lib/libnsl.so.1 (0x40516000)
libdl.so.2 => /lib/libdl.so.2 (0x4052b000)
libc.so.6 => /lib/tls/libc.so.6 (0x4052e000)
libpthread.so.0 => /lib/tls/libpthread.so.0 (0x40644000)
libstdc++-libc6.1-1.so.2 => /usr/lib/libstdc++-libc6.1-1.so.2 (0x40654000)
libm.so.6 => /lib/tls/libm.so.6 (0x4069c000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x80000000)
Mit folgendem Befehl sieht man, was im Library Cache verzeichnet ist, resp, ob eine Library vorhanden ist:
$ ldconfig -p | grep libstdc
libstdc++.so.5 (libc6) => /usr/lib/libstdc++.so.5
libstdc++.so.2.9 (libc6) => /usr/lib/libstdc++.so.2.9
libstdc++.so.2.8 (libc6) => /usr/lib/libstdc++.so.2.8
libstdc++.so.2.7.2 (libc6) => /usr/lib/libstdc++.so.2.7.2
libstdc++.so (libc6) => /usr/lib/libstdc++.so
libstdc++-libc6.2-2.so.3 (libc6) => /usr/lib/libstdc++-libc6.2-2.so.3
libstdc++-libc6.1-2.so.3 (libc6) => /usr/lib/libstdc++-libc6.1-2.so.3
libstdc++-libc6.1-1.so.2 (libc6) => /usr/lib/libstdc++-libc6.1-1.so.2
Und wenn man’s ganz genau wissen will, kann man der Sache so auf den Grund gehen:
$ LD_DEBUG=libs grep -c oracle /etc/passwd
9599: find library=libc.so.6; searching
9599: search path=/tmp/OraInstall2005-12-22_09-36-10AM/jre/lib/i386/server/tls/i686:/tmp/OraInstall2005-12-22_09-36-10AM/jre/lib/i386/server/tls:/tmp/OraInstall2005-12-22_09-36-10AM/jre/lib/i386/server/i686:/tmp/OraInstall2005-12-22_09-36-10AM/jre/lib/i386/server:/opt/CA/SharedComponents/lib/tls/i686:/opt/CA/SharedComponents/lib/tls:/opt/CA/SharedComponents/lib/i686:/opt/CA/SharedComponents/lib (LD_LIBRARY_PATH)
9599: trying file=/tmp/OraInstall2005-12-22_09-36-10AM/jre/lib/i386/server/tls/i686/libc.so.6
9599: trying file=/tmp/OraInstall2005-12-22_09-36-10AM/jre/lib/i386/server/tls/libc.so.6
9599: trying file=/tmp/OraInstall2005-12-22_09-36-10AM/jre/lib/i386/server/i686/libc.so.6
9599: trying file=/tmp/OraInstall2005-12-22_09-36-10AM/jre/lib/i386/server/libc.so.6
9599: trying file=/opt/CA/SharedComponents/lib/tls/i686/libc.so.6
9599: trying file=/opt/CA/SharedComponents/lib/tls/libc.so.6
9599: trying file=/opt/CA/SharedComponents/lib/i686/libc.so.6
9599: trying file=/opt/CA/SharedComponents/lib/libc.so.6
9599: search cache=/etc/ld.so.cache
9599: trying file=/lib/tls/libc.so.6
9599: calling init: /lib/tls/libc.so.6
9599: initialize program: grep
9599: transferring control: grep
1
9599: calling fini: /lib/tls/libc.so.6
Parameter für LD_DEBUG
sind: files
, bindings
, libs
, details
und statistics
.
$ top
last pid: 6803; load averages: 0.44, 0.67, 0.91
386 processes: 320 sleeping, 64 zombie, 2 on cpu
CPU states: % idle, % user, % kernel, % iowait, % swap
Memory: 3072M real, 138M free, 3231M swap in use, 1066M swap free
PID USERNAME THR PRI NICE SIZE RES STATE TIME CPU COMMAND
6799 oracle 1 0 0 2112K 1376K cpu/0 0:00 0.43% top
7852 root 10 38 0 15M 4696K sleep 521:20 0.20% aws_sadmin
...
$ ps -el | grep 'Z'
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
8 Z 8100 25048 24115 0 0 0:00
8 Z 8100 25235 24115 0 0 0:00
8 Z 8100 23416 24115 0 0 0:00
...
$ kill -9
And test the result afterwards again…
This scripts generates the most possible secure passwords for:
But unfortunately it is not yet fully implemented :-( Also web GUI is not yet running…
Password generator Code (3.6 kByte)
Epoch Converter Code (1 kByte)
Da ich einige CD’s, welche ich gelegentlich brauche, und noch wesentlich mehr freien Diskplatz habe, welchen ich nicht brauche, liegt die Idee nahe, diesen zu Nutzen, und die CD’s dorthin zu kopieren um nicht Disk-Jockey spielen zu müssen. Ich baue mir also einen CD-Server. Bei ca. 80 GB freiem Diskplatz reicht das locker für ca. 100 (Daten-)CD’s.
$ mkisofs -v -r -R -J -o test.iso /mnt/cdrom
von Hand:
$ mount -o ro,loop test.iso /mnt/cdrom-fake
oder
$ mount -t iso9660 -o loop test.iso /mnt/cdrom-fake
Permanent: in /etc/fstab
eintragen:
...
/media/linux_user_2002.iso /media/linux_user_2002 auto loop,ro,user,exec 0 0
/media/linux_magazin_2001.iso /media/linux_magazin_2001 auto loop,ro,user,exec 0 0
...
Leider ist die Anzahl der Loop-Devices bei meiner SuSE 9.3 auf 8 beschränkt. Dies äussert sich beim Starten des Systems wie folgt: “could not find any free loop device”.
Es gibt zwei Ansätze:
In /usr/src/linux/drivers/block/loop.c
folgende Zeile ändern:
static int max_loop = 8;
Danach den Kernel und die Module neu kompilieren.
Kernel mit option max_loop=12
booten.
Kontrolle:
$ grep loop /var/log/boot.msg
<4>Kernel command line: root=/dev/hda3 vga=0x31a selinux=0 splash=silent resume=/dev/hda2 max_loop=12
oder
$ cat cmdline
root=/dev/hda3 vga=0x31a selinux=0 splash=silent resume=/dev/hda2 max_loop=12
Permanent: In /boot/grub/menu.lst die option inzufügen:
max_loop=12
mknod -m 660 /dev/loop8 b 7 8
chmod 660 /dev/loop8
chown root:disk /dev/loop8
mknod -m 660 /dev/loop9 b 7 9
chmod 660 /dev/loop9
chown root:disk /dev/loop9
...
$ grep loop /proc/devices
7 loop
$ grep loop diskstats
7 0 loop0 0 0 0 0 0 0 0 0 0 0 0
7 1 loop1 0 0 0 0 0 0 0 0 0 0 0
...
7 10 loop10 0 0 0 0 0 0 0 0 0 0 0
7 11 loop11 0 0 0 0 0 0 0 0 0 0 0
$ ls -la /dev/loop*
brw-rw---- 1 root disk 7, 0 Mar 19 2005 loop0
brw-rw---- 1 root disk 7, 1 Mar 19 2005 loop1
...
brw-rw---- 1 root disk 7, 8 Mar 19 2005 loop8
brw-rw---- 1 root disk 7, 9 Mar 19 2005 loop9
$ grep loop partitions
7 0 71296 loop0
7 1 645152 loop1
7 2 676288 loop2
7 3 278176 loop3
7 4 165632 loop4
7 5 163488 loop5
7 6 455840 loop6
7 7 470336 loop7
7 8 480288 loop8
$ losetup -a
/dev/loop0: [0303]:333441 (/media/linux_user_2000.iso)
...
/dev/loop8: [0303]:333460 (/media/linux_user_2001.iso)
$ grep loop /proc/mounts
/dev/loop0 /media/linux_user_2000 iso9660 ro,nosuid,nodev 0 0
...
/dev/loop8 /media/linux_user_2001 iso9660 ro,nosuid,nodev 0 0
$ df -k | grep iso
/media/ix_1999.iso 165632 165632 0 100% /media/ix_1999
/media/ix_2001.iso 163488 163488 0 100% /media/ix_2001
...
Nicht unnötig zuviele Loop-Devices aktivieren, da diese anscheinends Ressourcen brauchen sollen. Maximal möglich sollen 255 (256?) Loop-Devices sein.
fzf