Jump to content

Patching packages (Magyar)

From ArchWiki
Fordítás állapota: Ez az oldal az angol Patching packages című oldal magyar nyelvre lefordított változata. Utolsó fordítás dátuma: 2026.05.16. Amennyiben a lefordítás időpontja óta az angol nyelvű oldalon történtek újabb módosítások, akkor Ön segíthet hozzászinkronizálni az angolhoz ezt a magyar nyelvű fordítást.

Ez a cikk azt tárgyalja, hogy a javításokat (Magyarul: javítás, folt, foltozás. Angolul: patch.) hogyan kell létrehozni és alkalmazni a szoftvercsomagokra az Arch build system (ABS) rendszerben.

A javítás egy vagy több fájl sorainak a módosításait írja le. A javításokat általában arra használják, hogy a program forráskódjában automatikusan kijavítsák a hibákat.

Javítások készítése

Megjegyzés Ha csak egy-két sort kell módosítania a program forráskódjában, akkor érdemes inkább a sed segédprogramot használni.

A diff segédprogram soronként hasonlítja össze a fájlokat. Ha Ön elmenti a segédprogram kimenetét, akkor egy javítást kap. Például: diff --unified --recursive --text jezus krisztus > jezuskrisztus.patch (amely rövidíthető diff -ura formára). Ha Ön megad egy könyvtárakat, akkor a diff segédprogram összehasonlítja a megadott könyvtárban található fájlokat.

  1. Ha forráskódból már létrehozta a szoftvercsomagot, akkor törölje az src könyvtárat.
  2. Futtassa a makepkg --nobuild/makepkg -o parancsot, amely letölti és kicsomagolja a PKGBUILD fájlban megadott forráskódfájlokat, de nem fordítja le őket bináris kódra. Ha azon az operációs rendszeren, amelyen Ön a javítást készíti, nincsenek meg a szükséges szoftvercsomag-függőségek, akkor előfordulhat, hogy Önnek a makepkg --nobuild --nodeps/makepkg -od parancsot kell futtatnia az előbbi helyett.
  3. Az src könyvtárban készítsen kettő másolatot a kicsomagolt könyvtárról: Egyet érintetlen példányként készítsen, egyet pedig a módosított verzióhoz készítsen. Ezeket nevezzük package.orig és package.new könyvtáraknak.
  4. Végezze el a módosításokat a package.new könyvtárban.
  5. Futtassa a diff -ura package.orig package.new --color parancsot, és ellenőrizze, hogy a javítás megfelelőnek tűnik-e.
  6. Futtassa a diff -ura package.orig package.new > package.patch parancsot a javítás létrehozása érdekében.
  7. Lépjen vissza az eredeti package.orig könyvtárba, ahonnan a másolatokat készítette, és alkalmazza a javítást a patch --strip=1 --input=../package.patch paranccsal (rövidíthető patch -p1 -i ../package.patch formára). Ellenőrizze, hogy a javítás működik-e, azáltal, hogy forráskódból létrehozza és telepíti a módosított szoftvercsomagot a makepkg --noextract --install/makepkg -ei parancs segítségével.
Megjegyzés Javításokat Ön Git segítségével is létrehozhat a git diff vagy a git format-patch paranccsal [1].

További információért tekintse meg a diff(1) és a git-diff(1) man súgókat.

Tipp A legtöbb git tárhelyszolgáltató (például a GitHub vagy a GitLab) lehetővé teszi javítások létrehozását egy adott commit vagy egy adott merge/pull request számára úgy, hogy a URL végéhez Ön hozzáfűzi a .patch kiterjesztést. A GitHub esetében érdemes a ?full_index=1 paramétert is hozzáadni az URL végéhez annak érdekében, hogy elkerülje az ellenőrzőösszeg eltéréseket a jövőbeni objektumhash-hossz változások miatt.

Javítások alkalmazása

Ez a szakasz azt ismerteti, hogy miként lehet az Ön által létrehozott vagy az internetről letöltött javításokat alkalmazni egy PKGBUILD szkriptfájl prepare() függvényén belül. Kövesse az alábbi lépéseket:

  1. Adjon hozzá egy bejegyzést a PKGBUILD szkriptfájl source tömbjéhez a javítófájl érdekében, az eredeti forráskód URL-címétől szóközzel elválasztva. Ha a fájl elérhető online, akkor megadhatja a teljes URL-címet, és automatikusan letöltődik, majd az src könyvtárba kerül. Ha Ön hozta létre a javítást, vagy nem érhető el más módon, akkor helyezze a javítófájlt ugyanabba a könyvtárba, ahol a PKGBUILD szkriptfájl található, és egyszerűen csak adja hozzá a fájl nevét a source tömbhöz annak érdekében, hogy a javítófájl bemásolódjon az src könyvtárba. Ha újraelosztást alkalmaz a PKGBUILD szkriptfájlon, akkor természetesen a javítófájlt is tartalmaznia kell.
  2. Ezután használja a makepkg -g >> PKGBUILD vagy az updpkgsums (a pacman-contrib szoftvercsomagból) parancsot az sha512sums tömb frissítése érdekében. Vagy manuális úton, kézzel is hozzáadhat egy bejegyzést a sha512sums tömbhöz. Ön a javítófájl ellenőrzőösszegét az sha512sum segédprogrammal tudja legenerálni.
  3. Ha a PKGBUILD szkriptfájlban még nincsen benne a prepare() függvény, akkor hozza létre a függvényt a szkriptfájlban.
  4. Az első lépés, hogy átnavigáljon abba a könyvtárba, amelyben alkalmazni kell a javítást (a prepare() függvényen belül kell megtenni az átnavigálást, ne a terminálban navigáljon! Hiszen Ön automatizálni szeretné a javítás alkalmazásának a folyamatát). Ezt például így teheti meg: cd $pkgname-$pkgver. A $pkgname-$pkgver gyakran (de nem minden esetben) egy könyvtár neve, amelyet a letöltött forráskódfájl kicsomagolásával hoztak létre.
  5. Most egyszerűen alkalmaznia kell a javítást ebben a könyvtárban. Ezt nagyon egyszerűen megteheti úgy, hogy hozzáadja a patch -p1 -i pkgname.patch sort a prepare() függvényéhez, a pkgname.patch fájlt pedig cserélje a diff-et tartalmazó fájl nevére (arra a fájlra, amely automatikusan az src könyvtárába másolódott, mert benne volt a PKGBUILD source tömbjében).

Íme egy például szolgáló prepare-függvény:

PKGBUILD
prepare() {
    cd $pkgname-$pkgver
    patch -Np1 -i ../eject.patch
}

Alternatívaként használhatja a patch parancs --directory/-d kapcsolóját anélkül, hogy Önnek először a cd parancsot kellene használnia. A fenti példa ekkor a következőképpen alakulna:

PKGBUILD
prepare() {
    patch -d $pkgname-$pkgver -Np1 -i ../eject.patch
}

A terminálból most futtassa a makepkg parancsot. Ha minden jól megy, akkor a javítás automatikusan alkalmazásra kerül, és az új szoftvercsomag tartalmazni fogja a javításban szereplő módosításokat. Ha nem, akkor előfordulhat, hogy Önnek kísérleteznie kell a patch --strip/-p opciójával. Kísérletezés közben hasznos lehet a --dry-run, --reverse vagy --verbose opciók használata. További információért olvassa el a patch(1) man súgót.

Alapvetően a folyamat a következő: Ha a diff fájlt úgy hozták létre, hogy a myversion/ könyvtárban lévő fájlokra alkalmazza a javításokat, akkor a diff fájlokat a myversion/file -re alkalmazzák. Ön a yourversion/ könyvtárból futtatja (mert a PKGBUILD szkriptfájlban abba a könyvtárba váltana), így amikor a javítás alkalmazza a fájlt, akkor azt a file fájlra szeretné alkalmazni, eltávolítva a myversion/ részt. Ezt végzi a -p1 opció, amely egy könyvtárat távolít el az útvonalból. Ha azonban a fejlesztő a myfiles/myversion könyvtárban javított, akkor két könyvtárat kell eltávolítani, ezért használja a -p2 opciót.

Ha nem adja meg a -p opciót, akkor a patch parancs az egész könyvtárszerkezetet eltávolítja. Ez rendben van, amikor az összes fájl az alapkönyvtárban van, de ha a javítás a myversion/ könyvtárban lett létrehozva, és az egyik szerkesztett fájl a myversion/src/file, és a patch parancsot a yourversion könyvtárból -p opció nélkül futtatja, akkor a patch parancs megpróbálja a yourversion/file fájlt javítani.

A legtöbb fejlesztő a javított könyvtár szülőkönyvtárából hozza létre a javításokat, ezért a -p1 opció általában megfelelő.

Quilt használata

A javítások létrehozásának egyszerűbb módja a quilt használata, amely jobb támogatást nyújt sok javítás kezelésére, például javítások alkalmazására, frissítésére és a kijavított fájlok eredeti állapotba történő visszaállítására. A quilt segédprogramot a Debian rendszeren használják a javítások kezelésére. Tekintse meg a Quilt használata című angol nyelvű dokumentumot az alapvető quilt használattal kapcsolatban, a javítások létrehozásával kapcsolatban, a javítások alkalmazásával kapcsolatban, és a kijavított fájlok visszaállításával kapcsolatban.

További olvasnivaló a témában