# [Request] Gentoo Offline Installation Howto

## der.gecko

hi,

ich möchte gerne Gentoo auf mehreren rechnern installieren, die aber über keine internetverbindung verfügen und auch keine bekommen sollen^^ die sourcen möcht ich über einen anderen rechner mit gentoo herunterladen und entweder per usb festplatte oder evntuell ein netzlaufwerk den anderen clients direkt oder im lan zugänglich machen. was muss ich nun alles beachten?

wo werden (mit emerge -f auf dem host mit internet) die sourcen gespeichert und wie kann ich den anderen clients beibringen, sich diese nicht von einem server aus dem internet herunterzuladen, sondern vielleicht von einem ftp server/netzlaufwerk im lan oder einer usb festplatte. interessant wären sicher auch andere möglichkeiten, da ich nicht der einzige user bin, der gentoo auf rechnern ohne internet installieren will. also nur her mit euren ideen^^

wie kann ich mir sicher sein, dass ich beim fetchen auch alle dependencies herunterlade, bzw. was muss ich bei verschiedenen gentoo versionen beachten? muss ich portage für jeden client  zwingend über das internet updaten?

ich weiss, das sind viele fragen, und manch einer wird schreiben wollen, dass ich doch einfach googeln soll^^ das hab ich schon getan und bin damit auch nicht wirklich weiter gekommen. in sachen linux bin ich (noch) nicht so gewandt, bedenkt das bitte bei euren antworten.

----------

## musv

Eigentlich ist das ganz einfach.

Du gibst auf dem Rechner mit der Internetverbindung "/usr/portage" frei. Und das mountest du dann auf den Clients. So hab ich das bei meinem Notebook gemacht. Hat gleich noch den Vorteil, daß du nur auf einem Rechner "emerge --sync" ausführen mußt.

Ok, jetzt im Einzelnen:

Auf dem Server:

1. nfs installieren (Name des Clients anpassen bzw. IP-Bereich an der Stelle festlegen):

```
/usr/portage            fehlermelder(ro,all_squash,async,no_subtree_check)

```

2. nfs starten (am besten gleich in den Autostart reinschreiben

```
rc-update add nfs default
```

Auf dem Client:

1. /usr/portage löschen (braucht man da nicht mehr)

2. Den Portage mounten. Dazu hab ich mir mal ein kleines Script geschrieben (auch hier muß der Server angepaßt werden):

```

#!/bin/bash

# Script zum:

# 1. Automatischten Starten von Portmap

# 2. Mounten von /usr/portage via NFS

#

# Sinn:

# - Nicht auf 2 Rechnern den Portage-Tree installieren zu müssen

# - Durch Wegfall des Portage Speicherplatzgewinn

# Variablen festlegen

# Portage-Server, der gemountet werden soll

PORTAGE_SERVER=blechkasten

# Portmapstatus ermitteln

get_portmapstatus ()

{

        PORTMAPSTATUS=0

        PORTMAP=`/etc/init.d/portmap status | grep started`

        if [ -n "$PORTMAP" ] ; then

                PORTMAPSTATUS=1

        fi

        return $PORTMAPSTATUS

}

# Portageserver prüfen, ob /usr/portage gemountet ist

get_servermount ()

{

        MOUNTSTATUS=0

        MOUNT=`df | grep $PORTAGE_SERVER`

        if [ -n "$MOUNT" ] ; then

                MOUNTSTATUS=1

        fi

        return $MOUNTSTATUS

}

# Hauptprogrammroutine

# Check auf Root

if [ "$USER" == "root" ] ; then

        echo "Rootcheck: ok"

        # Verzeichnis noch nicht gemountet?

        get_servermount

        if [ $? == 0 ] ; then

                # Check, ob Portmap existiert

                if [ -e '/etc/init.d/portmap' ] ; then

                        echo "Portmap vorhanden: ok"

                        # Portmapstatus abspeichern

                        PORTMAP_OK=0

                        # Check, ob Portmap gestartet

                        get_portmapstatus

                        if [ $? == 1 ] ; then

                                echo "Portmap gestartet: ok"

                                PORTMAP_OK=1

                        else

                                echo "Portmap nicht gestartet."

        

                                # Versuchen, Portmap zu starten

                                echo "Versuche Portmap zu starten."

                                /etc/init.d/portmap start

                                get_portmapstatus

                                if [ $? == 1 ] ; then

                                        echo "Portmap gestartet: ok"

                                        PORTMAP_OK=1

                                else

                                        echo "Portmap konnte nicht gestartet werden."

                                fi      

                        fi

                        # Überprüfen, ob schon gemountet ist

                        if [ "$PORTMAP_OK" == 1 ] ; then

                                echo "Portage mounten"

                                mount -t nfs -o wsize=8192,rsize=8192,hard,intr $PORTAGE_SERVER:/usr/portage /usr/portage

                        fi

                # Portmap nicht gemountet

                else

                        echo "Portmap muss installiert sein."

                fi

        fi

else

        echo "Nur Root kann den Portage aktivieren"

fi

```

Wenn man will, kann man das Script gleich bei Bedarf in "/etc/conf.d/local start" unterbringen. Da ich aber mein Notebook ab und zu mal unterwegs abgestöpselt vom Desktoprechner benutze, starte ich das Script nur, wenn ich wenn ich grad 'n Update ausführen will.

3. Nach Mounten von /usr/portage kannst du dann einfach ein "emerge wasauchimmer" ausführen.

Nachteil: Falls der Client ein Paket braucht, was nicht in den Distfiles vom Server vorhanden ist, bricht das Compilieren ab. Und da du den anderen Rechnern keine Internetverbindung gestatten willst, nützt es auch nichts, das nfs-Laufwerk schreibbar freizugeben.

Alle Pakete, die du für die Installation brauchst, ziehst du auf dem Server runter, emerge --sync machst du ebenfalls nur auf dem Server. Alle anderen Einstellungen (make.conf usw.) beläßt du so, als ob der Portage vorhanden wäre. 

Bei einer Neuinstallation machst du das Ganze halt in der LiveCD-Umgebung und mountest dann /usr/portage per --bind in die chroot-Umgebung. 

Also in der Umgebung der LiveCD (habs nicht gestestet, sollte aber eigentlich funktionieren):

```
mount -o bind /usr/portage /mnt/gentoo/usr/portage
```

In diesem Zusammenhang bietet es sich auch gleich an, die für die meisten Leute sinnlosen Metadaten abzuschalten:

https://forums.gentoo.org/viewtopic-t-567307.html

Denn die müßtest du auf jedem Rechner (Server+Clients) aktualisieren, wenn du die nutzen willst.Last edited by musv on Fri Jul 13, 2007 5:59 pm; edited 1 time in total

----------

## forrestfunk81

hab das noch nicht versucht, ich sehe da aber zwei Möglichkeiten:

1. Du gibst dein lokales Portage Directory (/usr/portage) via nfs frei und mountest das auf den anderen Rechnern (siehe wiki)

oder

2. (etwas aufwendiger) du baust dir einen eigenen lokalen Portage und Package Mirror (siehe wiki)

----------

## der.gecko

cool, danke musv für die schnelle antwort und das schöne script^^ ich werde mir das die nächsten tage noch genauer anschauen, aber auf den ersten blick hin sieht es vielversprechend aus.

wenn ich eine usb festplatte mit den ganzen sourcen an einen client klemmen würde, muss ich in dem fall auch nur die festplatte in '/usr/portage' mounten, oder?

nfs ist zwar schön und gut, aber ich hätte auf dem "source host" noch einen performanten ftp server, wie könnte man den in '/usr/portage' einbinden?

als letztes nochmal die frage nach dem portagetree und den versionen... also, wenn ich das richtig verstanden hab, mach ich mit einem 'emerge --sync' ein update des portagetrees und mit einem 'emerge --update world' (bzw. 'emerge --update --deep world') ein update aller installierten pakete. so, jetzt meine fragen:

1. werden auf dem "source host" auch alle pakete geupdatet, die nicht installiert sind, sondern nur für die internetlosen clients bestimmt sind?

2. sollte ich regelmässig updates machen? sowohl beim host, als auch bei den clients.

3. was muss ich beachten, dass auch alle dependencies berücksichtigt werden?

----------

## der.gecko

@forrestfunk81: das mit dem portage mirror ist natürlich auch eine idee, ich muss nur noch nen rechner finden, der genug platz bietet^^

----------

## musv

 *der.gecko wrote:*   

> wenn ich eine usb festplatte mit den ganzen sourcen an einen client klemmen würde, muss ich in dem fall auch nur die festplatte in '/usr/portage' mounten, oder?

 

Da reicht dann ein

```
mount /dev/$deineusbplatte /usr/portage
```

 mit entsprechender Pfadstruktur auf der Festplatte. Nur die Archivdateien reichen da nicht.

 *der.gecko wrote:*   

> nfs ist zwar schön und gut, aber ich hätte auf dem "source host" noch einen performanten ftp server, wie könnte man den in '/usr/portage' einbinden?

 

Das geht so nicht. In /usr/portage stehen ja nicht nur die Archivpakete (Distfiles) und Ebuilds sondern auch noch die Profile, die Patches und der ganze andere Krimskrams. 

Wenn du unbedingt einen FTP-Server benutzen willst, fällt mir jetzt nur die Möglichkeit, einen eigenen Mirror aufzusetzen, ein. Das hat aber in Deinem Fall wieder folgende Nachteile:

1. Du müßtest auf jedem Client beim Update dann wieder emerge --sync ausführen - 

aber halt mit einziger Gentoo-Mirror-Adresse Deines Servers in der make.conf.

2. Du brauchst wieder auf jedem Client einen eigenen Portage-Tree.

Wenn du das trotzdem machen willst, findest du hier ein Howto dazu:

http://gentoo-wiki.com/HOWTO_Local_Rsync_Mirror

 *der.gecko wrote:*   

> 
> 
> als letztes nochmal die frage nach dem portagetree und den versionen... also, wenn ich das richtig verstanden hab, mach ich mit einem 'emerge --sync' ein update des portagetrees und mit einem 'emerge --update world' (bzw. 'emerge --update --deep world') ein update aller installierten pakete. so, jetzt meine fragen:
> 
> 1. werden auf dem "source host" auch alle pakete geupdatet, die nicht installiert sind, sondern nur für die internetlosen clients bestimmt sind?
> ...

 

emerge --sync führst du nur auf dem Server aus. Damit aktualisierst du auch nur den Portage-Tree auf dem Server. Der Portage-Tree ist praktisch das Verzeichnis, daß Dir alle verfügbaren Pakete inklusive Installationsanleitungen zur Verfügung stellt. Das hat noch nichts mit irgendwelchen Updates der installierten Pakete zu tun. Wenn du ein Paket installieren / updaten willst, wird die dafür notwendige Archivdatei aus dem Netz (von diversen Gentoo-Mirrors) gezogen und in /usr/portage/distfiles abgelegt.

1. Nein, jeder Rechner - egal ob Server oder Client - versucht beim Update die Archivdateien runterzuladen, die er für seine Installation braucht. Wie ich im 1. Posting schon bei den Nachteilen geschrieben hab, geht das dann schief, weil die Clients in meiner Version keinen Schreibzugriff auf das nfs-Laufwerk und keinen Internetzugriff haben. In dem Fall mußt du beim Installationsabbruch der Clients auf dem Server ein 

```
emerge -f $paketname
```

 ausführen.

Alternativ könntest du Dir ein Script schreiben, was auf dem Client ausgeführt ein 

```
emerge -pu world
```

 ausführt, diese Liste in eine Datei reinschreibt, du diese Datei via nfs wieder freigibst und der Server diese Datei ausliest und per 

```
emerge -f 
```

 versucht alle aufgelisteten Pakete runterzuladen. Pakete, die schon in /usr/portage/distfiles vorhanden sind, werden dabei immer übersprungen.

2. Das kommt darauf an, wie updatewütig du bist. Die meisten Gentoo-Jünger sind da ziemlich updategeil und machen das jeden Tag (ich gehör da auch dazu). Wenn du nur aller paar Monate ein Update machst, dann kann da schon 'ne ganz schön große Menge an zu installierenden Paketen zusammenkommen. Außerdem kann es manchmal zu Problemen kommen, wenn du lange Zeit keine Updates aufgespielt hast, da sich manche Dinge bei Gentoo etwas schneller und extremer ändern als bei anderen Distributionen.

3. Um die Abhängigkeiten (man muß ja nicht mehr Englisch benutzen als notwendig) kümmert sich Gentoo schon selbst. Du mußt nur in der make.conf über die USE-Flags anpassen, welche Abhängigkeiten du gerne haben möchtest.

----------

## der.gecko

ok, danke. das ist alles sehr hilfreich. 

und ja, normalerweise meide ich anglizismen, musv. im augenblick bin ich nur ziemlich müde und dementsprechend denkfaul^^ ich werde mich wie gesagt morgen daran versuchen und auch ein wenig testen, was im bereich des möglichen liegt... sollte das sinn machen, werde ich hier einen kleinen erfahrungsbericht schreiben, mit der/den für mich optimalen konfiguration(en). 

ich finde gentoo ist eine sehr gelungene linux distribution und die reaktionszeit in den foren und irc channels (sry, aber kanal war mir dann doch zu doof^^) ist wie gewohnt sehr hoch. die einzige hürde, die ich bei gentoo für erstanwender und auch unternehmer sehe ist der bedarf einer funktionierenden internetverbindung und manchmal auch die komplexität, mit der das system konfiguriert werden kann.

nebenbei: ich mach ja nebenbei freiberuflich it support und hatte des öfteren mit vista zu tun. ich glaube fest daran, dass die linux gemeinschaft sehr bald neue anhänger bekommen wird^^

----------

## Sourcecode

Mal davon abgesehen das man das ganze auf /usr/portage mounten kann gäbe es noch die Möglichkeit die Portage Verzeichnisse + Distfiles in der make.conf auf andere Verzeichnisse zu lenken, Standardmäßig wären das folgende Verzeichnisse (einfach mit den gewünschten Verzeichnissen ersetzen und in die make.conf schreiben):

PORTDIR="/usr/portage"

PKGDIR="/usr/portage/packages"

PORTAGE_TMPDIR="/opt/tmp"

PORTDIR="/usr/portage"

DISTDIR="/usr/portage/distfiles"

Vernünftiger ist es natürlich die Festplatte oder das Verzeichniss vom Internetrechner direkt nach /usr/portage zu mounten, aber diese Lösung sollte man im Hinterkopf behalten falls das mounten aus irgendeinem Grund nicht geht (Hardwareverträglichkeiten oder sonstwas  :Wink:  )

----------

