32bit Anwendung auf amd64

Nein, es läuft nicht. Wine verlangt ein bestimmtes Prozesslyout seitens des Betriebssystems, was unter einem FreeBSD/amd64 immer anders ist als unter FreeBSD/i386. Auch im i386-Jail funktioniert Wine daher nicht, es stürzt mit SIGBUS ab.

Hm, wie läuft das denn unter Linux? Dort gehen doch dieselben Binaries, ist dort das Kernel-Interface gleich?
 
Unter Linux ist das Prozesslayout auf allen Plattformen gleich oder zumindest ähnlich genug. Zugegeben ein Vorteil.
 
Moin,

ich missbrauche mal meinen alten Thread. Ich habe gegeben ein FreeBSD-8.0/amd64. Ich habe eine NEUE i386-Jail gebaut. /dev ist gemountet, ein spezielles devfs_ruleset gibt es nicht. /dev ist in der Jail verfügbar. ich habe einen eigenen Portstree per portsnap fetch extract geholt und konnte zB misc/mc installieren. Da ich gerne ports-mgmt/portupgrade verwende, wollte ich auch das installieren. Eine Abhängigkeit ist ruby. Bei der Installation kommt folgendes:

cc -O2 -pipe -fno-strict-aliasing -fPIC -DRUBY_EXPORT -I. -I. -c main.c
cc -O2 -pipe -fno-strict-aliasing -fPIC -DRUBY_EXPORT -L. -rdynamic -pthread main.o libruby18-static.a -lrt -lcrypt -lm -rpath=/usr/lib:/usr/local/lib -pthread -o miniruby
rbconfig.rb updated
./lib/fileutils.rb:1029: retry outside of rescue clause
*** Error code 1

Stop in /usr/ports/lang/ruby18/work/ruby-1.8.7-p160.
*** Error code 1

Stop in /usr/ports/lang/ruby18.
*** Error code 1

Stop in /usr/ports/lang/ruby18.

Achso.. sentenv UNAME_p und UNAME_m sind auf i386 gesetzt...

Was kann da falsch laufen?
 
Aktueller Status: Ich kann das ganze reproduzieren. Bei einer i386-jail funktioniert das oben beschriebene nicht, bei einer amd64-jail funktioniert es.

Mir ist aufgefallen, dass bei der amd64-jail nach "make buildworld" eine "Abschlussmeldung" erscheint. Beim bauen der Welt für i386 kommt diese Meldung nicht. Ich prüfe das allerdings gleich nochmal.
 
Kann ich nachvollziehen. Nimm einfach das Paket, das wäre der Weg des geringsten Widerstands. :)
 
anscheinend hast du /libexec nicht in deiner jail mit drinne.
ich kenne jails so gar nicht.
aber von chroot kenne ich das problem dass du nochmal ein /libexec verzeichnis anlegen musst. und dort alles hinkopierst was du brauchst.
 
/libexec ist da und die Datei ld-elf.so.1 auch. Nach langem Testen bin ich aktuell der Meinung, dass da aktuell wieder was kaputt ist. Schade eigentlich, wo doch das ganze seit 7.2 astrein lief!
 
Halt, halt. Tritt der Fehler nur auf, wenn du /usr/local/bin/ruby ausführst? Wenn ja schaue mal mit file(1) nach, ob der für Ruby nicht doch ein FreeBSD/amd64-Paket genommen hat. Ansonsten könnte ich höchstens anbieten, mein i386-Jail einmal einzupacken und auf den FTP-Server zu werfen. Sofern ihr mir vertraut, dass es kein Rootkit enhält :)
 
So. Jail nochmal gebaut. make buildworld bringt auch die "Abschlussmeldung". Installiert hat pkg_add -r unter anderem:
Sieht also noch i386 aus :)

file /usr/local/bin/ruby
/usr/local/bin/ruby: ELF 32-bit LSB executable, Intel 80386, version 1 (FreeBSD), dynamically linked (uses shared libs), for FreeBSD 8.0 (800107), stripped
sieht mE auch ok aus.

Meldung bei portupgrade -ai:
/usr/local/sbin/portupgrade:825: retry outside of rescue clause
 
Kleines Update: Nach einem freebsd-update (auf 8.0-p1) hatte ich mich zuerst gefreut, da auch /libexec/ld-elf.so.1 ein Update erfahren hat. Also habe ich /usr/src aktualisiert und die jail aktualisiert. Leider brachte das keinen Erfolg. Yamagi, könntest du eventuell mal eine neue Jail bauen und *hust* hier reinstellen, wie du das gemacht hast? Hier die Schritte, die ich gegangen bin:

cd /usr/src
mkdir -p /foo/bar/i386
make TARGET_ARCH=i386 TARGET=i386 buildworld
make TARGET_ARCH=i386 TARGET=i386 installworld DESTDIR=/foo/bar/i386
make TARGET_ARCH=i386 TARGET=i386 distribution DESTDIR=/foo/bar/i386

Vor dem Starten der Jail habe ich noch /etc/resolv.conf und /etc/rc.conf angelegt, da beide nicht existieren. In resolv.conf habe ich "nameserver 192.168.1.1" stehen, in rc.conf steht "sshd_enable="YES"".

Die rc.conf auf dem "Host" enthält in Bezug auf diese Jail folgendes:
devfs_system_ruleset="localrules"
jail_enable="YES"
jail_list="i386"
jail_i386_rootdir="/foo/bar/i386"
jail_i386_hostname="i386"
jail_i386_interface="em0"
jail_i386_ip="192.168.1.253"
jail_i386_devfs_enable="YES"
In /etc/devfs.rules steht das hier:
add path 'cd*' mode 0660 group operator
add path 'pass*' mode 0660 group operator
add path 'xpt0' mode 0660 group operator
add path 'ugen*' mode 0660 group operator

Erst jetzt starte ich die Jail und führe folgendes aus:
setenv UNAME_p i386
setenv UNAME_m i386
pkg_add -r portupgrade

Wenn ich portupgrade -ai starte, kommt die og Fehlermeldung...
 
Irgenwie lässt mir das Thema keine Ruhe, auch wenn bislang "nur" ruby nicht funktioniert (und damit alle ports die davon abhängen). Anmerkung am Rande: Inzwischen (Yamagi hat es mir gestern berichtet und ich konnte es nachvollziehen) funktioniert wine in einer i386-jail unter amd64!

Ich habe, bevor ich die Jail gebaut habe, das System aktualisiert, indem ich "freebsd-update fetch install" ausgeführt habe. Aktualisiert wurde auf FreeBSD-8.0-RELEASE-p1. Unter anderem wurden Dateien in /libexec und auch /usr/src aktualisiert. Wenn ich nun innerhalb der Jail freebsd-update fetch ausführe, will er - warum auch immer - folgendes machen:
The following files will be updated as part of updating to 8.0-RELEASE-p1:
/libexec/ld-elf.so.1
/usr/lib/libssl.a
/usr/lib/libssl.so.6
/usr/lib/libssl_p.a
Warum sind die Dateien nicht aktuell? Ich habe die Jail doch erst gebaut nachdem /usr/src aktualisiert wurde... Gibt es einen Grund warum freebsd-update install innerhalb der Jail fehl schlägt?:
freebsd-update install
Installing updates...chflags: ///libexec/ld-elf.so.1: Operation not permitted

Muss ich tatsächlich die Jail ausserhalb der Jail aktualisieren? Wie soll das dann mit Jails in Jails funktionieren?

Fragen über Fragen :)
 
Hatte auch mal das Problem. Bei mir fehlten die lib32 libs im HOST weil ich nur minimal installiert hatte. Bau einfach im host mal eine Welt und installier sie.
 
Hatte auch mal das Problem. Bei mir fehlten die lib32 libs im HOST weil ich nur minimal installiert hatte. Bau einfach im host mal eine Welt und installier sie.
Welches Problem genau? Dass freebsd-update nicht funktioniert? Oder das "ruby-Problem"? Ich gehe davon aus, dass ich alles komplett gebaut habe...

Gruß
 
Zurück
Oben