ldd und cp ?

Warum Debian und/oder eine seiner Spielarten? Was muss ich vorher wissen? Wo geht es nach der Installation weiter?
Antworten
vobie
Beiträge: 195
Registriert: 29.08.2003 21:14:50

ldd und cp ?

Beitrag von vobie » 22.03.2006 12:15:06

hi,

Frage !

wie kann ich die ausgabe von ldd XXXX > lib.txt als input für cp nehmen um eben diese
libs kopieren zu können ?????????

gruß

vobie

Benutzeravatar
seep
Beiträge: 544
Registriert: 31.10.2004 14:21:08
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: HSK

Beitrag von seep » 22.03.2006 12:30:39

Code: Alles auswählen

ldd foo | while read line; do echo "mach was mit $line"; done
Den "echo" mußt Du dann noch durch passenden Code ersetzen, bspw. das heraus-cut/sed-en der Dateinamen.

vobie
Beiträge: 195
Registriert: 29.08.2003 21:14:50

Beitrag von vobie » 22.03.2006 12:49:43

seep hat geschrieben:

Code: Alles auswählen

ldd foo | while read line; do echo "mach was mit $line"; done
Den "echo" mußt Du dann noch durch passenden Code ersetzen, bspw. das heraus-cut/sed-en der Dateinamen.
danke

funktioniert ja ganz gut mit einer datei.

Aber ich möchte von einem bestehenden Entwicklersystem die benötigten Dateien samt
libs in ein testsystem Kopieren.
also zb. Debian mit Entwicklerumgebung nach mini debian ohne Entwicklerumgebung.
Das Ergebniss soll ein extrem kleines System mit wirklich nur zum Betrieb notwendigen
Dateien werden.

zZ.mach ich das so.
----------------------------------------------------------------------------------------------------
LIBS=$( ldd root/sbin/* root/bin/* root/usr/bin/* root/usr/sbin/* root/lib/security/* 2> /dev/null | grep "[ \t]*lib" | grep -v "ld-linux" | cut -d " " -f 1 | sort -u )
echo "copy $LIBS to /lib :"
for i in $LIBS ; do
if [ -e /lib/$i ] ; then
do_cp /lib/$i root/lib
strip root/lib/$i
elif [ -e /usr/lib/$i ] ; then
do_cp /usr/lib/$i root/lib
strip root/lib/$i
else
error "cannot locate /lib/$i nor /usr/lib/$i"
fi
done
--------------------------------------------------------------------------------------------------

wobei "root" mein Ziehlverzeichniss mit einer Directory Struktur ist.

ich habe das Problem das in der Variablen LIBS=$ zwar alle libs gespeichert werden
aber nur die ersten ca 50 abgearbeitet werden und der rest angeblich nicht gefunden wird. setze ich nur eine " nicht gefundene" datei ein wird auch diese richtig bearbeitet.

gibs in der bash beschränkungen der variablen größe ????????

gruß

vobie

nepos
Beiträge: 5238
Registriert: 05.01.2005 10:08:12

Beitrag von nepos » 22.03.2006 18:10:24

Ja, ich denke, da wird durch die Shell-Expansion LIBS zu lang.

Benutzeravatar
seep
Beiträge: 544
Registriert: 31.10.2004 14:21:08
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: HSK

Beitrag von seep » 22.03.2006 18:24:32

Code: Alles auswählen

LIBS=$( ldd root/sbin/* root/bin/* root/usr/bin/* root/usr/sbin/* root/lib/security/* 2> /dev/null | grep "[ \t]*lib" | grep -v "ld-linux" | cut -d " " -f 1 | sort -u )
echo "copy $LIBS to /lib :"
for i in $LIBS ; do 
Schreibe es so um, dann klappt es auch ohne Zwischenspeichern in LIBS (was ja eh nicht dauerhaft benötigt wird):

Code: Alles auswählen

ldd root/sbin/* root/bin/* root/usr/bin/* root/usr/sbin/* root/lib/security/* 2> /dev/null | grep "[ \t]*lib" | grep -v "ld-linux" | cut -d " " -f 1 | sort -u | while read i; do

vobie
Beiträge: 195
Registriert: 29.08.2003 21:14:50

Beitrag von vobie » 24.03.2006 00:00:02

seep hat geschrieben:

Code: Alles auswählen

LIBS=$( ldd root/sbin/* root/bin/* root/usr/bin/* root/usr/sbin/* root/lib/security/* 2> /dev/null | grep "[ \t]*lib" | grep -v "ld-linux" | cut -d " " -f 1 | sort -u )
echo "copy $LIBS to /lib :"
for i in $LIBS ; do 
Schreibe es so um, dann klappt es auch ohne Zwischenspeichern in LIBS (was ja eh nicht dauerhaft benötigt wird):

Code: Alles auswählen

ldd root/sbin/* root/bin/* root/usr/bin/* root/usr/sbin/* root/lib/security/* 2> /dev/null | grep "[ \t]*lib" | grep -v "ld-linux" | cut -d " " -f 1 | sort -u | while read i; do
hi,
also ich bin zu doof dazu,

ich habe das so gemacht

Code: Alles auswählen

LIBS=$( ldd root/sbin/* root/bin/* root/usr/bin/* root/usr/sbin/* root/lib/security/* 2> /dev/null | grep "[ \t]*lib" | grep -v "ld-linux" | cut -d " " -f 1 | sort -u | while read i; do )
ich muß ja noch die variable LIBS weiter verarbeiten

Code: Alles auswählen

echo "copy $LIBS to /lib :"
for i in $LIBS ; do
if [ -e /lib/$i ] ; then
do_cp /lib/$i root/lib
strip root/lib/$i
elif [ -e /usr/lib/$i ] ; then
bekomme aber immer in der Zeile LIBS=$( ldd root/sbin ............| while read i; do ) ein syntax error: unexpected end of file

und nu ?
gruß

vobie

muß dazu sagen , das ich nicht der absolute scripte schreiber bin :roll:

Benutzeravatar
seep
Beiträge: 544
Registriert: 31.10.2004 14:21:08
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: HSK

Beitrag von seep » 24.03.2006 07:37:32

Mißverständnis Deinerseits: ich schrieb "schreibe es so um" und Du packtest trotzdem wieder LIBS=$() drumherum. Das kann auch nicht gehen.

Ersetze den kompletten 1. Block durch den kompletten 2. Block und Du wirst sehen, es funktioniert.

vobie
Beiträge: 195
Registriert: 29.08.2003 21:14:50

Beitrag von vobie » 24.03.2006 10:57:17

seep hat geschrieben:Mißverständnis Deinerseits: ich schrieb "schreibe es so um" und Du packtest trotzdem wieder LIBS=$() drumherum. Das kann auch nicht gehen.

Ersetze den kompletten 1. Block durch den kompletten 2. Block und Du wirst sehen, es funktioniert.
manchmal sind die augen schneller als das hirn :oops:

es funktioniert.

Danke !!! :D

gruß
vobie

Antworten