Re: crosscompile FreeBSD i386

From: Oliver Fromme <olli(at)lurza.secnetix.de>
Date: Sun, 13 Mar 2011 14:56:48 +0100 (CET)

Bernd Walter wrote:
> Oliver Fromme wrote:
> > Matthias Teege wrote:
> > > Oliver Fromme wrote:
> > > > Es geht natürlich auch ganz ohne NFS: Zunächst alles auf
> > > > dem Buildserver in ein temporäres Verzeichnis installieren
> > > > (»make DESTDIR=/... install...«), und dieses dann auf den
> > > > Client kopieren (per cpdup, cpio, tar, was auch immer).
> > >
> > > also das gefällt mir am besten :-) Meinst Du so was wie:
> > >
> > > build# cpdup -o -j0 /export/i386/ client:/
> >
> > Ja, im Prinzip ...
> >
> > > Ich habe es probiert und es geht (vermutlich Glück), sieht aber wie ein
> > > Holzhammer aus. Vermutlich ist es besser, erst den neuen Kernel zu
> > > kopieren und danach das Userland zu ersetzen.
> >
> > Ja, ganz so wie oben hätte ich mich's nicht getraut. :-)
> >
> > Aber wenn das Zielsystem idle ist, kann man wohl tatsäch-
> > lich Glück haben. Auch Minor-Updates (8.x --> 8.y) sollten
> > in der Hinsicht relativ problemlos sein, weil sich in dem
> > Fall an der ABI normalerweise nichts ändert, d.h. es kommen
> > keine neuen Syscalls hinzu oder so.
> >
> > Pech kann man bei einem Major-Update haben (7.x --> 8.y),
> > wenn Binaries vor dem neuen Kernel installiert werden, die
> > dann versuchen, Syscalls zu verwenden, die der laufende
> > (alte) Kernel noch nicht kennt.
> >
> > Faustregel daher: Immer erst den neuen Kernel installieren
> > und booten, dann den ganzen Rest. Und während des Updates
> > auf dem Zielsystem keine neuen Prozesse starten, d.h. die
> > Kiste sollte wirklich idle sein.
>
> Es geht nicht nur um neu gestartete Prozesse.
> Man sollte sich auch darüber im klaren sein womit man kopiert,
> weil eine Shell, mit der man sich gerade eingelogged hat, um das
> kopieren zu starten, oder der Kopierbefehl selber auch crashen kann,
> wenn die Binaries überschrieben werden.

Das ist aus zwei Gründen kein Problem.

Erstens überschreibt cpdup (um das ging es hier) niemals
Dateien. Es kopiert sie zunächst unter einem temporären
Namen und macht dann ein atomares rename(2).

Zweitens erlaubt FreeBSD nicht das Öffnen von Dateien zum
Schreiben, die gerade vom Runtime-Linker geöffnet sind.
Bei dem Versuch gibt es ein ETXTBSY (»Text file busy«).

Natürlich sind trotzdem Fälle denkbar, wo etwas schiefgeht,
wenn z.B. eine Konfigurationsdatei überschrieben wird, die
danach Dinge enthält, die das noch vorhandene alte Binary
nicht parsen kann. Wenn dann der Prozess aus irgendeinem
Grund neugestartet wird, bevor das neue Binary kopiert
wurde, gibt das ein Problem. Im vorliegenden Fall (cpdup
via ssh) ist das aber sehr unwahrscheinlich.

Gruß
   Olli

-- 
Oliver Fromme, secnetix GmbH & Co. KG, Marktplatz 29, 85567 Grafing b. M.
Handelsregister: Registergericht Muenchen, HRA 74606,  Geschäftsfuehrung:
secnetix Verwaltungsgesellsch. mbH, Handelsregister: Registergericht Mün-
chen, HRB 125758,  Geschäftsführer: Maik Bachmann, Olaf Erb, Ralf Gebhart
FreeBSD-Dienstleistungen, -Produkte und mehr:  http://www.secnetix.de/bsd
PI:
int f[9814],b,c=9814,g,i;long a=1e4,d,e,h;
main(){for(;b=c,c-=14;i=printf("%04d",e+d/a),e=d%a)
while(g=--b*2)d=h*b+a*(i?f[b]:a/5),h=d/--g,f[b]=d%g;}
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Sun 13 Mar 2011 - 14:57:12 CET

search this site