Siduction Forum

Siduction Forum => Software - Support => Topic started by: Geier0815 on 2017/11/14, 11:06:03

Title: Wie patcht man richtig?
Post by: Geier0815 on 2017/11/14, 11:06:03
Moin Moin,

ausgehend von diesem Thread (https://forum.siduction.org/index.php?topic=6917.msg56181#msg56181) zu VirtualBox und dem 4.14er Kernel, kam bei mir die Frage auf: Wie gehe ich eigentlich "richtig" mit solchen Hinweisen/Patchfiles um.

In diesem Fall habe ich den Patch runter geladen, entpackt und genauer in den Code geguckt. Dann hab ich auf meinem System nach VBoxNetFlt-linux.c (welche im Patchfile erwähnt wurde) gesucht, aber nichts gefunden. Aber unterhalb von /usr/share/virtualbox/src/vboxhost/vboxnetflt/ war eine VBoxNetFlt.c zu finden. Ich bin dann eine Verzeichnisebene höher gegangen (vboxhost) weil dort auch ein makefile lag und habe dann "patch -p1 < /WEG-ZUM-PATCH/PATCH" ausgeführt. Lief auch soweit wobei mich Meldungen wie "patch unexpectedly ends in middle of line" ein wenig erschreckten. Aber "Hunk #1 succeeded at 353 with fuzz 2." ließ mich hoffen daß das Ganze wohl doch durchgelaufen ist.
Danach hab ich vboxconfig laufen lassen, was dann wohl die entsprechenden Sachen gebaut hat. Normalerweise hatte ich erwartet da noch "make && make install" laufen lassen zu müßen, war aber in dem Fall nicht so, zumindest läuft VirtualBox bei mir.

ABER: Wie geht so etwas "richtig"? War mein Weg jetzt überhaupt richtig/erfolgreich oder hätte ich evtl. gar nichts machen müßen? Wie finde ich heraus in welches Verzeichnis ich muß oder nach welcher Source-Datei ich suchen muß, da zwischen meinem "Fund" und dem "echten" Namen ja ein Unterschied besteht? Sorry wenn euch die Fragen dumm vorkommen aber ich bin kein C-Programmierer und irgendwelche Basteleien am Kernel bzw seinem Umfeld liegen Jahre zurück (Debian 2.0 Soundkarte aktivieren 1998).
Title: Re: Wie patcht man richtig?
Post by: der_bud on 2017/11/14, 14:09:04
Zu dem von Dir verlinkten Beitrag gibt es auch eine ältere Version von Juli (https://forum.siduction.org/index.php?topic=6769.0) , darin hat melmarker ein dreizeiliges Patch-Howto geschrieben:
 
try that:

Code: [Select]
cd /usr/share/virtualbox/src
# place the patch here
patch -Np0 < vbox.patch

and rebuild the modules

Meinst Du sowas?
Title: Re: Wie patcht man richtig?
Post by: samoht on 2017/11/15, 01:45:09
Ich kann das bestätigen, @Geier0815.

Sieht hier wie folgt aus:

Code: [Select]
root@tuxxy:/usr/share/virtualbox/src/vboxhost# patch -bNp1 < virtualbox-modules-5.1.28-udp.patch 
patching file vboxnetflt/linux/VBoxNetFlt-linux.c
Hunk #1 succeeded at 141 (offset 15 lines).
patching file vboxpci/linux/VBoxPci-linux.c
patch unexpectedly ends in middle of line
Hunk #1 succeeded at 353 with fuzz 2.

Auch ich bekomme nach erfolgreichem

Code: [Select]
root@tuxxy:/usr/share/virtualbox/src/vboxhost# /sbin/vboxconfig                                     
Created symlink /etc/systemd/system/multi-user.target.wants/vboxdrv.service → /lib/systemd/system/vboxdrv.service.                                                                                                                           
Created symlink /etc/systemd/system/multi-user.target.wants/vboxballoonctrl-service.service → /lib/systemd/system/vboxballoonctrl-service.service.                                                                                           
Created symlink /etc/systemd/system/multi-user.target.wants/vboxautostart-service.service → /lib/systemd/system/vboxautostart-service.service.                                                                                               
Created symlink /etc/systemd/system/multi-user.target.wants/vboxweb-service.service → /lib/systemd/system/vboxweb-service.service.                                                                                                           
vboxdrv.sh: Stopping VirtualBox services.                                                                                                                                                                                                     
vboxdrv.sh: Building VirtualBox kernel modules.                                                                                                                                                                                               
vboxdrv.sh: Starting VirtualBox services.

eine funktionierende VBox.

Greetings,
Tom
 
Title: Re: Wie patcht man richtig?
Post by: bevo on 2017/11/15, 09:08:03
Ich steh völlig auf dem Schlauch :(

Bei mir gibt es das Verzeichnis src im Path /usr/share/virtualbox/ nicht, auch vboxhost existiert nicht.

bevo


Title: Re: Wie patcht man richtig?
Post by: Geier0815 on 2017/11/15, 09:15:03
@der_bud,

die Anleitung ist soweit gut, ich hatte sie nicht auf dem Radar. ABER: Patch spielt ja einen Unterschied zwischen zwei Dateien ein um die lokale Version auf den Stand der externen zu bringen. Wie aber bei dem Beispiel von mir zu sehen war, unterscheidet sich der betreffende Dateiname in der Patch-Datei vom Dateinamen auf meinem System (VBoxNetFlt-linux.c != VBoxNetFlt.c). Daher die Unsicherheit ob ich überhaupt die richtige Datei am Wickel habe. Ist das zusätzliche "-linux" in der Patch-Datei immer zu ignorieren? Wenn ja, warum steht es dann da so drin? Mir geht es dabei in erster Linie darum heraus zu finden nach welcher Datei bzw in welchem Verzeichnis ich suchen muß um patchen zu können. zB liegt der virtualbox-Kram unter /usr/share/ nvidia liegt offensichtlich unter /usr/src.
Mir geht es jetzt nicht nur um diesen einen Patch sondern allgemein ums Patchen, kann ja auch mal was Anderes sein.
Ebenso war das mit dem vboxconfig ausführen bei mir Zufall. Wäre da der offizielle Weg dann im Verzeichnis wo auch das make-file liegt dann "make clean && make && make install" auszuführen? Oder muß da dann noch etwas Anderes beachtet werden? Wie verhält es sich bei Sachen die eigentlich über die Paketverwaltung kommen zB X11 wenn da mal etwas gemacht werden muß weil der Nvidia Treiber nicht will aber schon ein Patch existiert der noch nicht ins Paket eingeflossen ist (oder wegen grundlegender Änderungen auch nicht einfließen wird, aber noch kein neuer Treiber von Nvidia existiert)? Was muß dabei beachtet werden, wenn überhaupt?

@samoht,

schön, dann war das offensichtlich bei mir auch nicht verkehrt gelaufen auch wenn die Meldung erst einmal etwas Anderes erwarten lassen würde.

@bevo,

dann suche doch mal per "find / -name "VBoxNetFlt.c" nach der betreffenden Datei. Ansonsten bleibt die Frage ob Du überhaupt virtualbox installiert hast und wenn ja, in welcher Version und aus welcher Quelle.

Im Zweifel wäre das aber ein schönes Beispiel für das was ich durch diesen Thread erfragen wollte: Wie finde ich den richtigen Ort um einen Patch anzuwenden...
Title: Re: Wie patcht man richtig?
Post by: bevo on 2017/11/15, 09:44:22
@Geier0815

Die File liegt im Pfad:

/usr/src/virtualbox-5.2.0/vboxnetflt/vboxnetflt.c

Ich benutze vbox 5.2.0_Debian r118415 auf 3 Systemen.

bevo
Title: Re: Wie patcht man richtig?
Post by: Geier0815 on 2017/11/15, 10:43:41
@bevo,

hast Du denn ein Problem mit virtualbox seit dem 14er Kernel? Scheint nämlich auch nicht jeden zu treffen wie man im ersten, von mir verlinkten, Thread sehen kann.
Wenn ja, dann kannst Du in das Verzeichnis /usr/src/virtualbox-5.2.0/ als root gehen und dort dann den Patch wie von mir beschrieben ausführen, also "patch -p1 < /WEG-ZUM-PATCH/virtualbox-modules-5.1.28-udp.patch". Danach führst Du "/sbin/vboxconfig" aus. Dabei werden die Module erstellt und virtualbox sollte sich dann starten lassen.

ABER: Das Ganze ist ohne Gewähr, schließlich fragte ich ja hier nach wie patchen richtig geht ;-)
Title: Re: Wie patcht man richtig?
Post by: harley-peter on 2017/11/15, 10:45:42
Hallo Freunde,

Auch bei mir liegt die virtualbox Sache im Verzeichnis /usr/src/virtualbox-5.2.0/
Wenn ich den Patch lese dann bezieht er sich ja auf zwei Dateien, der VBoxNetFlt.c und der VBoxPci.c. Diese liegen bei mir aber in unterschiedlichen Verzeichnissen nämlich in /usr/src/virtualbox-5.2.0/vboxnetflt bzw. in /usr/src/virtualbox-5.2.0/vboxpci.
Muss ich nun den Patch zweimal machen in den jeweiligen Verzeichnissen oder genügt es ihn in das übergeordnete Verzeichnis zu packen?
Und dann gibt es bei mir kein vboxconfig. Muss ich dann ein "make clean && make && make install" durchführen?
Sorry für die vielleicht einfachen Fragen aber ich bin auch kein c-Programmierer.
Danke für die Hilfe.
Title: Re: Wie patcht man richtig?
Post by: Geier0815 on 2017/11/15, 11:11:00
Soweit ich die man-page von patch verstanden habe gibt die p-Option an wie weit unterhalb des Verzeichnisses in dem man den Befehl ausführt noch nach der passenden Datei gesucht wird. Je höher die Zahl je weniger Verzeichnisebenen.
Quote from: man patch
-pnum  or  --strip=num
          Strip the smallest prefix containing num leading slashes  from  each
          file  name found in the patch file.  A sequence of one or more adja‐
          cent slashes is counted as a single slash.  This controls  how  file
          names  found  in  the  patch file are treated, in case you keep your
          files in a different directory than the  person  who  sent  out  the
          patch.  For example, supposing the file name in the patch file was

          /u/howard/src/blurfl/blurfl.c

       setting -p0 gives the entire file name unmodified, -p1 gives

          u/howard/src/blurfl/blurfl.c

       without the leading slash, -p4 gives

          blurfl/blurfl.c

       and not specifying -p at all just gives you blurfl.c.  Whatever you end
       up with is looked for either in the current directory, or the directory
       specified by the -d option.

Der Patch sollte beide Dateien anfassen. Also nur einmal ausführen.

/sbin/vboxconfig sollte auch in der 5.2 vorhanden sein. Beachte bitte das der Befehl nur von root ausgeführt werden kann.
Title: Re: Wie patcht man richtig?
Post by: harley-peter on 2017/11/15, 12:33:50
@Geier0815:
alles klar, dann packe ich den Patch mal eine Ebene höher aber eine vboxconfig gibt es bei mir definitiv nicht. Auch die Suche mit
Code: [Select]
find / -name vbox*brachte keine entsprechende Datei zutage und wie schon erwähnt weiß ich jetzt nicht wie ich vorgehen soll.
Title: Re: Wie patcht man richtig?
Post by: towo on 2017/11/15, 12:35:24
/sbin/vboxconfig gibts nur im Oracle-Paket.
Debian nutzt immer noch dkms für den Modulbau.
Title: Re: Wie patcht man richtig?
Post by: Geier0815 on 2017/11/15, 13:41:38
@harley-peter,

hast Du denn überhaupt irgendwelche Probleme? Im anderen Thread entstand bei mir irgendwie durch vilde der Eindruck das die Debian-Version gar nicht betroffen ist.
Title: Re: Wie patcht man richtig?
Post by: whistler_mb on 2017/11/15, 14:50:41
@Geier0815

Mit towos 4.14er Kernel und virtualbox 5.2 wird dieser Patch benötigt, sonst kann dkms das Modul nicht bauen.

Code: [Select]
$ apt-cache policy virtualbox-dkms
virtualbox-dkms:
  Installiert:           5.2.0-dfsg-5
  Installationskandidat: 5.2.0-dfsg-5
  Versionstabelle:
 *** 5.2.0-dfsg-5 500
        500 http://ftp.de.debian.org/debian unstable/contrib amd64 Packages
        500 http://ftp.de.debian.org/debian unstable/contrib i386 Packages
        100 /var/lib/dpkg/status
Title: Re: Wie patcht man richtig?
Post by: harley-peter on 2017/11/16, 13:57:42
Nach dem Patch und dem Neubau des Moduls mit dkms funktioniert die Sache auch bei mir wieder.  :)
Vielen Dank euch allen für die Unterstützung! :D
Title: Re: Wie patcht man richtig?
Post by: 10toe on 2017/11/17, 07:05:40
@harley-peter
Hier hänge ich gerade noch: Wie lauten die Befehle denn genau, mit dem Du das Modul neu gebaut hast?
Title: Re: Wie patcht man richtig?
Post by: harley-peter on 2017/11/17, 09:50:39
@10toe:
Code: [Select]
dpkg-reconfigure virtualbox-dkms
modprobe vboxdrv
Title: Re: Wie patcht man richtig?
Post by: whistler_mb on 2017/11/17, 10:34:32
Ich hatte es direkt mit dkms gemacht.
Code: [Select]
dkms autoinstall -k 4.14.0-towo.1-siduction-amd64
Title: Re: Wie patcht man richtig?
Post by: 10toe on 2017/11/18, 13:02:44
Großartig, vielen Dank!