„Linux Ubuntu offline repository létrehozása” változatai közötti eltérés
Joe (vitalap | szerkesztései) (Új oldal, tartalma: „'''A cikk még nem teljes!''' == Csomagok kiválasztása == <p> Egy tároló számtalan csomagot tartalmazhat. Jelen esetben mivel Ubunturól van szó, amely Debián al…”) |
Joe (vitalap | szerkesztései) |
||
1. sor: | 1. sor: | ||
− | |||
== Csomagok kiválasztása == | == Csomagok kiválasztása == | ||
<p> | <p> | ||
− | Egy tároló számtalan csomagot tartalmazhat. Jelen esetben mivel Ubunturól van szó, amely Debián alapú, így <code>.deb</code> csomagok sokaságát szükségeltetik összegyűjteni. | + | Egy tároló számtalan csomagot tartalmazhat. Jelen esetben mivel Ubunturól van szó, amely Debián alapú, így <code>.deb</code> csomagok sokaságát szükségeltetik összegyűjteni. |
</p> | </p> | ||
<p> | <p> | ||
− | Mivel a tárolót jelen esetben lokálisan | + | Mivel a tárolót jelen esetben lokálisan kell használni ezért a célrendszer típusát meg kell tudni.<br> |
− | Ubuntu adatainak lekérése: | + | Ubuntu adatainak lekérése: |
− | <pre>lsb_release -a</pre> | + | |
− | Eredmény: | + | <pre>lsb_release -a</pre> |
− | <pre> | + | |
− | No LSB modules are available. | + | Eredmény: |
+ | <pre>No LSB modules are available. | ||
Distributor ID: Ubuntu | Distributor ID: Ubuntu | ||
Description: Ubuntu 22.04.1 LTS | Description: Ubuntu 22.04.1 LTS | ||
Release: 22.04 | Release: 22.04 | ||
− | Codename: jammy | + | Codename: jammy</pre> |
− | </pre> | + | |
</p> | </p> | ||
<p> | <p> | ||
− | Fontos, hogy a folyamat megkönnyítése érdekében csak az adott rendszerhez tartozó online tárolókból célszerű kiválogatni a csomagokat. Tehát az egész folyamathoz szükség van egy interneteléréssel rendelkező Ubuntu rendszerre. (Legegyszerűbb módja, ha VirtualBox-ban kerül létrehozásra egy az offline rendszerrel azonos Ubuntu. Tesztelési szempontból is előnyös, ha tönkremegy a linux könnyű újat létrehozni.) | + | Fontos, hogy a folyamat megkönnyítése érdekében csak az adott rendszerhez tartozó online tárolókból célszerű kiválogatni a csomagokat. Tehát az egész folyamathoz szükség van egy interneteléréssel rendelkező Ubuntu rendszerre. (Legegyszerűbb módja, ha VirtualBox-ban kerül létrehozásra egy az offline rendszerrel azonos Ubuntu. Tesztelési szempontból is előnyös, ha tönkremegy a linux könnyű újat létrehozni.) |
</p> | </p> | ||
+ | |||
== Csomagok összegyűjtése == | == Csomagok összegyűjtése == | ||
=== Bevezetés === | === Bevezetés === | ||
<p> | <p> | ||
− | A tároló elkészítéséhez le kell tölteni az összes telepítendő csomagot. Sajnos nem elég csak az adott szükséges csomag letöltése, mivel minden csomagnak vannak függőségeik. Ami azt jelentheti például, hogy van A, B, C csomag. Ebbol C-t kell telepíteni, azonban C a B-re épül és B az A-ra. Ebből az következik, hogy A nélkül sem a B-t sem a C-t nem lehet telepíteni. | + | A tároló elkészítéséhez le kell tölteni az összes telepítendő csomagot. Sajnos nem elég csak az adott szükséges csomag letöltése, mivel minden csomagnak vannak függőségeik. Ami azt jelentheti például, hogy van A, B, C csomag. Ebbol C-t kell telepíteni, azonban C a B-re épül és B az A-ra. Ebből az következik, hogy A nélkül sem a B-t sem a C-t nem lehet telepíteni. |
+ | </p> | ||
+ | <p> | ||
+ | A függőségek feltárásához fel kell telepíteni az <code>apt-rdepends</code> nevű csomagot. | ||
+ | |||
+ | <pre>sudo apt install apt-rdepends</pre> | ||
+ | </p> | ||
+ | === Csomagok letöltése === | ||
+ | <p> | ||
+ | A csomagokat egyesével függőségeikkel együtt egy külön mappába érdemes letölteni. Egyéb letöltési módszerkhez ajánlott shell script írása. | ||
+ | Adott csomag letöltése függőségekkel együtt: | ||
+ | |||
+ | <pre>apt download $(apt-rdepends csomag_neve | grep -v "^ ")</pre> | ||
+ | |||
+ | A fenti parancs két részből áll:<br> | ||
+ | <code>sudo apt download</code> letölti a kívánt csomagot.<br> | ||
+ | <code>$(...parancs...)</code> a letöltendő csomagok szűrési feltétele.<br> | ||
+ | <code>apt-rdepends</code> rekurzívan listázza egy megadott csomag függőségeit. A <code>grep -v "^ "</code> paranccsal szűrésre kerül a nem használandó adat. | ||
</p> | </p> | ||
<p> | <p> | ||
− | A | + | Ha az alábbi módon egy vagy több hiabaüznetet kapunk, újabb <code>grep | -v "^csomag_neve$"</code> hívással kell bővíteni a szűrést. |
+ | |||
+ | <pre>E: Can't select candidate version from package debconf-2.0 as it has no candidate</pre> | ||
+ | |||
+ | A fenti hibakód esetében az új szűrési feltétel az alábbi módon fog kinézni: | ||
+ | |||
+ | <pre>$(apt-rdepends csomag_neve | grep -v "^ " | grep -v "^debconf-2.0$")</pre> | ||
+ | |||
+ | Ha több error is listázásra kerül, akkor a felsorolt csomagokat szintén kivételként hozzá kell adni a szűrési listához. | ||
+ | Az error kiküszöbölése után a csomagok letöltésre kerülnek. | ||
+ | </p> | ||
+ | |||
+ | == A repository felépítése == | ||
+ | |||
+ | Egy offline repository ezen bejegyzés írásának idején az alábbi struktúrával rendelkezik: | ||
+ | <pre> | ||
+ | repository | ||
+ | |- pkgs (mappa) | ||
+ | |- .deb fájlok | ||
+ | |- aptftp.conf | ||
+ | |- aptgenerate.conf | ||
+ | |- .aptgenerate.conf.swp | ||
+ | |- Contents-amd64.bz2 | ||
+ | |- Contents-amd64.gz | ||
+ | |- Packages | ||
+ | |- Packages.bz2 | ||
+ | |- Packages.gz | ||
+ | |- Release | ||
+ | </pre> | ||
+ | |||
+ | A '''pkgs''' mappa tartalmazza az összes letöltött '''.deb''' csomagot, függőségeket is. Az '''aptftp.conf''' fájl szolgál a '''Release''' fájl legenrálásához, amely tárolja az adott csomag rendszerkövetelményeit (pl.: milyen distro kell a telepítéshez). Az '''aptgenerate.conf''' fájl szolgál a '''Packages''' fájl legenrálásához, amely tárolja a hivatkozásokat a '''.deb''' csomagokhoz. Az '''aptftp.conf''' és az '''aptgenerate.conf''' fájlok kivételével a többi az '''apt-ftparchive''' parancs használatával jön létre. | ||
+ | |||
+ | == Repository létrehozása == | ||
+ | |||
+ | <p> | ||
+ | A repository létrehozására az [https://manpages.org/apt-ftparchive apt-ftparchive] parancs kerül használatra. Részletesebb információrt a linken lévő leírást érdemes áttekinteni. | ||
+ | </p> | ||
+ | <p> | ||
+ | Első lépésként egy mappa készítése ajánlott, amely magát a repot fogja tartalmazni. Ezt követően szintén készíteni ajánlott egy mappát, amelyben elhelyezésre kerülhet minden összegyűjtött csomag. A továbbiakban szükség van kettő konfigurációs állományra: legyenek ezek az '''aptftp.conf''' és az '''aptgenerate.conf''' fájlok. | ||
+ | </p> | ||
+ | === aptftp.conf === | ||
+ | <pre> | ||
+ | APT::FTPArchive::Release { | ||
+ | Origin "SziTa'R"; | ||
+ | Label "SziTa'R"; | ||
+ | Suite "unstable"; | ||
+ | Codename "jammy"; | ||
+ | Architectures "amd64"; | ||
+ | Components "main"; | ||
+ | Description "Some text..."; | ||
+ | }; | ||
+ | </pre> | ||
+ | |||
+ | '''Origin:''' Kitől származik a repo<br> | ||
+ | '''Label:''' Megjegyzés<br> | ||
+ | '''Suite:''' stable/unstable<br> | ||
+ | '''Codename:''' Ubuntu kódneve (pl.: bionic, focal, jammy)<br> | ||
+ | '''Architectures:''' i386/amd64/source<br> | ||
+ | '''Components:''' main/universe/multiverse/restricted<br> | ||
+ | '''Description:''' Leírás | ||
+ | |||
+ | === aptgenerate.conf === | ||
+ | <pre> | ||
+ | Dir::ArchiveDir "."; | ||
+ | Dir::CacheDir "."; | ||
+ | TreeDefault::Directory "pool/"; | ||
+ | TreeDefault::SrcDirectory "pool/"; | ||
+ | Default::Packages::Extensions ".deb"; | ||
+ | Default::Packages::Compress ". gzip bzip2"; | ||
+ | Default::Sources::Compress ". gzip bzip2"; | ||
+ | Default::Contents::Compress "gzip bzip2"; | ||
+ | |||
+ | BinDirectory "pkgs/" { | ||
+ | Packages "Packages"; | ||
+ | Contents "Contents-amd64"; | ||
+ | }; | ||
+ | |||
+ | Tree "pkgs/" { | ||
+ | Architectures "amd64"; | ||
+ | }; | ||
+ | </pre> | ||
+ | |||
+ | Ügyelni kell arra, hogy a '''BinDirectory "sajat_csomagok/" { ... }''' és a '''Tree "sajat_csomagok/" { ... }''' blokkok megadásakor a '''sajat_csomagok/''' helyére a nemrég létrehozott csomagokat tároló mappa neve legyen megadva. A jelenlegi repository esetében ez '''pkgs/'''. A '''Tree''' blokkban ha x86-os architektúrát, vagy forráskódokat is mellékelni kellene, akkor szóközzel elválasztva lehet bővíteni a repertoárt: '''Architectures "i386 amd64 source"''' | ||
+ | |||
+ | === Packages fájl generálása === | ||
+ | |||
+ | <p> | ||
+ | Ha többszörösen frissítésre kerül a repo, elképzelhető hogy hoz létre '''.db''' fájlokat is. Ezek (ha léteznek) a fájlok generálása előtt ki kell törölni. | ||
<pre> | <pre> | ||
− | + | rm -f packages-i386.db packages-amd64.db | |
</pre> | </pre> | ||
− | = | + | |
− | + | Ezt követően le kell generálni a '''Packages''' katalógus fájlt: | |
− | + | <pre> | |
+ | apt-ftparchive generate -c=aptftp.conf aptgenerate.conf | ||
+ | </pre> | ||
+ | |||
+ | Majd a '''Release''' fájl legenerálása következik: | ||
<pre> | <pre> | ||
− | + | apt-ftparchive release -c=aptftp.conf pkgs > Release | |
</pre> | </pre> | ||
+ | |||
+ | Ezzel elkészült a tároló. | ||
</p> | </p> | ||
− | + | ||
− | |||
== Repository használata == | == Repository használata == | ||
+ | |||
+ | <p> | ||
+ | Az offline Ubuntura FTP kapcsolaton keresztül ([https://filezilla-project.org/ FileZilla]), vagy akár fizikai eszköz segítségével (PenDrive) is felmásolható. | ||
+ | </p> | ||
+ | |||
+ | <p> | ||
+ | Az elhelyezést követően módosítani kell az '''/etc/apt/sources.list''' fájlt, valamint futtatni kell az '''apt update''' parancsot. Ezek után úgy telepíthetőek a csomagok mintha online lenne a rendszer: '''apt install csomag_neve''' | ||
+ | </p> | ||
+ | |||
+ | <pre> | ||
+ | sudo nano /etc/apt/sources.list | ||
+ | </pre> | ||
+ | |||
+ | A fájl végére hozzá kell adni a következő sort: | ||
+ | <pre> | ||
+ | deb [trusted=yes] file:/sajat/repository/eleresi/utja/ ./ | ||
+ | </pre> | ||
+ | |||
+ | Frissíteni kell a csomaglistát: | ||
+ | <pre> | ||
+ | apt update | ||
+ | </pre> | ||
+ | |||
+ | Ha minden függőséget sikerült beszerezni, legenerálni a szükséges fájlokat és a repository elérési útját helyesen megadni, akkor a saját csomagok most már telepíthetőek: | ||
+ | <pre> | ||
+ | apt install sajat_csomag_neve | ||
+ | </pre> |
A lap jelenlegi, 2022. október 11., 15:30-kori változata
Tartalomjegyzék
Csomagok kiválasztása
Egy tároló számtalan csomagot tartalmazhat. Jelen esetben mivel Ubunturól van szó, amely Debián alapú, így .deb
csomagok sokaságát szükségeltetik összegyűjteni.
Mivel a tárolót jelen esetben lokálisan kell használni ezért a célrendszer típusát meg kell tudni.
Ubuntu adatainak lekérése:
lsb_release -a
Eredmény:
No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 22.04.1 LTS Release: 22.04 Codename: jammy
Fontos, hogy a folyamat megkönnyítése érdekében csak az adott rendszerhez tartozó online tárolókból célszerű kiválogatni a csomagokat. Tehát az egész folyamathoz szükség van egy interneteléréssel rendelkező Ubuntu rendszerre. (Legegyszerűbb módja, ha VirtualBox-ban kerül létrehozásra egy az offline rendszerrel azonos Ubuntu. Tesztelési szempontból is előnyös, ha tönkremegy a linux könnyű újat létrehozni.)
Csomagok összegyűjtése
Bevezetés
A tároló elkészítéséhez le kell tölteni az összes telepítendő csomagot. Sajnos nem elég csak az adott szükséges csomag letöltése, mivel minden csomagnak vannak függőségeik. Ami azt jelentheti például, hogy van A, B, C csomag. Ebbol C-t kell telepíteni, azonban C a B-re épül és B az A-ra. Ebből az következik, hogy A nélkül sem a B-t sem a C-t nem lehet telepíteni.
A függőségek feltárásához fel kell telepíteni az apt-rdepends
nevű csomagot.
sudo apt install apt-rdepends
Csomagok letöltése
A csomagokat egyesével függőségeikkel együtt egy külön mappába érdemes letölteni. Egyéb letöltési módszerkhez ajánlott shell script írása. Adott csomag letöltése függőségekkel együtt:
apt download $(apt-rdepends csomag_neve | grep -v "^ ")
A fenti parancs két részből áll:
sudo apt download
letölti a kívánt csomagot.
$(...parancs...)
a letöltendő csomagok szűrési feltétele.
apt-rdepends
rekurzívan listázza egy megadott csomag függőségeit. A grep -v "^ "
paranccsal szűrésre kerül a nem használandó adat.
Ha az alábbi módon egy vagy több hiabaüznetet kapunk, újabb grep | -v "^csomag_neve$"
hívással kell bővíteni a szűrést.
E: Can't select candidate version from package debconf-2.0 as it has no candidate
A fenti hibakód esetében az új szűrési feltétel az alábbi módon fog kinézni:
$(apt-rdepends csomag_neve | grep -v "^ " | grep -v "^debconf-2.0$")
Ha több error is listázásra kerül, akkor a felsorolt csomagokat szintén kivételként hozzá kell adni a szűrési listához. Az error kiküszöbölése után a csomagok letöltésre kerülnek.
A repository felépítése
Egy offline repository ezen bejegyzés írásának idején az alábbi struktúrával rendelkezik:
repository |- pkgs (mappa) |- .deb fájlok |- aptftp.conf |- aptgenerate.conf |- .aptgenerate.conf.swp |- Contents-amd64.bz2 |- Contents-amd64.gz |- Packages |- Packages.bz2 |- Packages.gz |- Release
A pkgs mappa tartalmazza az összes letöltött .deb csomagot, függőségeket is. Az aptftp.conf fájl szolgál a Release fájl legenrálásához, amely tárolja az adott csomag rendszerkövetelményeit (pl.: milyen distro kell a telepítéshez). Az aptgenerate.conf fájl szolgál a Packages fájl legenrálásához, amely tárolja a hivatkozásokat a .deb csomagokhoz. Az aptftp.conf és az aptgenerate.conf fájlok kivételével a többi az apt-ftparchive parancs használatával jön létre.
Repository létrehozása
A repository létrehozására az apt-ftparchive parancs kerül használatra. Részletesebb információrt a linken lévő leírást érdemes áttekinteni.
Első lépésként egy mappa készítése ajánlott, amely magát a repot fogja tartalmazni. Ezt követően szintén készíteni ajánlott egy mappát, amelyben elhelyezésre kerülhet minden összegyűjtött csomag. A továbbiakban szükség van kettő konfigurációs állományra: legyenek ezek az aptftp.conf és az aptgenerate.conf fájlok.
aptftp.conf
APT::FTPArchive::Release { Origin "SziTa'R"; Label "SziTa'R"; Suite "unstable"; Codename "jammy"; Architectures "amd64"; Components "main"; Description "Some text..."; };
Origin: Kitől származik a repo
Label: Megjegyzés
Suite: stable/unstable
Codename: Ubuntu kódneve (pl.: bionic, focal, jammy)
Architectures: i386/amd64/source
Components: main/universe/multiverse/restricted
Description: Leírás
aptgenerate.conf
Dir::ArchiveDir "."; Dir::CacheDir "."; TreeDefault::Directory "pool/"; TreeDefault::SrcDirectory "pool/"; Default::Packages::Extensions ".deb"; Default::Packages::Compress ". gzip bzip2"; Default::Sources::Compress ". gzip bzip2"; Default::Contents::Compress "gzip bzip2"; BinDirectory "pkgs/" { Packages "Packages"; Contents "Contents-amd64"; }; Tree "pkgs/" { Architectures "amd64"; };
Ügyelni kell arra, hogy a BinDirectory "sajat_csomagok/" { ... } és a Tree "sajat_csomagok/" { ... } blokkok megadásakor a sajat_csomagok/ helyére a nemrég létrehozott csomagokat tároló mappa neve legyen megadva. A jelenlegi repository esetében ez pkgs/. A Tree blokkban ha x86-os architektúrát, vagy forráskódokat is mellékelni kellene, akkor szóközzel elválasztva lehet bővíteni a repertoárt: Architectures "i386 amd64 source"
Packages fájl generálása
Ha többszörösen frissítésre kerül a repo, elképzelhető hogy hoz létre .db fájlokat is. Ezek (ha léteznek) a fájlok generálása előtt ki kell törölni.
rm -f packages-i386.db packages-amd64.db
Ezt követően le kell generálni a Packages katalógus fájlt:
apt-ftparchive generate -c=aptftp.conf aptgenerate.conf
Majd a Release fájl legenerálása következik:
apt-ftparchive release -c=aptftp.conf pkgs > Release
Ezzel elkészült a tároló.
Repository használata
Az offline Ubuntura FTP kapcsolaton keresztül (FileZilla), vagy akár fizikai eszköz segítségével (PenDrive) is felmásolható.
Az elhelyezést követően módosítani kell az /etc/apt/sources.list fájlt, valamint futtatni kell az apt update parancsot. Ezek után úgy telepíthetőek a csomagok mintha online lenne a rendszer: apt install csomag_neve
sudo nano /etc/apt/sources.list
A fájl végére hozzá kell adni a következő sort:
deb [trusted=yes] file:/sajat/repository/eleresi/utja/ ./
Frissíteni kell a csomaglistát:
apt update
Ha minden függőséget sikerült beszerezni, legenerálni a szükséges fájlokat és a repository elérési útját helyesen megadni, akkor a saját csomagok most már telepíthetőek:
apt install sajat_csomag_neve