EasyLFS Projektthread

Ich hab mir auch vorgenommen mich mal etwas mit UDev auseinander zu setzen um noch umfassendere Regeln ausliefern zu koennen sodass z.B. kein zusaetzliches Script mehr noetig ist um beim Systemstart z.B. die USB-Module zu laden und sowas.
Sollte ja eigentlich ueber UDev moeglich sein.
Da hätte ich einen interressanten Link als Lektüre! :)

Schönen Tag noch, man liest sich. :)
Euer Jens Ornot alias Webstar
 
Wahrscheinlich war es bei mir so, dass ich das Sys schon zu weit hoch hatte, und tmpfs schon nach /dev gemounted war - somit konnte init auf die konsole nich mehr zugreifen ... ich hatte was am udev-script gemurkst weil ich die rechte mit restorecon neu setzen wollte und im script einen tippfehler hatte :D
 
Nochmal zu PAM:
PAM lässt sich mit shadow und SELinux in den aktuellen Versionen installieren und konfigurieren (shadow=4.0.18.1 vom debian-ftp, pam=0.99.7.1 von ftp.kernel.org), hab nur noch ein kleines login-problem: PAM fragt beim login, welchen kontext ich benutzen will - find ich nich so klasse, da ein unerfahrener user da eh keine ahnung von hat :D ..werde also noch versuchen, ein"default" zu bastel nund die nächsten Tage ein Online-Tut zur Verfügung stellen :)

Bis denne
Andy

Nachtrag:
Habe bis heute morgen im Sys gefummelt, um PAM und SELinux zu koppeln, ist ja echt mal jede Menge Konfigurationsarbeit :D ...soweit läufts jetzt erstmal ohne die dumme Abfrage, habe aber noch 2 wichtige Sachen, die Du bitte ins Sys integrieren müsstest Dennis:

1.) /var/log/wtmp fehlt
2.) /var/log/lastlog fehlt
3.) /etc/shells fehlt
4.) /etc/securetty fehlt ebenfalls

Die Dinge gehören eigentlich zum Standard und werden von PAM bitter benötigt - vielleicht kannst du das im nächsten Release berücksichtigen :)

LG
Andy
 
Zuletzt bearbeitet:
So, ich bin auf ein kleines, aber wirklich unguenstiges Problem mit der Installation von SELinux gestossen, oder eigentlich eher mit den CoreUtils.
Der SELinux-Patch macht es notwendig, dass autoconf und automake vorhanden sind, sonst bricht die Installation der CoreUtils ab, was unguenstig ist.
Nur koennen eben diese zu dem Zeitpunkt wo die CoreUtils installiert werden noch nicht installiert werden sodass ich mich entschieden habe die CoreUtils, genau wie auch die GLibC, ein weiteres Mal zu installieren falls SELinux-Support aktiviert wurde.
Dies geschieht nun zusammen mit den SELinux-Utils, was so ziemlich am Ende der Stage 2 geschieht und somit sollte es auch keinerlei Probleme mit irgendwelchen Abhaengigkeiten geben.
PsMisc, Shadow und Util-Linux werden eh erst recht spaet installiert und da sind dann auch schon autoconf und automake da, falls diese dort denn ueberhaupt noetig sind. Damit sollte es also keine Probleme geben, aber das werd ich wohl erst etwas spaeter sehen.

Auf jeden Fall hab ich jetzt die Scripts was angepasst sodass die CoreUtils also erstmal ganz normal installiert werden und spaeter nochmal mit SELinux-Support.
War schon etwas wundersam, dass ich alles ohne Probleme im fertigen System kompilieren konnte nur eben beim Bau eben diesen Systems kamen dumme Fehler.
Naja, aus Fehlern lernt man und ich denke wir sind jetzt wieder einen Schritt weiter.

Nur wurde dadurch jetzt der Release etwas verzoegert und ich glaube nicht, dass ich vor Samstag morgen (wo erstmal meine letzte Chance fuer einen Upload ist bevor ich umziehe und ich in der neuen Wohnung mit dem sagenumwobenen Internet ausgestattet werde) die endgueltige LiveCD aus dem Aermel schuetteln kann.
Unmoeglich ist es aber nicht, das setzt aber voraus, dass jetzt alles glatt laeuft und ich wahrscheinlich morgen Abend ein paar Ueberstunden einlegen muss. ;)

Zu Deinem Nachtrag: Werd ich mir mal anschauen.
 
Frohe Kunde sei Euch allen bereitet, denn es ist fast geschafft!

SELinux, der letzte Stolperstein, laeuft. GlibC, CoreUtils, PsMisc, Shadow und sogar IPTables bekommen bei Bedarf (also falls SELinux-Support ausgewaehlt wurde) entsprechende Optionen um auch mit SELinux bestmoeglich zusammenarbeiten zu koennen. Das fuehrt zum Beispiel dazu, dass unter anderem ls auch auch ps mit dem neuen Parameter -Z ausgestattet werden welche den Security-Context anzeigt.
Beim ersten Startvorgang wird aber einige Zeit aufgewandt um erstmal alle Dateien und Verzeichnisse mit Security-Labels zu versehen, und wenn ich einige Zeit sage, dann meine ich auch einige Zeit. Pizza holen und essen sollte locker drin sein. ;)

Die mir bekannten Bugs der vorigen Version sind beseitigt und bei einem kurzen Test konnte ich auch keine neuen finden (was nicht heisst, dass keine da sind ;) ).

Ich werde dann jetzt gleich mal das System fuer die LiveCD basteln und dann zur finalen LiveCD zusammenstricken.
Fuer die CD selbst hab ich mir die Tage auch was nettes einfallen lassen, und zwar 2 kleine Scripts zum Laden von Modulen.
Hierbei wird lspci genutzt um zum einen zu erkennen ob ein USB-Controller da ist, und auch was fuer einer (obwohl dies in der Regel ein UHCI-Controller sein duerfte). Das entsprechende Modul wird dann geladen. Dies sollte z.B. dabei helfen wenn man eine USB-Tastatur hat. ;)
Weiterhin werden die restlichen PCI-Geraete mit der Datei modules.pcimap abgeglichen sodass auch Treiber fuer Festplattencontroller (hoffentlich auch SCSI und SATA) und Netzwerkkarte geladen werden.
Diese beiden Scripts sind ziemlich neu und kaum getestet sollten aber eher keinen Effekt haben als Probleme zu verursachen.
Im Grunde sollten sie aber die vorhandene Hardware den entsprechenden Modulen zuordnen koennen (bei meinen Tests im QEmu wurde der emulierte PIIX-Controller erfolgreich erkannt und auch das entsprechende Modul geladen) und diese dann laden.

Einen Downloadlink kann ich bislang nicht anbieten und weiss bislang auch nicht genau wann. Ich zieh morgen um und ich weiss nicht genau wann ich dann wieder mit dem Internet verbunden werde sodass ich dann das Image hochladen kann.
Aber im Laufe der kommenden Woche sollte sich da bestimmt was machen lassen.

Welche Software in welcher Version enthalten ist kann in diesem Post eingesehen werden, eine Installationsanleitung folgt im naechsten Post.
Und der Downloadlink dann sobald verfuegbar.
 
Installationsanleitung fuer EasyLFS 0.2.6

  1. Am Ende des Starts von der LiveCD wird zunaechst mal die Tastaturbelegung abgefragt.
    Dabei ist es wichtig zu beachten, dass das Script die Zahlen vor den jeweilgen Eintraegen erwartet und nicht den Namen des Eintrages selbst!
  2. Anschliessend als root einloggen.
    Ein Passwort gibt es nicht, also einfach nochmal Enter druecken und schon ist man im System.
  3. Festplatte partitionieren.
    Dazu stehen fdisk und parted zur Verfuegung.
    Die genutzte Partition sollte mindestens 3GB gross sein. Ein vollstaendig installiertes System benoetigt ca. 1.5GB, bei der Installation wird aber was mehr benoetigt. 3GB hab ich aber erfolgreich getestet.
    Zusaetzlich empfiehlt sich natuerlich eine Swap-Partition, zwingend noetig ist diese aber nicht. Falls eine Swap-Partition angelegt wird sollte diese nicht aktiviert werden.
  4. Nach /lfs-install wechseln.
  5. lfs_config.sh bearbeiten.
    Dazu stehen die Editoren vim (vi), joe und nano zur Verfuegung.
    Hier mal die relevanten Einstellungen mit ein paar Erklaerungen:
    • Die Zielpartition:
      LFS_DEV=/dev/
      Hier muss hinter /dev/ noch die Partition angegeben werden wo das System denn eigentlich installiert werden soll.
      Das sollte am Ende ungefaehr so aussehen: /dev/hdb3
    • Die Swap-Partition:
      #LFS_SWAP=
      Diesen Eintrag nicht bearbeiten, denn die Swap-Partition wird, falls vorhanden automatisch erkannt und eingetragen.
    • Fallschirm 1:
      LFS_BUILD_FROM_CD=y
      Da es im Grunde auch moeglich ist das ganze Paket in sein System zu kopieren und von dort zu bauen gibt es diese Option.
      Ist sie an, was die Standardeinstellung ist, dann wird das /tmp-Verzeichnis auf die Zielpartition gelinkt. Das wird deshalb gemacht weil beim kompilieren gern mal in /tmp geschrieben wird, und da /tmp im Speicher liegt wenn man von CD bootet waere dies wohl Resourcenverschwendung und koennte im Extremfall zum Abbruch fuehren weil die virtuelle Festplatte (also die Root-Partition im Speicher) voll ist.
    • Fallschirm 2:
      LFS_SAFECOPY=y
      Bei einem Kopiervorgang kann es auch mal zu Stoerungen kommen sodass eine Datei fehlerhaft kopiert wird.
      Da hier knapp 300MB Sourcen von CD auf Festplatte transferiert werden und die Installation auch eine Weile dauert sollte man sich sicher sein koennen, dass die Installation nicht abbricht nur weil ein Paket nicht entpackt werden kann weil es beschaedigt ist.
      Diese Option stellt sicher, dass die Zieldatei auch wirklich der Quelldatei entspricht indem es nach dem Kopiervorgang die MD5-Summen beider Dateien vergleicht. Sind diese nicht gleich wird nochmal kopiert, und zwar solange bis sie gleich sind!
    • Das Dateisystem:
      #LFS_FS=ext2
      LFS_FS=ext3
      #LFS_FS=ext4dev
      #LFS_FS=reiserfs
      #LFS_FS=jfs
      #LFS_FS=xfs

      Fuer Linux stehen quasi haufenweise Dateisysteme zur Verfuegung (auch wenn natuerlich nicht unbedingt alle dafuer geeignet sind Linux darauf zu installieren, wie z.B. NTFS ;) ) und diese Liste repraesentiert die Dateisysteme welche sozusagen fuer den Betrieb von Linux ausgelegt sind. Jedes Dateisystem hat seine Vor- und Nachteile.
      Ext2 z.B. ist in der Performance gut dabei, bietet dafuer aber kein Journal (was den Performance-Zuwachs erklaert ;) ).
      Ext4 ist noch experimentell und entsprechend kann ich hier nicht garantieren, dass damit alles laeuft. Es steht dennoch als "Option fuer Mutige" zur Verfuegung. ;)
      Standard ist hier Ext3, da dieses heutzutage wohl der allgemeine Standard in Sachen Linux-Dateisystem ist.
      Einen kleinen unverbindlichen Vergleich zu den genannten Dateisystemen hab ich mal in der Tutorials-Section unter dem Titel Dateisysteme fuer Linux: Ein kleiner Performancevergleich abgelegt.
    • Der Compiler, Teil 1:
      LFS_GCC=3.4.6
      #LFS_GCC=4.0.4
      #LFS_GCC=4.1.2

      Meiner Erfahrung nach duerfte man wohl weiterhin mit GCC 3.4 am sichersten fahren wenn man nicht unbedingt darauf steht ein paar Minuten bis Stunden in die Suche von Patches investieren zu wollen. Dementsprechend ist diese Version auch die Standardeinstellung.
      Wer sich davor aber nicht scheut darf gern auch GCC 4.0, welcher in Sachen Patches noch recht moderat daherkommt, oder GCC 4.1 nutzen, welcher doch zu einer relativ ordentlichen Patchsuche einlaedt.
      Moeglicherweise sieht es mittlerweile auch besser aus, denn auch andere Software wird weiterentwickelt, und dort wird dann sicher auch neueren Compiler-Versionen Genuege getan. Aber wie gesagt, GCC 3.4 ist die sichere Wahl.
      Es ist aber mit allen moeglich ein vollstaendiges System zu erstellen. Ich selbst nutze GCC 4.1.1 und hab alles was man so braucht laufen.
    • Der Compiler, Teil 2:
      LFS_GCC_COMPLETE=n
      Wird diese Einstellung auf y gesetzt werden von GCC nicht nur der C- und C++-Compiler installiert sondern auch alle anderen verfuegbaren Compiler, wie z.B. GCJ, der Java-Compiler.
    • Der Rechnername:
      LFS_HOSTNAME=easylfs.local.net
      Hier wird der Rechnername, als FQDN (Fully Qualified Domainname), angegeben.
    • Netzwerk-Einstellungen:
      #LFS_IP=192.168.1.1

      #LFS_DNS1=205.252.144.126
      #LFS_DNS2=218.102.32.208

      Wird die erste Option (LFS_IP) aktiviert (also der Kommentar entfernt) so wird beim Systemstart versucht die erste Netzwerkkarte mit zu starten und mit der IP zu versehen.
      DHCP ist bisher nicht direkt moeglich, kann aber, da das DHCP-Paket installiert werden kann, manuell eingestellt werden.
      Die Automatisierung ist geplant. ;)

      Die naechsten beiden Eintraege bieten die Moeglichkeit bis zu 2 DNS-Server anzugeben.
      Die dort angegebenen IP-Addressen sind keine Beispiele sondern funktionieren wirklich.
    • Die Standard-Seitengroesse (warum auch immer Groff die braucht ;) ):
      LFS_GROFF_PAGESIZE=A4
      Diese Einstellung duerfte wohl kaum einer aendern muessen. Ansonsten duerften hier auch Formate wie Letter und aehnliches moeglich sein.
    • Noch ein paar Einstellungen zum nicht anfassen:
      #LFS_TIMEZONE=
      #LFS_KEYMAP=

      Sowohl die Zeitzone (LFS_TIMEZONE) als auch die Keymap (LFS_KEYMAP) werden hier automatisch eingetragen.
      Die Keymap sollte uebrigens schon drinstehen, immerhin wurde sie ja beim Systemstart ausgewaehlt.
      Die Zeitzone wird zu Beginn der Installation festgelegt.
    • Informationen ueber USB-Geraete:
      LFS_USE_USBFS=y
      Das USBFS kann eingehaengt werden um Detailinformationen zu USB-Geraeten zu erhalten. Da diese in der Regel ganz nuetzlich sind ist diese Option standardmaessig aktiv.
      Wer einen Rechner ohne USB hat kann diese Option getrost deaktivieren indem er sie entweder komplett mit einem # auskommentiert oder auf n setzt.
    • "Automatische" Kernel-Installation:
      LFS_USE_CDKERNEL=n
      Diese Option auf y zu setzen bewirkt, dass die Kernel-Einstellungen vom auf der CD laufenden Kernel uebernommen werden.
      Wenn man soweit gekommen ist diese Datei bearbeiten zu koennen ist das schonmal ein guter Hinweis darauf, dass dieser Kernel das eigene System betreiben kann, jedoch ist dieser ziemlich allgemein gehalten (ein riesen Haufen Module, CPU ist auf 586 gestellt, ...). Ausserdem werden die Scripts zur Device-Erkennung welche ich auf CD gepackt habe nicht installiert sodass es moeglicherweise zu Problemen kommen koennte.
      Allgemein wuerde ich empfehlen den Kernel selbst einzustellen. Und wer SELinux will muss das eh tun, denn diese Unterstuetzung ist im CD-Kernel nicht aktiv.

      Fuer die Zukunft koennte ich mir vorstellen aufgrund der laufenden Module und der Paketauswahl eine automatische Vorauswahl erstellen zu lassen. Wie ich das angehe weiss ich aber noch nicht genau.
    • Optionale Pakete:
      #LFS_INSTALL_ALL_FSUTILS=y
      #LFS_INSTALL_BIND=y
      LFS_INSTALL_DCRON=y
      #LFS_INSTALL_DHCP=y
      #LFS_INSTALL_DMRAID=y
      #LFS_INSTALL_DOSFSTOOLS=y
      #LFS_INSTALL_DPKG=y
      #LFS_INSTALL_EJECT=y
      #LFS_INSTALL_FUSE=y
      LFS_INSTALL_HDPARM=y
      #LFS_INSTALL_IPTABLES=y
      #LFS_INSTALL_JOE=y
      #LFS_INSTALL_KEXECTOOLS=y
      #LFS_INSTALL_LMSENSORS=y
      #LFS_INSTALL_LYNX=y
      #LFS_INSTALL_MDADM=y
      #LFS_INSTALL_MIDNIGHTCOMMANDER=y
      #LFS_INSTALL_NANO=y
      #LFS_INSTALL_NCFTP=y
      #LFS_INSTALL_NETTOOLS=y
      #LFS_INSTALL_NTFSPROGS=y
      #LFS_INSTALL_OPENSSH=y
      #LFS_INSTALL_PARTED=y
      LFS_INSTALL_PCIUTILS=y
      #LFS_INSTALL_RPM=y
      #LFS_INSTALL_SCREEN=y
      #LFS_INSTALL_SELINUX=y
      LFS_INSTALL_SLOCATE=y
      #LFS_INSTALL_SMARTMONTOOLS=y
      LFS_INSTALL_USBUTILS=y
      #LFS_INSTALL_WGET=y
      LFS_INSTALL_WHICH=y

      Diese Einstellungen sollten eigentlich selbstredend sein.
      Hier wird eingestellt welche optionalen Pakete noch installiert werden sollen.
      Ein paar Pakete die fuer viele User nuetzlich sind sind hier vorausgewaehlt.
    • Und zum Schluss nochwas zum Finger davon lassen:
      LFS_ERROR=0
      Diese Variable wird in den Scripts genutzt um Fehler festzustellen. Ist diese nicht 0 wird abgebrochen.
      Aenderungen hier fuehren also zur sofortigen Explosion des Computers. ;)
  6. lfs_install.sh ausfuehren.
    Hierbei wird man ziemlich zu Beginn nach ein paar Angaben zum eigenen Aufenthaltsort befragt um anhand dieser dann die Zeitzone einzustellen.
    Gegen Ende gibt es dann noch 2 (oder auch nur eine, wenn LFS_USE_CDKERNEL aktiviert wurde) Unterbrechungen, einmal zur Konfiguration des Kernels (oder eben nicht falls die angesprochene Einstellung aktiv ist) und einmal um das root-Passwort zu setzen.
    Wenn man soweit gekommen ist ist man aus dem schlimmsten raus, nach dem root-Passwort wird nur noch aufgeraeumt und neu gestartet.
Wenn das System irgendwann neu startet sollte alles gluecklich verlaufen sein. Anderenfalls sollte das Script eine Fehlermeldung praesentieren.

Ich hoffe, dass alle Interessierten das System erfolgreich mit den gewuenschten Optionen installieren koennen und bei der Nutzung keine Probleme auftreten.

Kritik, Kommentare, Anregungen und vor allem natuerlich Bugreports sind herzlichst willkommen.
 
Es gibt neues von der SELinux-Front, bzw von mir :)

Die Integration von SELinux in easyLFS ist wie bisher geschehen und auf meiner Webseite nun doch grundlegend falsch:

Die Initialisierung von SELinux MUSS grundsätzlich bereits im Init-Kontext des Kernels passieren, da init selbst sowie alle aufgerufenen Scripts in /etc/rc.d/* unter falschem Kontext verarbeitet werden. Das Resultat dabei ist, dass das System unter falschem Kontext arbeitet, selbst der angemeldete Benutzer ist in der Targeted-Policy nicht wie erwartet system_u:eek:bject_r:unconfined_t sondern system_u:eek:bject_r:kernel_t - was bedeutet, dass der Benutzer unter dem Kernel-Kontext arbeitet.

Was nun geändert werden musste ist, dass init einen Patch brauchte (habe ich von gentoo bzw redhat übernommen) und das ganze System etwas mehr angepasst werden muss. Dazu gehört eine Überarbeitung der init-Scripts, das erstellen angepasster policy-Regeln etc. Dies wird ca. noch eine Woche dauern, danach werde ich weiter PAM integrieren und eine neue Fassung meiner Anleitung auf meinen Server stellen.

@Dennis:
Es gibt eine neue Version von udev, die SELinux voll unterstützt und die Geräte unter richtigem Kontext erstellt. ein kopieren ist überflüssig, habe gestern abend sogar einen MP3-Player angestöpselt und ich konnte sofort lesend und schreibend darauf zugreifen (ist sogar nur ein Billigteil von Hama aus dem real,-Markt :D

So long
Andy
 
Meinst Du UDev 106? Den werd ich mir dann mal anschauen und in der naechsten Version verarbeiten. Dabei werd ich dann auch mal schauen ob irgendwelche Optionen fuer SELinux benoetigt werden oder nicht?

Ist natuerlich etwas unguenstig, dass noch was mehr Arbeit fuer SELinux noetig ist, aber ich denk wie es jetzt ist haben wir schon einen wirklich gewaltigen Schritt in die richtige Richtung getan, der Rest duerfte jetzt wohl noch eher Anpassungen im Detail sein so wie ich es verstehe.

Falls Du einen Link zum Init-Patch fuer mich hast waere das echt klasse, dann koennte ich da am Wochenende auch schonmal schauen.
 
Anbei mal eben ein grösseres Update, das auf EasyLFS wartet:

zum ersten habe ich eine funktionierende referencepolicy (refpolicy) gebaut, die zumindest im target-modus ohne kernelaudits im logfile stabil läuft, erhältlich auf meiner Webseite unter http://www.3-seiten.com/patches unter refpolicy-easylfs.patch.

zum zweiten habe ich udev dazu gebracht, mir alles im richtigen Security-Context zu installieren, wenn neue Geräte im Kernel gefunden werden - das Update dazu kommt am Sonntag (10.03.2007) -der nächste Schritt ist dann die Installation von automount, um USB-Sticks gleich zu mounten :)

Zum dritten lädt init nun fehlerfrei SELinux ins System und läuft im richtigen Kontext (die Änderungen in den Init-Scripten sind damit hinfällig und müssen entfernt werden), auch dazu gibt es einen Patch unter http://www.3-seiten.com/patches

Zum vierten ist das Useradd-Problem ebenfalls in shadow behoben, den Patch dafür gibt es ebenfalls bei mir genauso wie ein Paar Patches für SELinux in den Coreutils und util-linux.

Bitte nutzt noch nicht die linke Navi auf der Patch-Seite, habe sie noch nicht aktualisiert :D


Sooo, ich hoffe, dass ich am Sonntag meine Webseiten aktualisiert bekomme, damit meine Arbeit auch bei Euch umgesetzt werden kann :)

LG
Andy
 
Zurück