„Linux Ubuntu offline repository létrehozása” változatai közötti eltérés

Innen: Szitár-Net Wiki
Ugrás a navigációhoz Ugrás a kereséshez
(Ú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…”)
 
 
1. sor: 1. sor:
'''A cikk még nem teljes!'''
 
 
== 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 szükséges használni ezért a célrendszer típusát meg kell tudni.<br>
+
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 függőségek feltáráshoz fel kell telepíteni az <code>apt-rdepends</code> nevű csomagot.
+
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>
sudo apt install apt-rdepends
+
rm -f packages-i386.db packages-amd64.db
 
</pre>
 
</pre>
=== 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.
+
Ezt követően le kell generálni a '''Packages''' katalógus fájlt:
Adott csomag letöltése függőségekkel együtt
+
<pre>
 +
apt-ftparchive generate -c=aptftp.conf aptgenerate.conf
 +
</pre>
 +
 
 +
Majd a '''Release''' fájl legenerálása következik:
 
<pre>
 
<pre>
apt download $(apt-rdepends csomag_neve | grep -v "^ ")
+
apt-ftparchive release -c=aptftp.conf pkgs > Release
 
</pre>
 
</pre>
 +
 +
Ezzel elkészült a tároló.
 
</p>
 
</p>
== Config fájlok létrehozása ==
+
 
== Repository létrehozása ==
 
 
== 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

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