Patching packages (Magyar) - ArchWiki

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.

További oldalak az adott témakörben

- Creating packages (Magyar)

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

- http://www.kegel.com/academy/opensource.html — Useful information on patching files

Category:

- Package management (Magyar)

Patching packages (Magyar)
Add topic