# Kleines System,wenig MB&indoes,portage zu gross+packen&mount

## SarahS93

Hab ein kleines laufendes System.

Mit z.B. entpacktem Kernel und dann einem update vom GCC gibt es schon Probleme.

Die I-Nodes reichen nicht mehr obwohl noch 3GB von den 5GB frei sind. 

Benutze EXT4 und würde auch gern bei dem Dateiensystem bleiben.

Das System hat Ca. 220.000 Dateien, /usr/portage/ (distfiles/ liegt woanders) hat 153.000 Dateien.

Wahnsinnig viel finde ich. Daher die Idee /usr/portage/ zu packen mit z.b. rar, und es über rar2fs bei bedarf einzuhängen.

Welches Archiveformat würde Ihr verwenden? Was würde sich besser als rar dafür eignen?

Oder kann ich irgendwie mehr I-Nodes vergeben?

----------

## Christian99

es gibt squash_dir, das hab ich ne weile für den portage tree verwendet um dessen größe zu reduzieren.

das paket gibt es im mv overlay. im kernel muss du dafür noch squashfs aktivieren mit dem gewünschten (oder auch mehreren) kompressionen (xz, lzo, lzma). xz/lzma für kleine größen, lzo für mehr performance (so ganz grob). das wird dann über ein init skript automatisch beim starten gemountet, aber nur read only. das ist eine squasfs einschräkung. aber auf wunch wird das read only mit einem unionfs oder aufs überlagert, so dass man schreiben kann und beim stoppen des initskripts wird die datei, in der das gesquashte verzeichnis ist dasnn aktualisiert.

eine andere möglichtkeit wäre auch, den portage tree über nfs (oder anderes netzwerk fs) einzubinden, wenn verfügbar.

----------

## mv

squash_dir ist nicht mehr aktuell; squashmount (aus dem selben Overlay) ist der in vielerlei Hinsicht verbesserte Nachfolger, benötigt allerdings perl.

Will man aber von vornherein nur readonly, lohnt sich eher ein fester Eintrag in der fstab; squash_dir/squashmount sind nur dann wirklich nützlich, wenn man sie (zumindest zeitweise) mit aufs/overlayfs/unionfs-fuse kombinieren will - was man natürlich beim portage-Baum i.d.R. will, außer man holt sich das squash-File regelmäßig von einem anderen Rechner, auf dem squashmount läuft. Leider benötigen aufs und overlayfs Kernel-Patches, und es ist unklar, ob jemals eines von beiden im Kernel landen wird (obwohl sich Linus selbst vor mehr als einem Jahr dafür ausgesprochen hat, ist nichts passiert...). Zur Not geht sicherlich unionfs-fuse, aber das ist von der Performance nicht so dolle, und sein cow kann auch wieder ganz schön in die inodes gehen...

Von nfs würde ich aus Sicherheitsgründen absehen, wenn es nicht unbedingt sein muss, aber sshfs-fuse ist sehr sicher und braucht keine aufwändige Einrichtung, sondern man muss nur (Überraschung!) fuse im Kernel aktiviert haben.

----------

## SarahS93

Danke für eure Tips!. Das mit dem squash_... usw, klingt aufwenig, kompliziert und scheint nicht ganz das zu sein was ich will.

Das mit dem SSHFS gefällt mir irgendwie etwas besser als es über NFS zumachen.

Bei NFS ist das immer so ein Kuddelmuddel mit den Ports, bei SSH da gegen ists nur ein Port.

Lässt sich denn der SSH-Server so konfigurieren das er von IP: 192.168.101.2 nur den Benutzer  abc123 auf nur das Verzeichniss /mnt/freigabe01/ zugreifen lässt? Kann nur dem Benutzer abc123 die shell verweigert werden?

Oder kann sogar auf dem Host ein zweiter abgegrenzter nur für SSHFS Freigaben gedachter SSH-Dienst laufen?

Warum ist es in Gentoo-Linux eigentlich so gelösst das /usr/portage/* aus so unzähligen vielen kleinen Platraubenden Dateien bestehen muss? Ist da etwas geplant das sich das in absehbarer Zeit ändern wird? (-;

----------

## Christian99

ok, das squash_dir veraltet ist wusste ich nicht, da ich es seit btrfs (eingebaute kompression) nicht mehr verwende.

wieso das so gelöst ist? gute frage, wahrscheinlich historisch. aber ich gehe mal davon aus das das nicht geändert wird. da müsste man ja ganz portage umschreiben.

zu sshfs: da gibt es sowas wie freigaben nicht. du kannst immer auf alles zugreifen, auf das der user, mit dem du dich anmeldest, zugreifen. davon wählst du ein verzeichnis das gemountet wird. du kannst auch einen zweiten sshd starten, aber ich glaube nicht das das nötig ist, denn den sshd kann man auf per user/per host basis einstelln. Schau am besten mal unter "match" in der sshd_config manpage.

----------

## SarahS93

Zu der "match" Sache hab ich unter anderem hier auch was gefunden.

https://wiki.archlinux.org/index.php/sshfs#Chrooting

Wie kann ich aber einen zweiten SSH-Server laufen lassen, am bestern einen der Fernab läuft?

Muss ich den in eine "chroot-Umgebung" stecken? Oder muss ich den "statisch" bauen?

Kenne mich damit noch zu wenig aus, und weiss auch nicht so recht wie sich das nennt was ich suche/will.

----------

## Christian99

ah, ok das chroot für ssh kannte ich auch noch nicht. aber dafür musst du keinen zweiten ssh server starten. einfach den abschnitt wie aus deinem beispiel in die sshd_config eintragen (mit angepassten user und verzeichnis) und dann sollte es schon gehen. probiers doch einfach mal aus.

----------

## SarahS93

Das mit SSH und Vorgegebenen Benutzerverzeichnissen scheint irgendwie doch nicht so das wahre zu sein.

Habe im Internet auf der ein und anderen Seite was gelesen das es möglich wäre das der Benutzer doch aus dieser Umgebung ausbüchsen kann.

Wie seht Ihr das?

Irgendwie scheint NFS wohl doch noch die beste Lösung zu sein.

----------

## Christian99

naja, planmäßig kann er nicht ausbüchsen, aber es kann immer bugs/fehler geben. aber das könnte wahrscheinlich bei nfs (und allen anderen) genauso sein.

oder anders gefragt, was wäre denn das problem, wenn der benutzer ausbüchst? ein normaler benutzer kann ja im normalfall auf dem system sowieso nicht alllzuviel anstellen.

Um was für ein gerät handelt es sich denn btw?

----------

## mv

 *SarahS93 wrote:*   

> Habe im Internet auf der ein und anderen Seite was gelesen das es möglich wäre das der Benutzer doch aus dieser Umgebung ausbüchsen kann.

 

Nur um das klarzustellen: Du hast vor, für zwei Deiner Rechner eine ssh-Verbindung aufzubauen, glaubst aber, dass Dein Client-Rechner kompromittiert ist?

(Andernfalls hättest Du ja keinen Grund, den Server vor dem Client zu "schützen", der ja ohnehin nur mit dem richtigen Schlüssel den Kontakt aufbauen kann.)

In dem Fall - also falls Du Deinem eigenen einloggenden Rechner misstraust - hast Du größere Probleme, als ein Ausbruch aus einer chroot; nfs hilft da überhaupt nichts: Das was der einloggende Benutzer darf, darf er bei nfs ohnehin; Du musst Dich bei nfs schon ziemlich anstrengen, um dem einloggenden Rechner wenigstens root-Rechte "sicher" zu verwehren, wenn diese "vorgibt" root zu sein. Ich habe da schon einige defekte Konfigurationen gesehen...

Zum Ausbruch aus chroot: hardened-sources (grsecurity) erschwert den Ausbruch; bei zu restriktiver Konfiguration können aber einige Programme, die intern chroot benutzen, ev. fehlschlagen - hängt von den installierten Paketen und Deinen Konfigurationen ab.

Eine andere Möglichkeit wäre Starten des sshd in einer eigenen cgroup - das dürfte von vornherein etwas sicherer sein, aber ich habe damit noch nicht herumgespielt.

Aber eine wirklich sichere chroot-Methode, die gegen alle Kernel-Bugs gefeiht ist, gibt es wohl nicht - jede Virtualisierungslösung hat irgendwelche Ausbruchmöglichkeiten durch mehr oder weniger bekannte Exploits.

Ich würde mir an Deiner Stelle übrigens doch nochmal squashmount ansehen: Wenn Du z.B. aufs-sources benutzt, ist das Kernel-Patchen bereits enthalten. Alternativ gibt es sys-fs/aufs3 im Baum, und im mv overlay gibt es auch sys-fs/aufs (eine Alternative für aufs3). Die alternativen overlayfs-Patches gibt es für aktuelle Kernels auch meistens von Ubuntu.

squashmount hat halt den Vorteil, dass es nicht nur für den Portage-Baum sondern z.B. auch für /var/db, /usr/src, /usr/share/texmf-dist, /usr/share/games /usr/lib/libreoffice u.ä. sinnvoll ist.

----------

## SarahS93

He, ne. Denke nicht das der Client kompromitiert sein könnte. Ich plane nur schon etwas weiter und grösser.

Will nach und nach einige VM aufziehen. Und viele davon laufen später mal rund um die Uhr und sind mit dem Internet verbunden.

Auf einigen laufen Dienste auf die von aussen zugegriffen werden kann. Will einfach nur vorsichtig sein.

Will nicht für jede VM eine andere Art von Netzwerklaufwerk haben, sondern schon für alle das gleiche.

Hatte sogar schon den gedanken am Host einen FTP Server laufen zu lassen, und das FTP Verzeichnis jeweils bei den VM einzuhängen.

Ich will von den VM /usr/portage , das temp verzeichnis in dem gebaut wird und das /home/ Verzeichnis vom Benutzer jeweils ausserhalb von der VM haben.

----------

## Jean-Paul

Also irgendwie verstehe ich dich nicht.

Warum willst du das aus der VW ausgliedern ?

/tmp legst du in den RAM, dann ist es weg. Das /home würde ich in der VM lassen, darauf wird ständig geschrieben.

Und für /usr/portage - der Grund deines Posts - gibt es squashfs.

Da ist nichts kompliziert oder schwierig dran. aufs(3) braucht es imho auch nicht (für diese einfache Ausführung)

Ich reduziere mein Portage auf 83MB und zwar so:

 *Quote:*   

> 
> 
> VORBEREITUNG:
> 
> squashfs im Kernel einschalten (File systems -> Miscellaneous filesystems)
> ...

 

Dann kopierst du dieses Script. Bei mir heißt dies "emerge-sync" und liegt in /usr/local/bin.

 *Quote:*   

> 
> 
> #!/bin/sh
> 
> SQFS_OPTS="-force-uid 250 -force-gid 250"	# 250 steht für portage, in /etc/group nachschauen
> ...

 

Das Script ausführbar machen und aufrufen:

 *Quote:*   

> chmod +x /usr/local/bin/emerge-sync
> 
> env-update && source /etc/profile
> 
> emerge-sync

 

und nach ca. 20sek. ist /usr/portage nur noch 83MB groß.

Du kannst ganz normal Updates fahren oder Pakete installieren.

Wenn du damit nicht klar kommst, oder Fragen hast; einfach fragen.

----------

## SarahS93

Hey, danke für deine super ausführliche Beschreibung.

Hab da noch ein paar Fragen zum download der "portage-latest" Datei.

Hab DSL16K, kann auch zu jeder Tageszeit mit 2MB/s herrunterladen, aber mit 5 oder mehr Downloads gleichzeitig nur.

Wie kann ich wget sagen das er die portage-latest Datei mit mehr als nur einer Verbindung lädt?

Habe schon Programme wie aria2c probiert, mit -x 5 z.B. aber von http://de-mirror.org/gentoo/snapshots/portage-latest.tar.xz tut sich da nichts.

Er lädt  bei mir nur mit 300 bis 400 Sachen, und auch nur mit einer Verbindung.

Wo kriege ich eine Liste aller gentoo-mirrors als .txt her um mal die beste Verbindung mit netselect herrauszufinden?

Oder wie kann ich das Problem noch lösen?

----------

## frostschutz

 *Quote:*   

> Oder kann ich irgendwie mehr I-Nodes vergeben?

 

Es ist leider eine Krankheit von ext*, Dateisysteme mit chronischem Inode-Mangel zu erzeugen. Selbst bei reinen Binary-Distros ohne tausende winzige Source-Files rennt man da regelmäßig in Probleme.

Leider kann man die Inode-Zahl (im Verhältnis zum Speicherplatz) nur zum Zeitpunkt des mkfs festlegen. Also müsstest du alle Daten runterkopieren und das Dateisystem neu erzeugen.

Zum Beispiel mit mkfs.ext4 -T small /dev/gerät

----------

## Jean-Paul

Wo es eine Mirrorliste als *.txt gibt weiß ich nicht, grundsätzlich sind die Mirrors hier zu finden.

http://www.gentoo.de/main/de/mirrors2.xml

Was steht denn in deiner make.conf ?

Ich wohne mehr im Süden der Republik und switch'e zwischen Esslingen und Erlangen  *Quote:*   

> GENTOO_MIRRORS="http://ftp-stud.hs-esslingen.de/pub/Mirrors/gentoo"
> 
> GENTOO_MIRRORS="ftp://ftp.uni-erlangen.de/pub/mirrors/gentoo"

 

Suche einen Mirror in deiner Nähe und teste.

----------

## SarahS93

/etc/make.conf 

```
          CFLAGS="-O2 -pipe"

        CXXFLAGS="${CFLAGS}"

           CHOST="x86_64-pc-linux-gnu"

        MAKEOPTS="-j8"

         LINGUAS="de"

         PORTDIR="/usr/portage/"

         DISTDIR="/usr/portage_distfiles/"

          PKGDIR="/usr/portage/packages"

            SYNC="rsync://rsync.europe.gentoo.org/gentoo-portage"

  GENTOO_MIRRORS="http://de-mirror.org/gentoo/

                  http://gentoo.mneisen.org/

                  http://ftp.uni-erlangen.de/pub/mirrors/gentoo"

             USE="-qt4"
```

Naja, ob der Gentoo-Mirror nun in unserer Nähe ist oder weiter weg ... wie kann ich denn mit welchem Programm die portage-latest Datei mit mehr als einer Verbindung gleichzeitig downloaden?

----------

## Jean-Paul

Also wget oder curl können das von Haus aus nicht, soweit ich gelesen haben.

Auf die Schnelle hab ich auch nur aria2 gefunden.

Vielleicht hast du die Parameter nicht korrekt angegeben.

Versuche es mal so  *Quote:*   

> aria2c -x5 <url>

 

oder die Langform  *Quote:*   

> aria2c --max-connection-per-server=5 <url>

 

----------

## SarahS93

Wenn ich in dem Script anstelle von wget aria2c -x 5 einbaue, klappt es nicht mehr....

```
emerge-sync.sh 

bzip2: (stdin) is not a bzip2 file.

tar: Child returned status 2

tar: Error is not recoverable: exiting now

Cannot stat source directory "/tmp/portage" because No such file or directory

mount: special device /mnt/squashed/portage does not exist
```

Brauche ich bei aria2c eine besondere Option die ich ihm mitgeben muss?

----------

## SarahS93

Die Maschiene hat nicht genug Ram, ich kann /var/tmp/ nicht in den Ram legen.

Ich will es über das Netzwerk per SMB/CIFS auslagern

Am Samba-Server habe ich eine Freigabe gemacht, vm01 heisst sie:

```
[vm01]

                comment = vm01

                   path = /mnt/temp-vm01/freigabe

            valid users = vm01

            force group = sarah

                 public = no

               writable = yes

              printable = no

            create mask = 0660

         directory mask = 0770

            hosts allow = 192.168.101.2

             hosts deny = 0.0.0.0/0
```

Am Client will ich sie einhägen mit:

```
mount -t cifs //192.168.178.33/vm01 -o username=vm01,password=vm01 /mnt/gentoo/var/tmp/
```

Am Client  funktioniert das Einhängen auch, ich sehe die Freigabe und kann drauf zugreifen.

Erhalte aber bei emerge solche Fehlermeldungen:

```
Permission Denied: chown('/var/tmp/portage/....', 250, 250)
```

Was mache ich falsch?!

----------

## frostschutz

Das Dateisystem muss Linux-Permissions genauso wie Symlinks und alles andere unterstützen.

Bei SMB/CIFS ist das glaube ich nicht gegeben, geht also nicht.

----------

## Jean-Paul

 *SarahS93 wrote:*   

> Wenn ich in dem Script anstelle von wget aria2c -x 5 einbaue, klappt es nicht mehr....
> 
> ```
> emerge-sync.sh 
> 
> ...

 

Du hast kein *.bzip2-File runtergeladen, sondern vielleicht ein *.xz-File - du musst tar entsprechend ändern.

Dadurch wird auch nicht entpackt und /tmp/portage nicht angelegt.

/mnt/squashed/portage kann nicht gemountet werden, weil es mksquashfs nichts zum "squashen"  :Smile:  gefunden hat.

Das sind alles Folgefehler, weil kein *bzip2 heruntergeladen wurde.

----------

## SarahS93

Ne, das war die .bzip2 Datei gewesen. Nunja .. wie geht das /var/tmp per SMB/CIFS ins Netzwerk auszulagern? Gibt es dafür garkeine Lösung?

----------

## Christian99

wenn du schon tmp ins netzwerk auslagerst, dann kannst du auch den portage tree auslagern. hätte dann auch den vorteil, dass wenn du mehrere systeme hast, nur einmal synchronisieren musst und du es dann auf allen system den aktuellen tree hast. spart auch bandbreite.

----------

## Finswimmer

Ich glaub NFS kann die gesamten Unix-FS Rechte usw. 

Schau da mal, ob das geht.

----------

## SarahS93

Muss denn root auf die NFS Freigabe zugreifen können in dem Fall wenn man /var/tmp/portage/ auslagert?

----------

## SarahS93

Greife per CIFS von mehreren Rechnern nun auf ein zentrales distfiles-Verzeichniss zu, funktioniert prima.

Habe im System per losetup eine Datei die auf einer CIFS Freigabe liegt eingehangen und nutze es als temp für /var/tmp/portage/.

Wünschte es würde eine schönere Lösung geben als es über losetup zu lösen, aber NFS will ich nicht.

Warum braucht emerge den chown Befehl? Und warum müssen Symlinks funktionieren?

Gibt es bei Samba keine funktion für Symlinks? Kann bei emerge das mit dem chown Befehl nicht anders gelöst werden?

Wieviel Speicherplatz in /var/tmp/portage/ braucht welches Paket denn so ?

OpenOffice soll ja sehr viel brauchen habe ich gelesen, aber wieviel?

Welche Pakete zählen sonst so zu den grösseren, und wieviel MB brauchen sie in /var/tmp/portage/?

Welche Erfahrungen habt ihr gemacht?

Kann ich bei losetup eine Datei einhängen die sich nach beliben selbst vergrössert und wieder verkleinert?

----------

## SarahS93

hallo

----------

