Lokális apt repo

 ( tovis | 2019. augusztus 6., kedd - 12:31 )

Szükségem van egy olyan lokális repora, ami felül írja a hivatalos apt Debian repo -t.
A nyomtatóm üzemeltetése kapcsán, forrásból leforgattam, módosítottam a hplip csomagot, hogy újra kezelje a párhuzamos portra kapcsolt multifunkciós nyomtatómat. A módosított csomag 20 csomagra bomlik, melyeknek természetesen van saját függőségeik, így az egyszerű "dpkg -i {fájl}.deb" nem igazán működik. Ráadásul védekeznem kell, hogy ha frissül a hivatalos repoban a csomag akkor ezeket a csomagokat NE frissítse (ha kell én majd frissítek manuálisan).
Találtam olyat, hogy "local-apt-repository" de a rövid leírás nem említi, hogy ez hogy is fog működni?
Csinált már valaki ilyet? Tapasztalat?

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

A frissülés ellen a dpkg hold kapcsolójával tudsz védekezni.

Gógli első találata: echo " hold" | sudo dpkg --set-selections

Szerintem ehhez felesleges lokális repó. Akkor látnám értelmét, ha helyi hálózaton egy csomó debian/ubuntu gép lenne és automatizálva szeretnéd, hogy frissüljön minden gép. Ha saját csomagokat építesz, adj neki magasabb verziószámot, mint ami debian/ubuntuban van és nem csapja felül egy frissítés.

---------
Ha trollokkal akarsz harcolni, csak akkor van esélyed a győzelemre, ha magad is azzá válsz.

powered by ©gentoo

20 csomag és egy kupac dependency - függőség. Mivel telepítenéd?

* Én egy indián vagyok. Minden indián hazudik.

dpkg + apt -f install + hold

Elvileg akár jó is lehet.

sudo apt install ./foo-1.2.3.deb ./goo-3.2.1.deb
vagyinkább
cd deb_directory
sudo apt install ./*.deb

sudo dpkg -i packagedir/*.deb
sudo dpkg -iR packagedir/

esetlegesen ha olyan, mint a syslog-ng, hogy a core install by default hiv egy service restartot (ami eltorik, ha a core+plugins/t egyszerre probalom meg telepiteni), akkor szetszedheted tobb koros installra (core-deps, core, plugin-deps, plugins)

Néhány gépen néhány csomagra szerintem is a fent említett "hold" a jó választás. Ha több géped van és nem akarod többször letölteni a csomagot, akkor sem hiszem, hogy teljes repo kellene. Megfelel egy proxy is, nálam apt-cacher-ng van.

Csinálsz egy repot amibe ezeket a dolgokat berakod, és a gépeken pedig nagyon prioritással állítod be ezt a repot, így a tiedből fogja letölteni amit kell, nem az eredetitől.

Nagyobb prioritás - azt hogy kell?

* Én egy indián vagyok. Minden indián hazudik.

Köszönöm! Most azzal oldottam meg, hogy a "local-apt-repository" által elkészített bejegyzéseket a központi sources.list elejére tettem, így a megfelelő csomagokat telepítette az aptitude.
Zavarba ejtő, hogy itt-ott azt írja "Ign:", ha kimászok a homokozóból és élesbe rakom ezt megnézem újra.
OFF: Most szúrtam ki, hogy a "-dev" és a debug szimbólum csomagok is benne vannak (nem, nem akarok nyomtató drivereket fejleszteni).

* Én egy indián vagyok. Minden indián hazudik.

Felcsaptam a "local-apt-repository" csomagot és az ott leírtaknak megfelelően bemásoltam az "én" hplip csomagom darabjait az /srv/local-apt-repository mappába. Majd lefuttattam a /usr/lib/local-apt-repository/rebuild scriptet.
Az eredmény az lett, hogy létrehozott egy
/etc/apt/sources.list.d/local-apt-repository.list fájlt ami a következőket tartalmazza:
# ...
deb [trusted=yes] file:///var/lob/local-apt-repository/ ./
deb-src [trusted=yes] file::///var/lib/local-apt-repository/ ./

1. Ha most lefuttatom az apt-gat install hplip parancsot honnan fogja tölteni a
csomagokat?
2. A "local-apt-repository" -ban elhelyezett csomagok prioritása a "main stream" vagy hivatalos repository -kal szemben.

* Én egy indián vagyok. Minden indián hazudik.

Az első kérdésre a válasz, hogy a http: izéről tölt :(
purge!
Kell az a prioritás!

* Én egy indián vagyok. Minden indián hazudik.

Klassz! A telepítésnél 16 csomagot rakott fel, de a "purge" csak 14 -et törölt.

* Én egy indián vagyok. Minden indián hazudik.

Bár sokak szerint az ördögtől származik, én mégis javaslom, hogy használd az aptitude csomagkezelőt...
Sok érdekes dolgot meg tudsz vele oldani... :)

És nézd meg pin-priority kapcsolót az apt-hoz...
--
Debian Linux rulez... :D
RIP Ian Murdock

Az igazság az, hogy sokéve az aptitude -ot használom, parancssorból.
Itt és most már itt-ott visszatértem az apt-get -hez, de csak azért mert mindenki ezt írja a postokban.

* Én egy indián vagyok. Minden indián hazudik.

A local-apt-repository klassz de nem az én esetemre. Vagyis (találtam egy postot) ahhoz hogy a atitude vagy apt-get az "én" csomagjaimat vegye előre "sajnos" mégis csak az eredeti /etc/apt/sources.list fájlt kell módosítani, az elejére berakva a lokális repository -mat, akkor onnan veszi elő.
Ráadásul, az aptitude, apt-get mikor "update" -em a listát kiír olyanokat hogy "Ign:". Ennek ellenére onnan tölt ahonnan most nekem kell.
Valószínűsítem, ha a "main" repository -ban nagyobb verziószámmal megjelenik a hplip csomag megint felülbírálja az én csomagomat, vagyis a hplip csomagot ki kell zárni a frissítésből.
Ha végre sikerül ezen az egészen túljutni, akkor megpróbálom "letisztázni" a művelet sort.

* Én egy indián vagyok. Minden indián hazudik.

ha csak ujrabuildelsz egy meglevo csomagot akkor a verzio ilyen legyen: eredetiverzio+foo1
pl 1.2-3ubuntu1+tovis1, ekkor ez magasabb lesz mint a 1.2-3ubuntu1, de alacsonyabb mint a 1.2-3ubuntu2. ez azert is jo, mert a sajat modositasaidat is tudod verziozni (+tovis1, +tovis2, stb)

ha pineled a repodat, akkor az upgrade nem fogja frissiteni a csomagot, csak szol hogy "van frissebb, csinalj vele valamit". ilyenkor az uj csomagot ujrabuildeled tovis-es verzioval. aptgetupdate+upgrade mar frissiteni fogja.

--
A vegtelen ciklus is vegeter egyszer, csak kelloen eros hardver kell hozza!

Jó lenne, de egyelőre nem találom hogy tudnám a csomag nevét megváltoztatni.
A "pineléstől" mindenütt óva intenek.
Ráadásul a hlip honlapján azt írják, hogy jól nézd meg kell e upgradelni, az upgradet csak egy új nyomtató indokolja - persze a dependency -k miatt forgatni kellhet (cups és sane).

* Én egy indián vagyok. Minden indián hazudik.

csomag atnevezes eleg bonyolult, sok helyen kellhet atirni. ezert szoktam csak "koztes" verziot csinalni.

a pinelestol azert felnek es nem ajanlak, mert jol el lehet rontani, es akkor semmi nem frissul. igy inkabb a "ne basztasd" a valasz :)

--
A vegtelen ciklus is vegeter egyszer, csak kelloen eros hardver kell hozza!

Értem. De akkor hogy csinálod, hogy "eredeti_csomag-foo1"?

* Én egy indián vagyok. Minden indián hazudik.

debian/changelog-ba ugy bejegyzes. ha fennvan devscripts, akkor dch -v 1.2.3-ubuntu1+foo1 es editorban beirod hogy mi a valtozas.

en amugy gbp (regi neven git-buildpackage) hasznalom. git repoban importalom a source cuccokat, a "sajat" branchben a modositasok. igy ha ubuntuban frissul a csomag, csak ujbol(=tovabb) importalom a cuccot, git merge a sajat repoba. feloldom a changelog bejegyzes utkozest (meg a tobbit ha van), majd mehet a build. az egesz kb 5 perc sincs.

kezdeti import
dget http://......../foo_1.2.3.dsc
gbp import-dsc foo_1.2.3.dsc
cd foo
git checkout -b sajat
# sajat modositasok belerakasa
dch -v 1.2.4+foo1
"ezt-azt tettem bele"
git add debian/changelog bar
git commit
uj verzional:
dget http://......../foo_1.2.4.dsc
cd foo
git import-dsc ../foo_1.2.4.dsc
git checkout sajat
git merge master
#fix conflict
dch -v 1.2.4+foo1
"merge ubuntu release"
git add debian/changelog bar ...
git commit

--
A vegtelen ciklus is vegeter egyszer, csak kelloen eros hardver kell hozza!

WOW! Köszönöm!
A dch -t nézegetem egy ideje. Kicsit zavaros nekem. Olyan mintha az eredeti repo -ba akarna valamit beletenni. Bejelenti a változást. Na ne, nekem úgy tűnik ez a módosítás kizárólag nekem kell (az egész világon?).
Nincs mit tenni ki kell próbálni.
Ha jól értem ezt "$ debuild -b -uc -us" után lehet/kell használni?
Ha ilyen "foo1" -el telepítem, akkor gondolom az apt már nem veti össze a repoban lévővel és nem frissíti?
Az "1.2.4" az eredeti verzió szám, vagy tök mindegy?
A Debian 10 "hplip-3.18.12-dfsg0" de a csomagok már "hplip-3.18.12-dfsg0-2_amd64".
Az "$ aptitude source hplip" parancs is írja, hogy használjuk a git -et.
Úgy is kipróbáltam a különbség, hogy az aptitude valami .tar.xz csomagokat is letölt - még nem derítettem ki mik ezek.
Az egész "módosítás" mindössze egy sor a rules -ben. De mennyi idő...

* Én egy indián vagyok. Minden indián hazudik.

10+ éve foglalkoztatott a .deb-készítés, kb. semmire nem emlékszem belőle, de nem lenne célszerűbb, ha a csomagjaidat valami saját kiegészítő névvel látnád el, és egy "Provides: hplip (=az_eredeti_verziószáma)" mezővel „illesztenéd vissza” a rendszerbe?

+1

Jó lenne, de egyelőre nem találom hogy tudnám a csomag nevét megváltoztatni.

* Én egy indián vagyok. Minden indián hazudik.

Egyrészt:
starting with apt 1.1 (available in Xenial (16.04), stretch) apt install also allows local files:

sudo apt install ./foo-1.2.3.deb

Ekkor értelem szerűen a függőségeket is magával rántja.

Másrészt az "sudo apt-mark hold " vagy "echo " hold" | sudo dpkg --set-selections" vagy /etc/apt/preferences megfelelő használata mindenképp ajánlott.

Harmadrészt reprepro -val tudsz saját repot csinálni, de a preferences szerkesztését ekkor sem úszod meg ha a saját csomag verzió kisebb vagy egyenlő a Debianban lévővel.

"Ekkor értelem szerűen a függőségeket is magával rántja." Honnan?
A lényeg hogy több csomag "alkot" egyet. Sőt az én esetemben egy csomagot kellet telepíteni a fordítás eredménye képpen.
A csomag verziószámán nem változtattam de az enyémet vette elő, az volt elől.
Más kérdés ha változik a verzió szám.

* Én egy indián vagyok. Minden indián hazudik.

Attól függ...

Ha egyszerre telepíted és csak egymástól függenek akkor sehonnan sem fog semmit telepíteni csak azokat a deb-eket amit megadtál. Pl. van 20 deb egy könyvtárban: dpkg -i *.deb
A dpkg -i csomag1.deb ; dpkg -i csomag2.deb stb NEM jó.
apt install esetén ha van olyan függőség ami valamelyik repobol kinyerhető akkor azt magával rántja onnan. Pl. apt install ./*.deb
Nyilván, ha sem deb-et nem adtál meg sem a repobol nem szedhető ki, akkor nem fog lefutni.

Több csomag sosem alkot egyet. Egy csomag az egy csomag aminek lehet kötelező függősége, ajánlott függősége meg a fene tudja még mije.
Fentebb azt írtad van 20 csomagod most azt mondod egyet kell telepíteni. Ha 20 csomagod van akkor nem egyet kell telepíteni hanem 20-at... Egyszerre...

Mi fpm -et használunk Debian csomag készítésre, abban meg lehet adni, hogy a csomag milyen néven fusson (--name).

A hplip forrás csomag build a következő állományokat hozza létre:
hpijs-ppds_3.18.12+dfsg0-2_all.deb
hplip_3.18.12+dfsg0-2_amd64.build
hplip_3.18.12+dfsg0-2_amd64.buildinfo
hplip_3.18.12+dfsg0-2_amd64.changes
hplip_3.18.12+dfsg0-2_amd64.deb
hplip-data_3.18.12+dfsg0-2_all.deb
hplip-dbgsym_3.18.12+dfsg0-2_amd64.deb
hplip-doc_3.18.12+dfsg0-2_all.deb
hplip-gui_3.18.12+dfsg0-2_all.deb
libhpmud0_3.18.12+dfsg0-2_amd64.deb
libhpmud0-dbgsym_3.18.12+dfsg0-2_amd64.deb
libhpmud-dev_3.18.12+dfsg0-2_amd64.deb
libsane-hpaio_3.18.12+dfsg0-2_amd64.deb
libsane-hpaio-dbgsym_3.18.12+dfsg0-2_amd64.deb
printer-driver-hpcups_3.18.12+dfsg0-2_amd64.deb
printer-driver-hpcups-dbgsym_3.18.12+dfsg0-2_amd64.deb
printer-driver-hpijs_3.18.12+dfsg0-2_amd64.deb
printer-driver-hpijs-dbgsym_3.18.12+dfsg0-2_amd64.deb
printer-driver-postscript-hp_3.18.12+dfsg0-2_amd64.deb
printer-driver-postscript-hp-dbgsym_3.18.12+dfsg0-2_amd64.deb

Most jobban átnéztem ez kevesebb mint 20, hiszen a szimbólumokat és "-dev" csomagokat nem akarom telepíteni.
Viszont ha a sources.list elejére teszem ezt a könyvtárat, akkor innen telepít, nem ahivatalos repo -ból. Ráadásul az én esetemben az egyik csomag "kilóg" a dependency -ből, vagyis így kell telepítenem:
# aptitude install hplip libhpmud0
Így lesz teljes és működik a parallel portos nyomtató matuzsálemem.
Még csak alig olvastam bele az fpm leírásába gyanús, hogy mit fog csinálni a teljesen debian forrás csomag struktúrával.

* Én egy indián vagyok. Minden indián hazudik.

Az fpm-et az előtt kellene a folyamatba bevonni, mielőtt a Debian csomagjaid elkészülnek...
Tulajdonképpen a nem tudom hány deb csomagodból lehetne egy nagy csomagot csinálni. De ez csak egy ötlet, meg ha van kedved foglalkozni vele. Úgy tűnik már megoldottad...

Szia!

Rém egyszerű a dolog. Kell hozzá egy webszerver (ftp-n is ez a logika) ahol tárolod az anyagjaidat. Ha kész a csomag akkor architektúra szerint szétdobod őket. Pl amd64 az amd64 mappába, az i386-os csomagokat az i386 mappába.
Utána lescanned a tartalmat. Ha több architektúra is van akkor ismétled...

dpkg-scanpackages amd64/ | gzip >amd64/Packages.gz

Utána apt-be belerakod, hogy hol találja meg az anyagot.

deb [trusted=yes] http://apt.pelda.hu/private amd64/

Utána a szokott módon telepíted.

Mi lenne, ha a hplip-et lefordítva egy külön könyvtárba telepítenéd, pl. /usr/local vagy /opt vagy ilyesmibe, tehát a csomagkezelő hatáskörén kívül. A CUPS-ot rábírod, hogy ebből a könyvtárból szedje az információkat (talán ppd fájl, meg nem is tudom, mik kellenek még), és kész.
A rendszerbe meg telepíted a "hivatalos" hplip-et, mindennel együtt. Ha frissül a hivatalos hplip, semmi gond, mert a nyomtatáshoz használtat nem érinti a történet.
Persze arra kell figyelni, hogy ha a saját hplip-ed valamelyik függősége frissül, lehet, hogy újra kell fordítanod - de ez nem jelent többletmunkát a saját repóhoz képest, mert alkalmanként ugye ott is újra kell fordítani.

Az a baj, hogy az sem világos, hogy és mint hívódnak meg ezek a fájlok.
Nemcsak a cups, de a sane is probléma. Még a "hold" lehet a legjobb, végül is az sem "csapja" fejbe de jelzi. Egyébként a repo fájljai egy alkönyvtárban vannak.

* Én egy indián vagyok. Minden indián hazudik.