Paketbau: statisch anstatt dynamisch

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Joe58

Paketbau: statisch anstatt dynamisch

Beitrag von Joe58 » 16.09.2018 15:17:11

Guten Sonntag,

ich versuche derzeit das Paket mtd-utils statisch für armhf zu kompilieren. Habe es schon dynamisch geschafft.

Zunächst habe ich folgendes von hier: https://wiki.debian.org/CrossCompiling ausgeführt:

Code: Alles auswählen

dpkg --add-architecture armhf
#apt-get update
#apt-get install build-essential crossbuild-essential-armhf
#apt-get build-dep -aarmhf mtd-utils
$apt-get source mtd-utils
$cd mtd-utils-2.0.0
Bevor ich dann das Paket für armhf baue habe ich von hier: http://jurjenbokma.com/ApprenticesNotes ... bian.xhtml im mtd-utils-2.0.0 Verzeichnis folgendes ausgeführt, also die Flags für den Compiler und Linker gesetzt:

Code: Alles auswählen

$ export CFLAGS=-static
$ export LDFLAGS=-static
$ export CPPFLAGS=-static
$ export CFLAGS_APPEND=-static
$ export LDFLAGS_APPEND=-static
$ export CPPFLAGS_APPEND=-static
Dann wie weiter oben genannt das Paket für armhf gebaut:

Code: Alles auswählen

CONFIG_SITE=/etc/dpkg-cross/cross-config.amd64  DEB_BUILD_OPTIONS=nocheck dpkg-buildpackage -aarmhf -us -uc
Ich habe jetzt in mein Home-Verzeichnis das Debian Paket, nur dort drin sind Gemeinsame Bibliotheken, anstatt statisch gelinkte Binaries. :P

Weiß jemand wie ich das Paket richtig statisch kompiliere?

Danke!

Beste Grüße aus NRW von Johannes.

pferdefreund
Beiträge: 3791
Registriert: 26.02.2009 14:35:56

Re: Paketbau: statisch anstatt dynamisch

Beitrag von pferdefreund » 17.09.2018 08:54:20

Sind da auch die binarys drinne - wenn ja, was sagt ein ldd dazu ? Die LIbs müssen ja gebaut werden, sonst kann ja gar nicht statisch gelinkt werden.

Joe58

Re: Paketbau: statisch anstatt dynamisch

Beitrag von Joe58 » 17.09.2018 14:23:21

Im Debian Paket: mtd-utils_2.0.0-1_armhf.deb was ich kompiliert habe sind in data.tar.xz in /usr/sbin Binaries? drin welche in pcmanfm als Gemeinsame Bibliotheken genannt werden.

Dementsprechend:

Code: Alles auswählen

johannes@debianlaptop:~$ ldd /home/johannes/op/usr/sbin/mkfs.ubifs
	das Programm ist nicht dynamisch gelinkt
johannes@debianlaptop:~$ file /home/johannes/op/usr/sbin/mkfs.ubifs
/home/johannes/op/usr/sbin/mkfs.ubifs: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, for GNU/Linux 3.2.0, BuildID[sha1]=c0dc29cdfa90542ff2c838fe84d877d7495d1e95, stripped
johannes@debianlaptop:~$ 
Ist dynamisch laut file und nicht dynamisch laut ldd.

pferdefreund
Beiträge: 3791
Registriert: 26.02.2009 14:35:56

Re: Paketbau: statisch anstatt dynamisch

Beitrag von pferdefreund » 18.09.2018 08:29:53

Dann halt einfach mal ausprobieren, ob es funktioniert. Könnte natürlich problematisch werden, wenn die Bibliotheken eh nicht gelinkt werden sodern per dlopen und Konsorten dynamisch - ähnlich einen Plugin für xmms oder so - dynamisch geladen werden.
Dann wird es eh nix mit statisch.

Benutzeravatar
schorsch_76
Beiträge: 2535
Registriert: 06.11.2007 16:00:42
Lizenz eigener Beiträge: MIT Lizenz

Re: Paketbau: statisch anstatt dynamisch

Beitrag von schorsch_76 » 18.09.2018 08:47:52

Joe58 hat geschrieben: ↑ zum Beitrag ↑
17.09.2018 14:23:21
Ist dynamisch laut file und nicht dynamisch laut ldd.
ldd hat recht ;) File sagt, das es einen ELF Header hat der auch dynamisch linken könnte.

Benutzeravatar
MSfree
Beiträge: 10686
Registriert: 25.09.2007 19:59:30

Re: Paketbau: statisch anstatt dynamisch

Beitrag von MSfree » 18.09.2018 08:50:33

Joe58 hat geschrieben: ↑ zum Beitrag ↑
17.09.2018 14:23:21
...Ist dynamisch laut file und nicht dynamisch laut ldd.
ldd durchsucht das Executable nach externen Referenzen und zeigt die nötigen .so-Dateien an, die beim Start angezogen werden.

file liest nur die ersten paar Bytes einer Datei und versucht, das Dateiformat daraus zu erraten. Hier stößt file auf die Dateiart "ELF", die automatisch als dynamisch gelinktes Executable angenommen wird, egal ob externe Bibliotheken notwendig sind oder nicht.

Joe58

Re: Paketbau: statisch anstatt dynamisch

Beitrag von Joe58 » 18.09.2018 16:03:36

Mir geht es darum, dass ich die vielen Badblocks markiert bekomme. Leider kann ich nur aus Android heraus oder aus der App GNURoot Debian Befehle ausführen, andernfalls hätte ich Debian dort verwendet. Somit wenn ich jetzt einer der Binaries aus dem von mir erstellten Paket ausführe kommt folgendes:

Code: Alles auswählen

sh: ./mkfs.ubifs: No such file or directory
Oder wenn ich etwas von dem selben Verzeichnis ausführe, was es nicht gibt, kommt:

Code: Alles auswählen

sh: ./super: not found
Im Moment stehe ich auf dem Schlauch. Die vielen Badblocks beim booten, machen es nicht leichter. Früher waren dort 0 Badblocks, das heißt die waren „alle“ mal markiert. Ich hatte mal direkt auf dem Nand ext4 Dateisysteme erstellt, was sich jetzt als Dummheit darstellt. Das ist jetzt ca. 2 Jahre her.

Wäre cool, wenn es an dem statisch bzw. dynamisch gelinktem liegt, somit ist das Thema nicht Offthema.

pferdefreund
Beiträge: 3791
Registriert: 26.02.2009 14:35:56

Re: Paketbau: statisch anstatt dynamisch

Beitrag von pferdefreund » 18.09.2018 19:09:30

Achtung - der root unter gnuroot.debian ist kein echter Root. Ich habe das selbst auf dem Smartphone um darunter mit Hercules eine S/370 mit MVS und TSO-VTAM zu betreiben. Das sieht man schon, wenn man top aufruft und nur die eigenen Prozesse sieht - zumindest ab Android 7.0 oder so. Der gnuroot.debian arbeitet mit proot, was sowas wie eine root-Umgebung nur simuliert - echten Zugriff als Root au das Telefon hast du somit nicht. Übrigens - was eine S/370 ist - siehe Tante gockel mit Bildersuche S/370 IBM - War mein erster Computer, an dem ich arbeiten durfte. Geiles Teil.

Joe58

Re: Paketbau: statisch anstatt dynamisch

Beitrag von Joe58 » 18.09.2018 19:43:13

Hi,

ich hatte gesehen, dass ich kein echten Root Zugriff hatte, als ich nftl_format ausgeführt habe, um eben das Dateisystem auf der Partition nftl_Part neu zu erstellen. :D

Jetzt fragt sich nur, ob man aus der App irgendwie ausbrechen kann, um eben Dateisysteme neu zu schreiben.

Oder gibt es eine andere Alternative?

Ich müsste $einfuehrung = $meingeburtsjahr - 28; sein. Somit bin ich nicht alt genug, um viel Erfahrung/Skills vorweisen.

DeletedUserReAsG

Re: Paketbau: statisch anstatt dynamisch

Beitrag von DeletedUserReAsG » 18.09.2018 20:12:33

Wenn du Root auf deinem Tablet willst, wirst du's rooten müssen. Anschließend lässt sich ganz normal via su aus einer Shell heraus (adb oder auch Terminal-Apps) UID0 erlangen.

Joe58

Re: Paketbau: statisch anstatt dynamisch

Beitrag von Joe58 » 19.09.2018 13:58:47

Das Tablet ist gerootet.

Wie bekomme ich das Programm mkfs.ubifs und das Programm nftl_format für mein Tablet verfügbar, damit ich die Dateisysteme von Userdata und NFTL_Part neu schreiben kann?

Joe58

Re: Paketbau: statisch anstatt dynamisch

Beitrag von Joe58 » 22.09.2018 15:26:10

Irgendwie muss es doch gehen, die Binaries statisch zu kompilieren?

Ich habe beim Starten ca 50 Badblocks. Das Tablet startet dadurch sehr langsam.

DeletedUserReAsG

Re: Paketbau: statisch anstatt dynamisch

Beitrag von DeletedUserReAsG » 22.09.2018 18:19:26

Der von dir selbst geposteten Ausgabe von ldd nach ist’s statisch gelinkt.

Joe58

Re: Paketbau: statisch anstatt dynamisch

Beitrag von Joe58 » 22.09.2018 18:32:37

Achso :mrgreen:

Okay dann muss ich mal das andere Problem finden.

Dies wäre sonst mein nächster Ansatz gewesen. Dynamische Binaries ausführen:

https://unix.stackexchange.com/question ... s-on-linux

Da muss ich erstmal schauen.

Antworten