GNU/Linux >> Znalost Linux >  >> Arch Linux

Vytvoření PKGBUILD pro vytváření balíčků pro Arch Linux

Soubory PKGBUILD představují způsob, jakým se sestavují a vytvářejí balíčky pro Arch Linux a jeho deriváty, jako je Manjaro.

Možná jste na ně dokonce sami trochu narazili, pokud jste někdy používali AUR, uživatelsky spravované úložiště PKGBUILD v Arch Linuxu.

Ale jak přesně přejdete z PKGBUILD k instalovatelnému balíčku? Co přesně se mezi nimi děje a jak je můžete vytvořit pro své vlastní balíčky? Dozvíte se je v tomto článku.

Základy PKGBUILD

Pro ty, kteří znají Bash nebo jiné shelly, budete potěšeni, pokud jste to ještě neudělali, že PKGBUILD je v podstatě jen shell skript s některými proměnnými.

Soubory PKGBUILD se skládají z proměnných a funkcí, které se všechny používají k definování samotného balíčku a způsobu jeho sestavení.

K vytvoření balíčku z PKGBUILD se používá nástroj příkazového řádku makepkg. Po získání PKGBUILD jednoduše spustíte makepkg uvnitř adresáře obsahujícího PKGBUILD a voila, máte instalovatelný balíček!

V tomto tutoriálu si projdete balíček, který jsem právě vytvořil a na kterém je nápis „Ahoj světe!“ při spuštění:

Nastavení

Chcete-li pokračovat v tomto tutoriálu, musíte vytvořit několik souborů.

Nejprve musíte vytvořit soubor s názvem PKGBUILD . Pokud to ještě nebylo jasné, bude to sloužit jako „recept“ na sestavení vašeho balíčku.

Dalším souborem, který budete muset vytvořit, je soubor s názvem hello-world.sh . Jeho účel vysvětlím o něco později.

Oba tyto soubory můžete vytvořit také jediným příkazem.

touch PKGBUILD hello-world.sh

Můžete zkontrolovat, že soubory byly vytvořeny pomocí příkazu ls:

A jste připraveni vyrazit!

Nastavení souboru PKGBUILD

Místo toho, abyste zkopírovali a vložili celý soubor, projdu s vámi zadávání každého řádku, abyste lépe porozuměli účelu všeho, co se děje. Pokud nechcete učit se tímto způsobem, velmi doporučuji Článek Arch Wikio vytváření balíčků pro Arch Linux.

Tento článek se také nezabývá všemi možnostmi, které můžete nastavit v PKGBUILD, ale spíše některými běžně používanými, abyste mohli začít co nejrychleji.

S tím, že to stojí z cesty, otevřete svůj textový editor a pusťte se do toho přímo!

název balíčku

Za prvé, proměnná pkgname. To určuje název vašeho balíčku při instalaci a jak správce balíčků Arch Linux pacman sleduje balíček.

Formát této proměnné (a některých dalších) má tvar proměnná=hodnota, přičemž název proměnné vlevo, hodnota proměnné vpravo, oddělené znaménkem rovná se.

Chcete-li nastavit název balíčku, zadejte do PKGBUILD následující:

pkgname="hello-world"
  • Chcete-li nastavit jiný název balíčku, nahraďte hello-world s názvem balíčku.
  • Toto nenastaví příkaz použitý ke spuštění programu. To je zpracováno o něco níže v package() sekce.

pkgver

Jak je uvedeno v samotném názvu proměnné, tato nastavuje verzi vašeho balíčku (tj. 1.0.0). To je užitečné, když uživatel aktualizuje svůj systém, protože nastavení vyšší verze povede k tomu, že uživatel bude vyzván k aktualizaci.

Pro nastavení zadejte do PKGBUILD následující (za předchozí řádek):

pkgver="1.0.0"

pkgrel

To souvisí s proměnnou pkgver a obvykle není důležité o tom vědět. Stejně jako proměnná pkgver však upozorní uživatele na upgrade, pokud bude přesunuta na vyšší číslo.

Slouží pro jakékoli změny, které vyžadují, aby pkgver zůstal stejný, jako jsou jakékoli změny samotného PKGBUILD. To by bylo užitečné, pokud jste vytvořili PKGBUILD pro program, který používáte (a chcete zachovat verzi stejnou jako balíček) a potřebujete opravit chybu v samotném PKGBUILD.

Chcete-li nastavit proměnnou, zadejte do PKGBUILD následující:

pkgver="1"

Tato proměnná by měla vždy začněte na 1 a poté postupujte po jednom. Když pkgver sám se posouvá nahoru, toto může (a mělo by) být resetováno na 1, protože samotný pkgver upozorní uživatele, že jsou dostupné aktualizace.

pkgdesc

Tím nastavíte popis balíčku, který se používá k lepší identifikaci balíčku.

Chcete-li jej nastavit, vložte popis do uvozovek:

pkgdesc="Hello world in your terminal!"

oblouk

Tato proměnná nastavuje architekturu, se kterou je balíček kompatibilní. Je v pořádku, pokud nerozumíte tomu, co je architektura, protože ve většině případů je v podstatě k ničemu.

Bez ohledu na to jej makepkg stále potřebuje nastavit, aby věděl, že je balíček kompatibilní s naším systémem.

Tato proměnná podporuje nastavení více hodnot, takže makepkg vyžaduje jinou syntaxi, jak je uvedeno níže.

Chcete-li jej nastavit, zadejte do PKGBUILD následující:

arch=("x86_64")

Pokud byste pro toto nastavili více hodnot, oddělili byste každou hodnotu mezerou a uvozovkami takto:arch=(“x86_x64” “arm”)

závisí

Zde jsou uvedeny všechny balíčky, které náš balíček potřebuje, aby fungoval. Jako arch , může také obsahovat více hodnot, a proto musí používat syntaxi závorek.

Protože náš balíček nebude mít žádné závislosti, nemusíme toto pole zadávat do PKGBUILD. Pokud by však náš balíček měl závislosti, použili bychom pouze stejnou syntaxi jako arch .

volba závisí

Zde jsou uvedeny balíčky, které nejsou vyžadovány, aby fungovaly, ale které jsou potřebné pro další funkce.

To se řídí stejnou syntaxí jako depends .

konflikty

To pacmanovi řekne, jaké balíčky způsobí, že se náš balíček bude chovat tak, jak bychom nechtěli.

Jakýkoli balíček zde uvedený by byl odinstalován před instalací našeho.

To se řídí stejnou syntaxí jako depends také.

licence

Toto definuje softwarovou licenci, pod kterou je váš program licencován. Arch Wiki má nějaké informace, pokud potřebujete pomoc s výběrem licence. Nastavení na custom bude fungovat, pokud nevíte, na co to nastavit.

To má stejnou syntaxi jako arch a závisí :

license=("custom")

zdroj

Takto makepkg ví, jaké soubory použít k vytvoření našeho balíčku. Může obsahovat různé druhy zdrojů, včetně místních souborů a adres URL.

Při přidávání místních souborů zadejte název souboru relativně k PKGBUILD, tj. zvažte následující rozložení adresáře:

PKGBUILD
file.txt
src/file.sh

Pokud jste chtěli zahrnout file.sh v našem PKGBUILD byste zadali src/file.sh jako jeho název.

Při zadávání URL jednoduše zadáte celou URL, tj. https://mirrors.creativecommons.org/presskit/logos/cc.logo.large.png.

Váš balíček potřebuje pouze soubor hello-world.sh, a protože je ve stejném adresáři jako PKGBUILD, stačí zadat jeho název jako hodnotu pro source .

Tato proměnná také používá stejnou syntaxi jako arch a závisí :

source=("hello-world.sh")

sha512sums

Slouží k ověření, zda jsou soubory ve zdroji nebyly změněny nebo nesprávně staženy. Informace o získání hodnot pro toto lze nalézt v článku Arch Wiki o PKGBUILDs.

Pokud to raději nechcete nastavovat (nebo to prostě nepotřebujete, např. pro místní soubory), můžete pro každý soubor v zdroji zadat SKIP proměnná:

sha512sums=("SKIP")

package()

Toto je poslední a nejdůležitější část k vytvoření našeho balíčku. Při práci s tímto je důležité znát dvě proměnné:

  • ${srcdir} :Toto je místo, kde makepkg vkládá soubory do zdroje variabilní. Toto je adresář, kde můžete pracovat se soubory a provádět jakékoli další potřebné úpravy souborů.
  • ${pkgdir}:Zde umístíme soubory, které se nainstalují do našeho systému.
    Struktura složek pro ${pkgdir} je nastavena tak, jako by byla na skutečném systému (tj. ${pkgdir}/usr/bin/hello-world by při instalaci pomocí pacmana vytvořilo soubor /usr/bin/hello-world.

package() obsahuje seznam příkazů použitých k vytvoření balíčku.

Pokud byste tedy (hypoteticky) potřebovali mít soubor, který čte, že Linux je lepší než Windows v /usr/share/motto.txt, spustili byste něco takového:

package() {
  mkdir -p "${pkgdir}/usr/share"
  echo "Linux is superior to Windows" | tee "${pkgdir}/usr/share/motto.txt"
}

Několik poznámek k výše uvedenému příkazu:

  • ${pkgdir} obsahuje ne adresáře v něm. Pokud přeskočíte příkaz mkdir, tee vypíše chybu, že adresář neexistuje.
  • Při zadávání adresářů vždy před ně přidejte ${pkgdir} nebo ${srcdir} variabilní. Zadání něčeho jako /usr/share/motto.txt bez takového by odkazovalo na doslovný adresář /usr/share/motto.txt na vašem aktuálně spuštěném systému.

Pro svůj PKGBUILD umístíte soubor hello-world.sh na /usr/bin/hello-world na váš cílový systém. Také způsobíte, že soubor řekne „Ahoj!“ při spuštění.

Chcete-li tak učinit, zadejte do svého PKGBUILD následující:

package() {
  echo 'Hello to you!' > "${srcdir}/hello-world.sh"
  mkdir -p "${pkgdir}/usr/bin"
  cp "${srcdir}/hello-world.sh" "${pkgdir}/usr/bin/hello-world"
  chmod +x "${pkgdir}/usr/bin/hello-world"
}

A máte hotovo! Váš výsledný soubor by nyní měl vypadat takto:

Nyní sestavte a nainstalujte balíček pomocí makepkg -si a poté spusťte hello-world ve vašem terminálu, abyste viděli jeho výstup.

Zabalení

A právě tak jste vytvořili svůj první PKGBUILD! Jste na cestě k vytvoření skutečných balíčků pro sebe a možná i pro AUR.

Máte nějaké dotazy nebo něco nefunguje správně? Neváhejte to zveřejnit v sekci komentářů níže.



Arch Linux
  1. Linux – učinit balíček explicitně nainstalován v Pacman?

  2. Linux – Arch Linux Wifi funguje ručně, jak to udělat automaticky?

  3. Linux – Jak odstranit staré balíčky nainstalované Pacmanem v Arch Linuxu?

  1. Jak používat Pacman na Arch Linuxu

  2. Jak najít zranitelné balíčky v Arch Linuxu

  3. Jak převést balíčky DEB na balíčky Arch Linux

  1. Doporučený způsob čištění mezipaměti balíčků v Arch Linuxu

  2. 15 Příklady příkazů aptitude pro správu balíčků v Linuxu

  3. Hledání balíčků pro Kali Linux