Patching 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
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.
- Ha forráskódból már létrehozta a szoftvercsomagot, akkor törölje az
srckönyvtárat. - Futtassa a
makepkg --nobuild/makepkg -oparancsot, amely letölti és kicsomagolja aPKGBUILDfá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 amakepkg --nobuild --nodeps/makepkg -odparancsot kell futtatnia az előbbi helyett. - Az
srckö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ükpackage.origéspackage.newkönyvtáraknak. - Végezze el a módosításokat a
package.newkönyvtárban. - Futtassa a
diff -ura package.orig package.new --colorparancsot, és ellenőrizze, hogy a javítás megfelelőnek tűnik-e. - Futtassa a
diff -ura package.orig package.new > package.patchparancsot a javítás létrehozása érdekében. - Lépjen vissza az eredeti
package.origkönyvtárba, ahonnan a másolatokat készítette, és alkalmazza a javítást apatch --strip=1 --input=../package.patchparanccsal (rövidíthetőpatch -p1 -i ../package.patchformá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 amakepkg --noextract --install/makepkg -eiparancs segítségével.
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.
.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:
- Adjon hozzá egy bejegyzést a
PKGBUILDszkriptfájlsourcetö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 azsrckö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 aPKGBUILDszkriptfá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 azsrckönyvtárba. Ha újraelosztást alkalmaz aPKGBUILDszkriptfájlon, akkor természetesen a javítófájlt is tartalmaznia kell. - Ezután használja a
makepkg -g >> PKGBUILDvagy azupdpkgsums(a pacman-contrib szoftvercsomagból) parancsot azsha512sumstömb frissítése érdekében. Vagy manuális úton, kézzel is hozzáadhat egy bejegyzést asha512sumstömbhöz. Ön a javítófájl ellenőrzőösszegét az sha512sum segédprogrammal tudja legenerálni. - Ha a
PKGBUILDszkriptfájlban még nincsen benne aprepare()függvény, akkor hozza létre a függvényt a szkriptfájlban. - 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-$pkgvergyakran (de nem minden esetben) egy könyvtár neve, amelyet a letöltött forráskódfájl kicsomagolásával hoztak létre. - 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.patchsort aprepare()függvényéhez, apkgname.patchfájlt pedig cserélje a diff-et tartalmazó fájl nevére (arra a fájlra, amely automatikusan azsrckönyvtárába másolódott, mert benne volt aPKGBUILDsourcetö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