Linux Ubuntu offline repository létrehozása

Innen: Szitár-Net Wiki
Ugrás a navigációhoz Ugrás a kereséshez

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