Jail erstellt nach Anleitung

Petro

Member
Hallo,

ich versuche mich gerade in jail einzuarbeiten habe aber irgendwie ein Problem obwohl ich genau nach Anleitung vorgehe:

Mein System wurde wie in http://www.bsdforen.de/showpost.php?p=208425&postcount=15 beschrieben erstellt. Danach habe ich wie in http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/jails-build.html beschrieben angefangen den jail einzurichten:

Code:
# setenv D /here/is/the/jail
# mkdir -p $D
# cd /usr/src
# make buildworld  <----- 
# make installworld DESTDIR=$D
# make distribution DESTDIR=$D
# mount -t devfs devfs $D/dev

Leider bricht das Kompilieren, bei make buildworld ab.

Code:
pointer-sign -c /usr/src/gnu/usr.bin/binutils/libbfd/../../../../contrib/binutils/bfd/cofflink.c
cc -O2 -pipe  -DBFD_DEFAULT_TARGET_SIZE=32 -I. -I/usr/src/gnu/usr.bin/binutils/libbfd -I/usr/src/gnu/usr.bin/binutils/libbfd/../libbfd -I/usr/obj/usr/src/gnu/usr.bin/binutils/libbfd/../libbfd -I/usr/src/gnu/usr.bin/binutils/libbfd/../../../../contrib/binutils/include -D_GNU_SOURCE -I/usr/src/gnu/usr.bin/binutils/libbfd/../../../../contrib/binutils/bfd -DSELECT_ARCHITECTURES=" &bfd_i386_arch" -DHAVE_bfd_elf32_i386_freebsd_vec -DHAVE_bfd_elf32_i386_vec -DHAVE_bfd_efi_app_ia32_vec -DSELECT_VECS=" &bfd_elf32_i386_freebsd_vec ,&bfd_elf32_i386_vec ,&bfd_efi_app_ia32_vec" -DDEFAULT_VECTOR=bfd_elf32_i386_freebsd_vec -std=gnu99 -fstack-protector -Wno-pointer-sign -c /usr/src/gnu/usr.bin/binutils/libbfd/../../../../contrib/binutils/bfd/cpu-i386.c
cc -O2 -pipe  -DBFD_DEFAULT_TARGET_SIZE=32 -I. -I/usr/src/gnu/usr.bin/binutils/libbfd -I/usr/src/gnu/usr.bin/binutils/libbfd/../libbfd -I/usr/obj/usr/src/gnu/usr.bin/binutils/libbfd/../libbfd -I/usr/src/gnu/usr.bin/binutils/libbfd/../../../../contrib/binutils/include -D_GNU_SOURCE -I/usr/src/gnu/usr.bin/binutils/libbfd/../../../../contrib/binutils/bfd -DSELECT_ARCHITECTURES=" &bfd_i386_arch" -DHAVE_bfd_elf32_i386_freebsd_vec -DHAVE_bfd_elf32_i386_vec -DHAVE_bfd_efi_app_ia32_vec -DSELECT_VECS=" &bfd_elf32_i386_freebsd_vec ,&bfd_elf32_i386_vec ,&bfd_efi_app_ia32_vec" -DDEFAULT_VECTOR=bfd_elf32_i386_freebsd_vec -std=gnu99 -fstack-protector -Wno-pointer-sign -c /usr/src/gnu/usr.bin/binutils/libbfd/../../../../contrib/binutils/bfd/efi-app-ia32.c
cc -O2 -pipe  -DBFD_DEFAULT_TARGET_SIZE=32 -I. -I/usr/src/gnu/usr.bin/binutils/libbfd -I/usr/src/gnu/usr.bin/binutils/libbfd/../libbfd -I/usr/obj/usr/src/gnu/usr.bin/binutils/libbfd/../libbfd -I/usr/src/gnu/usr.bin/binutils/libbfd/../../../../contrib/binutils/include -D_GNU_SOURCE -I/usr/src/gnu/usr.bin/binutils/libbfd/../../../../contrib/binutils/bfd -DSELECT_ARCHITECTURES=" &bfd_i386_arch" -DHAVE_bfd_elf32_i386_freebsd_vec -DHAVE_bfd_elf32_i386_vec -DHAVE_bfd_efi_app_ia32_vec -DSELECT_VECS=" &bfd_elf32_i386_freebsd_vec ,&bfd_elf32_i386_vec ,&bfd_efi_app_ia32_vec" -DDEFAULT_VECTOR=bfd_elf32_i386_freebsd_vec -std=gnu99 -fstack-protector -Wno-pointer-sign -c /usr/src/gnu/usr.bin/binutils/libbfd/../../../../contrib/binutils/bfd/elf32-i386.c
/usr/src/gnu/usr.bin/binutils/libbfd/../../../../contrib/binutils/bfd/elf32-i386.c: In function 'elf_i386_finish_dynamic_symbol':
/usr/src/gnu/usr.bin/binutils/libbfd/../../../../contrib/binutils/bfd/elf32-i386.c:2948: internal compiler error: Segmentation fault: 11
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://gcc.gnu.org/bugs.html> for instructions.
*** Error code 1

Stop in /usr/src/gnu/usr.bin/binutils/libbfd.
*** Error code 1

Stop in /usr/src/gnu/usr.bin/binutils.
*** Error code 1

Stop in /usr/src/gnu/usr.bin.
*** Error code 1

Stop in /usr/src/gnu.
*** Error code 1

Stop in /usr/src.
*** Error code 1

Stop in /usr/src.
*** Error code 1

Stop in /usr/src.

Leider kenne ich mich mit dem Kompilieren nicht wirklich aus. Hätte jemand eine Idee für mich ?

CU Petro
 
Mal ganz dumm gefragt, um den Fehler besser klassifizieren zu können. Wenn du "make buidlworld" ein weiteres mal ausführst, bricht er an der gleichen Stelle oder an anderer ab?
 
Ich habe gerade eben nochmals gestartet (und zuvor kein snapshot zurück gespielt). Sobald er fertig ist berichte ich.
 
Code:
gzip -cn /usr/src/usr.sbin/ypset/ypset.8 > ypset.8.gz
===> usr.sbin/zic (all)
===> usr.sbin/zic/zic (all)
cc -O2 -pipe  -DTM_GMTOFF=tm_gmtoff -DTM_ZONE=tm_zone -DSTD_INSPIRED -DPCTS -DHAVE_LONG_DOUBLE -DTZDIR=\"/usr/share/zoneinfo\" -Demkdir=mkdir -DHAVE_STRERROR -DHAVE_UNISTD_H -I/usr/src/usr.sbin/zic/zic/.. -I/usr/src/usr.sbin/zic/zic/../../../lib/libc/stdtime -std=gnu99 -fstack-protector  -c /usr/src/usr.sbin/zic/zic/../zic.c
cc -O2 -pipe  -DTM_GMTOFF=tm_gmtoff -DTM_ZONE=tm_zone -DSTD_INSPIRED -DPCTS -DHAVE_LONG_DOUBLE -DTZDIR=\"/usr/share/zoneinfo\" -Demkdir=mkdir -DHAVE_STRERROR -DHAVE_UNISTD_H -I/usr/src/usr.sbin/zic/zic/.. -I/usr/src/usr.sbin/zic/zic/../../../lib/libc/stdtime -std=gnu99 -fstack-protector  -c /usr/src/usr.sbin/zic/zic/../ialloc.c
cc -O2 -pipe  -DTM_GMTOFF=tm_gmtoff -DTM_ZONE=tm_zone -DSTD_INSPIRED -DPCTS -DHAVE_LONG_DOUBLE -DTZDIR=\"/usr/share/zoneinfo\" -Demkdir=mkdir -DHAVE_STRERROR -DHAVE_UNISTD_H -I/usr/src/usr.sbin/zic/zic/.. -I/usr/src/usr.sbin/zic/zic/../../../lib/libc/stdtime -std=gnu99 -fstack-protector  -c /usr/src/usr.sbin/zic/zic/../scheck.c
cc -O2 -pipe  -DTM_GMTOFF=tm_gmtoff -DTM_ZONE=tm_zone -DSTD_INSPIRED -DPCTS -DHAVE_LONG_DOUBLE -DTZDIR=\"/usr/share/zoneinfo\" -Demkdir=mkdir -DHAVE_STRERROR -DHAVE_UNISTD_H -I/usr/src/usr.sbin/zic/zic/.. -I/usr/src/usr.sbin/zic/zic/../../../lib/libc/stdtime -std=gnu99 -fstack-protector   -o zic zic.o ialloc.o scheck.o 
gzip -cn /usr/src/usr.sbin/zic/zic/../zic.8 > zic.8.gz
===> usr.sbin/zic/zdump (all)
cc -O2 -pipe  -DTM_GMTOFF=tm_gmtoff -DTM_ZONE=tm_zone -DSTD_INSPIRED -DPCTS -DHAVE_LONG_DOUBLE -DTZDIR=\"/usr/share/zoneinfo\" -Demkdir=mkdir -I/usr/src/usr.sbin/zic/zdump/.. -I/usr/src/usr.sbin/zic/zdump/../../../lib/libc/stdtime -std=gnu99 -fstack-protector  -c /usr/src/usr.sbin/zic/zdump/../zdump.c
cc -O2 -pipe  -DTM_GMTOFF=tm_gmtoff -DTM_ZONE=tm_zone -DSTD_INSPIRED -DPCTS -DHAVE_LONG_DOUBLE -DTZDIR=\"/usr/share/zoneinfo\" -Demkdir=mkdir -I/usr/src/usr.sbin/zic/zdump/.. -I/usr/src/usr.sbin/zic/zdump/../../../lib/libc/stdtime -std=gnu99 -fstack-protector  -c /usr/src/usr.sbin/zic/zdump/../ialloc.c
cc -O2 -pipe  -DTM_GMTOFF=tm_gmtoff -DTM_ZONE=tm_zone -DSTD_INSPIRED -DPCTS -DHAVE_LONG_DOUBLE -DTZDIR=\"/usr/share/zoneinfo\" -Demkdir=mkdir -I/usr/src/usr.sbin/zic/zdump/.. -I/usr/src/usr.sbin/zic/zdump/../../../lib/libc/stdtime -std=gnu99 -fstack-protector  -c /usr/src/usr.sbin/zic/zdump/../scheck.c
cc -O2 -pipe  -DTM_GMTOFF=tm_gmtoff -DTM_ZONE=tm_zone -DSTD_INSPIRED -DPCTS -DHAVE_LONG_DOUBLE -DTZDIR=\"/usr/share/zoneinfo\" -Demkdir=mkdir -I/usr/src/usr.sbin/zic/zdump/.. -I/usr/src/usr.sbin/zic/zdump/../../../lib/libc/stdtime -std=gnu99 -fstack-protector   -o zdump zdump.o ialloc.o scheck.o 
gzip -cn /usr/src/usr.sbin/zic/zdump/../zdump.8 > zdump.8.gz
===> usr.sbin/zzz (all)
gzip -cn /usr/src/usr.sbin/zzz/zzz.8 > zzz.8.gz
===> etc (all)
===> etc/sendmail (all)
rm -f freebsd.cf
m4 -D_CF_DIR_=/usr/src/etc/sendmail/../../contrib/sendmail/cf/   /usr/src/etc/sendmail/../../contrib/sendmail/cf/m4/cf.m4 /usr/src/etc/sendmail/freebsd.mc > freebsd.cf
chmod 444 freebsd.cf
rm -f freebsd.submit.cf
m4 -D_CF_DIR_=/usr/src/etc/sendmail/../../contrib/sendmail/cf/   /usr/src/etc/sendmail/../../contrib/sendmail/cf/m4/cf.m4 /usr/src/etc/sendmail/freebsd.submit.mc > freebsd.submit.cf
chmod 444 freebsd.submit.cf

--------------------------------------------------------------
>>> World build completed on Sat Feb  6 19:21:14 CET 2010
--------------------------------------------------------------

Wie kann das jetzt kommen ?
Ich habe exakt nur das letzte Kommando wiederholt.

Kann ich jetzt diesem Durchgang vertrauen ?

CU Petro
 
Nein. So Leid es mir tut, aber abbrechende, sich nicht wiederholbar falsch verhaltene Compiler sind ein sehr sicheres Anzeichen für defekte Hardware. Entweder RAM oder Prozessor. Wenn du Glück hattest, hat da nur ein Alphateilchen deinen RAM getroffen und ein Bit gekippt. Ohne ECC kann das schon mal passieren. Ich würde es mal sehr aufmerksam beobachten, vielleicht sogar memtest86 mal ein paar Stunden laufen lassen.
 
Manchmal ist es auch ein Problem in den Makefiles. Im Moment habe ich das mit 8-stable. Das baut auch nicht jedes mal durch. Mit NO_CLEAN kann man da 'ne Menge Zeit sparen, dann macht er beim nächsten Versuch da weiter wo er aufgehört hat.
 
Ok, ich werde das auf jeden Fall beobachten.

Noch eine Frage:

Was ist die beste Methode jails upzudaten. Ich möchte auf jeden Fall komplette Jails benutzen (keine Service Jail). Ich habe von ezjail gehört.

Was benutzt du ?
Was benutzt Ihr ?

CU Petro

EDIT: Wenn ich es richtig gelesen habe ist ezjail auch nur für Service Jails
 
Zuletzt bearbeitet:
Benutzt von euch keiner eine "Full" Jail ?

Vielleicht liege ich ja falsch. Ich wollte diese Art von Jail benutzen weil ich immer wieder davon höre, dass es bei Service Jails Probleme mit Abhängigkeiten bzw. mit versch. Daemons geben würde.

Liege ich da falsch ?
Was benutzt Ihr ?

CU Petro
 
Ich habe mich vor kurzem auch mit dem Thema Jail erstellen befasst.
Im Ergebnis habe ich mich für folgendes Vorgehen entschieden:
Erstellen einer FreeBSD Jail

1. Basis holen
# mkdir base
# cd base
# lftp ftp.freebsd.org
--> cd pub/FreeBSD/releases/i386/8.0-RELEASE/base
--> mget *
--> quit
cd ..

2. Installieren der Basis
# mkdir jail1
# cd base
# setenv DESTDIR /Pfad/zu/jail1
# echo $D /Kontrolle ACHTUNG:Pfad muss stimmen! GEFAHR: Hostsystem nicht überschreiben
# ./install.sh /Das Basissystem wird in der neuen Jail ausgepackt
/install.sh führt dies aus: cat base.?? | tar --unlink -xpzf - -C $DESTDIR
3. Devices zur Verfügung stellen
# mount -t devfs devfs $DESTDIR/dev

4. Erste Konfiguration der Jail
# touch $DESTDIR/etc/fstab /Eine leere fstab anlegen
# vi $DESTDIR/etc/rc.conf Inhalt einfügen:
hostname="Jail1"
defaultrouter="192.168.0.xxx" #IP-Alias aus 5.
rpcbind_enable="NO"
inetd_enable="NO"
network_interfaces=""
sshd_enable="YES"
#sshd_flags="-p 2222" #SSH Port einstellen, wenn man will
sendmail_enable="NONE"
sendmail_outbound_enable="NO"
syslogd_enable="YES"
syslogd_programm="/usr/sbin/syslogd"
syslogd_flags="-s -s -a 192.168.0.xxx" #IP-Adress-Alias aus 5.
font8x8="iso15-8x8"
font8x14="iso15-8x14"
font8x16="iso15-8x16"
keymap="german.iso"
cron_enable="NO"

# vi $DESTDIR/etc/resolv.conf Inhalt entsprechend einfügen:
nameserver 83.169.185.161
nameserver 83.169.185.225
nameserver 192.168.0.1

5. Einstellungen auf dem Host
# ifconfig em0 inet alias 192.168.0.xxx IP-Alias erstellen
# vi /etc/rc.conf Inhalt einfügen:
jail_enable="YES"
jail_list="jail1"

#jail_jail1_interface="em0"
jail_jail1_devfs_enable="YES"
#jail_jail1_devfs_ruleset="devfsrules_jail"
jail_jail1_procfs_enable="YES"
jail_jail1_fdescfs_enable="NO"
jail_jail1_mount_enable="NO"
jail_jail1_rootdir="/wo/ist/meine/jail1" #Pfad aus $DESTDIR eintragen
jail_jail1_hostname="jail1"
jail_jail1_netmask="255.255.255.255"
jail_jail1_ip="192.168.1.15"
jail_jail1_exec_start="/bin/sh /etc/rc"
jail_jail1_exec_stop="/bin/sh /etc/rc.shutdown"

6. Erster Start und abschließende Konfiguration
# /etc/rc.d/jail start jail1 /Geht nur, wenn /etc/rc.conf auf dem Host schon erstellt wurde (5.)
/Ansonsten: # jail /usr/local/jails/jail1 jail1 192.168.0.xxx /bin/sh
# jls /Ist die Jail gestartet?
# jexec ID su /Die neue Jail erstmalig betreten

# newalias /Einmalig ausführen
# passwd /root-Passwort einrichten
# adduser /Benutzer anlegen
# exit

Dann kann man sich das langwierige buildwolrd sparen.
Das ganze in ein script gepackt, dann hat man eine frische jail in nur wenigen Minuten erstellt, man muss auch nicht immer ein neues Basissystemholen, einmal reicht und dann dementsprechend kopieren. Die so erstellt jails ist ca. 140MB groß.
 
Nein, tust du nicht. Ich nutze grundsätzlich ausschließlich vollständige Jails und starte sie auch ausschließlich manuell per jail(8) oder aber durch die rc.conf. Tools wie ezjail nutzte ich nicht. Diese Tools sind nicht grundsätzlich schlecht, aber sie sind in gewisser Weise fehleranfällig. Gerade das Zusammentüdeln der Basejail mit den Servicejails neigt zu Problemen, außerdem gibt es Programme, die das schlicht nicht mögen. Dazu kommt, man kann nur noch alles oder keines Aktualisieren. Aktualisiert man das Basisjail, werden alle darauf aufsetzenden Servicejails auch aktualisiert. Damit verliert man einen großen Vorteil der Jails. Abgetrennte, vollständig eigenständige Systeme. Es ist nämlich keinesfalls so, dass man Aktualisieren muss. FreeBSD ist vollständig rückwärtskompatibel. Man kann problemlos ein 7.2-Jails auf einem 8.0 Host laufen lassen. Man kann sogar ein 1.0-Jail nutzen. Gerade hochkomplexe Jails aktualisiere ich zum Beispiel nicht. Mein in wochenlanger Handarbeit gebautes Mailinglistenarchiv ist z.B. ein FreeBSD/i386 4.3 Jail auf einem FreeBSD/amd64 7.2 Host.

Aber gut, wie aktualisiere ich? Ganz einfach. Ich habe ein paar Scripte (kann ich leider nicht opensourcen, da sie zur Firma gehören und nicht privat sind, sorry), hauptsächlich in in Ruby geschireben, die das machen. Es sind im Prinzip nur Wrapper um "make installworld", bzw. freebsd-update und jexec in Kombination mit pkg_add. Pakete baue ich zentral und verteile sie dann. Aber wenn man keine sehr vielen Jails hat, braucht man das alles nicht. Da reicht schon "mergemaster -iU" zu nutzen und der normale portmaster. :)
 
Zurück
Oben