Sziasztok!
Szeretnék készíteni magamnak egy "saját" egyszerű csomagkezelőt. Maga a csomag telepíés és a verzió ellenörzés megvan, de fogalmam sincs, hogyan tudnám megoldani a csomagok törlését. Csomagkezelő maga forrás alapú. Milyen letőségeim lennének rá?
Válaszokat előre is köszönöm.
- 39534 megtekintés
Hozzászólások
Ha nem forrásalapú lenne, akkor egyszerű lenne: telepítéskor lemented valahova, hogy milyen fájlok vannak az adott csomagban.
Így viszont az az érzésem, hogy kénytelen leszel Makefile-t parsolni, hogy miket is hoz létre a make install. (Ötlet: make install előtt alias-olod a cp, ln, mkdir, install stb. parancsokat, hogy mentsék le, mit hoznak létre. Bolondbiztos nem lesz.)
- A hozzászóláshoz be kell jelentkezni
Erre én is gondoltam, hogy make install parancs kimenetét "naplozom". Mondjuk, minden csomagnál létrehoz egy megadott helyen a csomagnévvel azonos filet, ami tartalmazná a make install kimenetét. A törlésnél meg simán végigmene a filet tartalmazó adatoknál egy rm parancsal. Szerintem egész jó mondszer. Már csak az a kérdés hogyan tudom ezt átültetni script-be?
- A hozzászóláshoz be kell jelentkezni
"A törlésnél meg simán végigmene a filet tartalmazó adatoknál egy rm parancsal."
Itt jön elő a feladat szépsége. Ha X csomagot azért fordítottál/telepítettél, mert Y-nak szüksége volt rá, X "franc se emlékszik, ezt minek tettem ide"-alapú törlésével az egy hét múlva futtatni próbált Y "valami hülyeséget ír ki és nem megy".
"Szerintem egész jó mondszer."
Szerintem a de facto csomagkezelők azért bonyolultabbak, mert bonyolultabb a feladat, mint első blikkre.
- A hozzászóláshoz be kell jelentkezni
A csomagban benne lehetnek a függőségei, ugyanúgy, mint a rendes csomagkezelőknél. Ezt le lehet menteni a telepítéskor, és X törlésekor ellenőrizni, hogy nincs-e olyan, ami függ tőle. (Szerk.:) Bonyolultabb, mint bináris csomagkezelőnél, mert a fordítási opcióktól függhet, hogy mire van szüksége. Így a csomagnak tartalmaznia kell, hogy milyen opcionális függőségek vannak. Aztán vagy utólag ellenőrizni, hogy hogy is lehetett fordítva, vagy inkább a fordítást csináló szkriptből/Makefile-ból lementeni.
Ennél szerintem bonyolultabb megbízhatóan ellenőrizni, hogy egyáltalán miket tesz föl egy make install. (Ugye áltlában csak adott néhány paranccsal: cp, install, stb. hoz létre fájlokat, de erre nincs garancia.)
- A hozzászóláshoz be kell jelentkezni
Igen, csak mindez baromi hosszura tud nyulni. Nem veletlen, hogy a binaris csomagkezelok kulon metadata adatbazisokat epitgetnek inkabb, mint minden egyes csomagmuveletnel atnyalazzak az epp aktualis rendszert.
A masik, hogy nincs silver bullet a csomagok telepitesehez, tehat minden csomaggal egyedileg kell foglalkozni, adott esetben a make install helyett kezzel masolgatva a csomagokat, de a legtobb esetben a DESTDIR vagy a prefix/PREFIX valtozok megfelelo tweakelesevel elerheto, hogy a telepites ne a configure altal beallitott utvonalra, hanem egy temp mappaba tortenjen, es a fajllista innen valo lementese mar pofonegyszeru.
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
Én se azt mondom, hogy az egész rendszert nyálazza át, hanem hogy a csomagok telepítésekor mentse le, hogy miktől függenek. Aztán ott kell megnézni.
- A hozzászóláshoz be kell jelentkezni
Ha jól értelmezem akkor a szokásos telepítésnél a PREFIX ne az /usr legyen hanem a /temp könyvtára kéne megadni?
- A hozzászóláshoz be kell jelentkezni
Reszben.
Az autoconf rendszerek ertelmezik a DESTDIR valtozo fogalmat, tehat:
make DESTDIR=/var/tmp/csomagkezelo/package-1.0/install install
M> install -d /var/tmp/csomagkezelo/package-1.0/install/usr
M> install -d /var/tmp/csomagkezelo/package-1.0/install/usr/bin
M> install program /var/tmp/csomagkezelo/package-1.0/install/usr/bin/programexe
Ahol M> a make parancs altal lefuttatott parancs.
Ezt a valtozot atvette tobb mas buildrendszer is, pl. a cmake is ismer ehhez hasonlo valtozot, talan ugyanez a neve is.
Ha az epites alatt allo csomag build rendszere valamiert megsem ertene a DESTDIR valtozot, akkor a make install-nal override-olni kell a prefix/PREFIX valtozot (fuggoen attol, hogy kis vagy nagybetusen szereti), de csak ott, tehat a configure-nek (ha van) illetve a fo build parancsnak (ha van) a normal /usr prefixet kell megadni, csak a make install eseteben kell ezen valtoztatni. Ez esetben viszont figyelni kell arra, hogy peldaul az etc mappa helyet tarolo valtozot is overrideolni kell, hiszen az a legtobbszor nem a prefix mappa (/usr) alatt van.
Erdemes attanulmanyozni a make parancs mukodeset illetve a nagyobb build rendszerek alapveto mukodeset, sok ilyen kis trukkel lehet cheatelni dolgokat (specialis CFLAGS, LDFLAGS, configure altal at nem adott flagek kezelese).
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
checkinstall is ilyet csinál.
~~~~~~~~
deb http://deb.metaltux.tk/ wheezy yazzy repack
- A hozzászóláshoz be kell jelentkezni
Néztem én is de az én csomagkezelőmnél nem kell folyamatossan figyelni a verziót hanem automatikus. Szóval nem kell mindig újabb csomagot létrehoznom (módosítanom) ahányszor újabb csomag jelenik meg.
- A hozzászóláshoz be kell jelentkezni
A legtobb buildrendszer tamogatja a DESTDIR valtozo hasznalatat, vagy van ra alternativaja
mkdir -p /var/tmp/csomagkezelo/install/valamicsomag-1.2.3
make DESTDIR=/var/tmp/csomagkezelo/install/valamicsomag-1.2.3 install
cd /var/tmp/csomagkezelo/install/valamicsomag-1.2.3 && find . > /var/tmp/csomagkezelo/temp/filelist.txt
And that's all.
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
Szerintem nézd meg előbb, hogy működik pl az rpmbuild. Elég sok ötlet meríthető belőle (pl telepítésnél átmeneti buildroot könyvtárba irányítás, majd onnan fájllista kigyűjtése), illetve segít megérteni, hogy mik a problémás esetek.
Másik ötletforrás esetleg Arch linux lehet. Ott a yaourt csinálja kb azt, amire gondolsz.
Amúgy kemény fába vágtad a fejszéd...
---
Régóta vágyok én, az androidok mezonkincsére már!
- A hozzászóláshoz be kell jelentkezni
csomagtelepites elott egy find az vonatkozo filerendszerre, aztan utana is, es a kulonbozet megadja, hogy milyen fajlok jottek letre?
Nem lesz gyors, illetve gondolnod kell a /proc-ra, meg a tmp fileokra, illetve azokra, amik letrejonnek a gepen amugy, de ha valami szuk helyre kerulnek a filejaid (/usr/local, vagy /opt) akkor mukodhet.
- A hozzászóláshoz be kell jelentkezni
find -xdev... de egyebkent a DESTDIR-es megoldas olcsobb es jobban mukodik, plusz nincs benne hibalehetoseg.
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
ez azért elég vidéki lenne...
~~~~~~~~
deb http://deb.metaltux.tk/ wheezy yazzy repack
- A hozzászóláshoz be kell jelentkezni
volt fizetos symantec termek, ami ezen az elven csinalt windows ala .msi installert
Mondjuk nem is szerettem. :)
- A hozzászóláshoz be kell jelentkezni
És elég vidéki is volt
-
Groovy funkcionális eszközök
- A hozzászóláshoz be kell jelentkezni
a "make uninstall" miért nem jó???? (már ha meg vagyon írva az uninstall ugye)
kitömörít, configure, make uninstall
De ha csak a make uninstall részét is kirakod valahova mondjuk thispkg.uninstall néven és lefuttatod simán bashból is simán menne, persze a környezeti változókkal együtt.
- A hozzászóláshoz be kell jelentkezni
wut?
1) elhanyagolhato mennyisegu csomagnal van make uninstall, az autoconf default nem is general ilyet IIRC, raadasul nyugos az adatokat tartalmazo mappak kezelese
2) Nincs olyan, hogy a "make uninstall reszet kirakod valahova". Egy build rendszer altalaban eleg sok fajlbol all, nem lehet csak ugy "lementeni" egy targetet belole. Erre nincs semmilyen modszer.
Btw, magyarazza mar el nekem valaki, mi a baj azzal, ha egy csomagkezelo metadataban letarolja, hogy az adott csomaghoz mi tartozik, es az alapjan torolget? Miert akarjuk ezt olyan eszkozokkel megoldani, amik nem hatekonyak a feladatra, adott esetben nem is erre vannak felkeszitve?
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
"magyarazza mar el nekem valaki, mi a baj azzal, ha egy csomagkezelo metadataban letarolja, hogy az adott csomaghoz mi tartozik, es az alapjan torolget?"
Forrás alapú csomagkezelőnél néha a fordítási opcióktól függhet, hogy milyen fájlok jönnek létre. Nem tudom, ez mennyire gyakori.
- A hozzászóláshoz be kell jelentkezni
And? A Gentoo is pont igy csinalja, csak a feltelepitett csomagokrol tarol adatbazist, fajllistakkal.
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
"And?"
Ha a metaadatokat úgy értetted, hogy benne van a csomagfájlban, akkor a nem biztos, hogy pontos lesz, azaz tényleg azok a fájlok lettek telepítve.
Ha a telepítéskor akarod letárolni valahova, akkor nem nyilvánvaló, hogy hogy deríted ki, hogy egyáltalán milyen fájlok jöttek létre.
- A hozzászóláshoz be kell jelentkezni
"Ha a telepítéskor akarod letárolni valahova, akkor nem nyilvánvaló, hogy hogy deríted ki, hogy egyáltalán milyen fájlok jöttek létre."
A törlés úgy néz ki meg lett oldva a porg nevű program segítségével. A make install kimenetet menti le és az alapján törli ha jól tudom.
- A hozzászóláshoz be kell jelentkezni
Sokadszorra irom le, de mar igazabol nem lep meg, hogy senki nem kepes elolvasni amit irok...
A legtobb build rendszer tamogatja a make install celgyokerenek atiranyitasat, a DESTDIR valtozo beallitasaval. Tehat, ha a DESTDIR mondjuk /home/gd/installteszt es a telepites alapbol egy /usr/local/bin/lofesz nevu binarist telepitene, akkor a valodi fajl a /home/gd/installteszt/usr/local/bin/lofesz utvonalra fog kerulni, de akkor es csakis akkor, ha a DESTDIR valtozo be van allitva a make install kiadasakor (make DESTDIR=/home/gd/installteszt install).
Ha es amennyiben az adott csomag nem tamogatja a DESTDIR valtozot valamilyen modon (nagyon keves ilyen van, el kell olvasni az adott build rendszer dokumentaciojat, az autotools, a cmake es az osszes scriptnyelv cucca tudja kezelni), akkor a make install fazisban el kell redirectelni az adott buildrendszer prefix valtozojat. Nagyon fontos, hogy ez ne a configure/make fazisban tortenjen, mert ha az adott csomag hardkodolja valahova a patheket, akkor ez hibas lehet.
Ha es amennyiben ennek a celmappanak (a pelda szerint a /home/gd/installteszt) tartalmat letarolod (cd /home/gd/installteszt && find . > /tmp/lofesz-1.0.0.txt), majd innen siman csak atcopyzod a dolgokat a gyokerbe, akkor ket dolgot is nyersz:
1) lesz egy fajl/mappa listad (nem teljesen accurate, ki kell szurni a tobb csomag altal ownolt mappakat, peldaul /usr/local/bin, /usr/local, /usr, stb)
2) van egy control pointod meg mielott barmit attennel az elo rendszerre. Ha gondolod, akar binaris csomagot is gyarthatsz belole, betomoritheted a man fajlokat, kiszedheted a felesleges nyelveket, strip-pelheted a binarisokat, viruskeresheted, akarmit megtehetsz.
De tenyleg azt javaslom, hogy tanulmanyozzatok hogyan mukodnek a mostanaban hasznalt build rendszerek. Nagyon aladolgoznak a csomagoloknak, sok ponton segitik oket.
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
> a mostanaban hasznalt build rendszerek
Itt a lényeg.
- A hozzászóláshoz be kell jelentkezni
Mire gondol a kolto?
Legrosszabb esetben ugyanezt el lehet kezileg is jatszani, ha valaki nagyon akarja.
A make install kimenetenek parsolasanal kb. barmi jobb.
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
Mivel csomagkezelőt készít a kérdező, így nem jósolható meg, hogy mely csomagok támogatják és melyek nem. Szóval álltalános megoldásra van szükség, hacsak nem teszi tele feltételes működéssel a csomagkezelőt
-
Groovy funkcionális eszközök
- A hozzászóláshoz be kell jelentkezni
Szoval a Gentoo portage/metadistrib megoldasa nem eleg altalanosan jo ? :)
- A hozzászóláshoz be kell jelentkezni
Ez jó megoldás, nem mondtam, hogy ne lenne az, csak azt, hogy nem volt nyilvánvaló. :)
- A hozzászóláshoz be kell jelentkezni
Hát, ha gyártott az ember akármelyik nagyobb csomagkezelő alá csomagot [márpedig gondolnám, hogy az ember azért akar sajátot, mert azokkal valami baja van], akkor azért illett volna annak lennie :)
- A hozzászóláshoz be kell jelentkezni
Gentoo alá már csináltam frissitést. Nincs bajom, a mostani csomagkezelőkkel. Mindig is érdekel a "saját distró" készítés. Nem a "Pistike" módszere gondolok, hogy fogok egy meglévő rendszert és kisebb vagy nagyobb módosításokkat végrehajtva kész az "új" rendszer. LFS-ből készítettem egy rendszert, amihez egy egyedi csomagkezelőt szeretnék, eltérve a meglevő és "közismert" csomagkezelöktől.
- A hozzászóláshoz be kell jelentkezni
Hát akkor nem bash-ban kellene megírni. Egyébként meg waste of time.
De írd meg pythonban, legyen sqlite adatbázis alatta, rendes csomagleíró a build-ekhez. Az nem egy csomagkezelő, hogy configure/make/install meg eltárolom mi hol van. Egy rendes csomagkezelő szépen tárol ezer másik dolgot, pl sum-ok, stb.
- A hozzászóláshoz be kell jelentkezni
"Nincs olyan, hogy a "make uninstall reszet kirakod valahova"."
Ahhoz, hogy a make uninstall működjön, nem elég a Makefile-t elmenteni valahova?
- A hozzászóláshoz be kell jelentkezni
"A" Makefile mellé oda kéne tenni az alkönyvtárak Makefile-jait struktúrástul, és minden include-olt fájlt, nem lévén arra garancia, hogy minden törlés a főágban történik, és minden paraméter a fel van oldva ott.
Nyilván ezt is meg lehet csinálni, de én mégis inkább a pirospöttyös gomb elcsavarását javasolnám annak, aki meleg vízre vágyik.
- A hozzászóláshoz be kell jelentkezni
Természetesen mind a két pont amit írtál igaz. Egy uninstall targetet nem lehet kiszedni csak úgy. Kivéve persze ha minden "csomag"hoz maga írja a Makefile-okat, és azokat úgy írja meg hogy ez mégis lehetséges legyen.
A legjobb az amit Te mondasz, hogy az install esetén igenis elrakjuk mit hova tesz egy metadatába. Mondjuk érdekes kérdés, hogy hogyan, pl a 'make install' kimenetét parsol-va.
Mondjuk az egészet nem értem, hogy mi értelme, mikor van ezer csomagkezelő és semmi értelme egy újat írni. Ott van pl. a pkgsrc, ami tökéletesen megfelel erre. Én is azt használom a saját LFS-ből épített Linux-omon. :D
- A hozzászóláshoz be kell jelentkezni
Mondjuk az egészet nem értem, hogy mi értelme, mikor van ezer csomagkezelő és semmi értelme egy újat írni. Ott van pl. a pkgsrc, ami tökéletesen megfelel erre. Én is azt használom a saját LFS-ből épített Linux-omon. :D
Én is eleinte olyat akartam ami kész van. pl: paludis. Ez emerge-nek egy alternatív csomagkezelője. Gondoltam, feldobom és készítek saját ebuild-kat. Csak sajnos nem tudtam ráhegeszteni a rendszerre. Mivel itt se tudtak segíteni benne, ezért gondoltam készítek egy "simple package manager"-t.
Egyébként, pkgsrc-be honnét szeded a csomagokat?
- A hozzászóláshoz be kell jelentkezni
google://NetBSD pkgsrc
Egyebkent inkabb a pacman-t ajanlom. Egeszen konnyen integralhato a rendszerbe, a PKGBUILD fajlok egeszen turheto szintaxissal rendelkeznek.
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
"Egyebkent inkabb a pacman-t ajanlom. Egeszen konnyen integralhato a rendszerbe, a PKGBUILD fajlok egeszen turheto szintaxissal rendelkeznek. "
Pacman nem forrás alapú rendszer. Én viszont, source base-t szeretnék mindenképp.
- A hozzászóláshoz be kell jelentkezni
Van hozza makepkg is.
Megmondom oszinten a pacman-t azert szeretem, mert van, amikor nincs ido forditgatni, es egy kesz csomagkeszletet kell reprodukalni $RANDOM helyekre. Ilyenkor sztem eleg ha makepkg-val legyartod a csomagokat, aztan ahol kell, pacman-ozol. (<
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
nézd meg hogy mukodik a slackware csomagkezeloje.
Ajanlom a slackbuilds.org es az http://www.sbopkg.org-t/
Szerintem eleg korrekt rendszer. Lefordit neked mindent. nincs benne dependency resolution ugyan, de leellenorzi neked a verziot, telepit, uninstallal, frissit, letolt, mindezt forrasokbol.
Ja, es lehet queue file-okat csinalni amik leforditjak a "fuggosegeket" a korrekt sorrend szerint.
- A hozzászóláshoz be kell jelentkezni
Saját csomagokhoz mindig is a paco-t használtam. Az egyik legjobb.
paco -lp csomagom "make install"
paco -r csomagom
paco -ia
paco -ua
--
A főnököm mindig megtartja amit ígér, ha pénzt ígér azt is!
- A hozzászóláshoz be kell jelentkezni
paco fejesztése abba maradt nem?
- A hozzászóláshoz be kell jelentkezni
Valóban, viszont van helyette porg. Még nem teszteltem, de a paco a mai napig teszi a dolgát :)
szerk: letöltöttem, a paco adatbázist átrántotta a paco2porg paranccsal, ugyanúgy működik, javítások vannak. Jelenleg 0.2-es verziónál tart. Remélem a GTKMM-et kivágja a francba, de nem hiszem. Sima GTK-nak jobban örülnék.
--
A főnököm mindig megtartja amit ígér, ha pénzt ígér azt is!
- A hozzászóláshoz be kell jelentkezni
Rendben én is kiprobálom. Ahogy nézem, a GTKMM-nek függösége a GTK.
- A hozzászóláshoz be kell jelentkezni
Ami nem meglepő, merthogy C++ binding a GTK-hoz.
- A hozzászóláshoz be kell jelentkezni
Polesz
Ha jól látom, ezzel csomagot nem lehet telepíteni. Marad úgyan úgy manuális letöltés és telepítés, annyival változik, hogy a "make install" parancsot lementi, ami által lehet törölni majd a csomagot. Vagy rosszul látom??
- A hozzászóláshoz be kell jelentkezni
Egyik lehetőség a már párszor említett DESTDIR.
Viszont a ./configure-féle --prefix-et NEM ajánlom, főleg nem abban az esetben, ha kb. követed az FHS-t, azaz nem az egy program-egy könyvtár elvet követed, hanem a binárisok a /usr/bin-be, a libek a /usr/lib-be, stb. Miért is nem ajánlom? Ha megcsinálod --prefix-szel, akkor a létrejövő *.pc fájlokban (pkgconfig) a megadott prefix-szel lesznek a megadott hivatkozások (tehát /tmp/csomagok/), ami gondot okoz egy ettől függő csomag fordításakor, ui. a létrejött *.pc fájlban olyan könyvtárra fogsz hivatkozni, ami nem is létezik - ami még nem baj, csak aztán a szükséges header-ek nem lesznek meg.
A másik lehetőség a kézikönyv 6.3.2.5-ös pontja (LD_PRELOAD vagy strace).
Egy harmadik opció, hogy make install előtt létrehozol egy üres fájlt, utána make install, majd egy find -newer létrehozott_fájl megtalálja neked azokat a fájlokat, amelyeket a fentebb létrehozott fájlnál későbbiek.
Az LFS Hints-ben pedig ezeket találtam:
http://www.linuxfromscratch.org/hints/downloads/files/package_managemen…
http://www.linuxfromscratch.org/hints/downloads/files/pm_with_git.txt (érdekes ötlet, gyakorlatilag a git-re bízod)
- A hozzászóláshoz be kell jelentkezni
kár hogy az utolsó link letöltő linkje nem müködik :(
- A hozzászóláshoz be kell jelentkezni
Az ötlet megvan, innentől annyira nem (tűnik) vészes(nek). A telepítés után kiadod a git add && git commit
parancsot.
- A hozzászóláshoz be kell jelentkezni
A ./configure ... --prefix=... az azt adja meg, hogy telepítés után hol legyen a helye a fájloknak a működő rendszerben.
Hogy a forrás hová tegye a telepítendő fájlok könyvtárszerkezetét azt pedig
make install DESTDIR=....
esetleg
make install [INSTALL_ROOT | INSTALL_PREFIX]
vagy van olyan is, ami:
DESTDIR=/path/to make install
... csomagfüggő a dolog.
-fs-
Az olyan tárgyakat, amik képesek az mc futtatására, munkaeszköznek nevezzük.
/usr/lib/libasound.so --gágágágá --lilaliba
- A hozzászóláshoz be kell jelentkezni
Épp ezért nem lesz neki jó a --prefix.
Ha teszem azt, azt akarja, hogy a foo csomagot ideiglenesen egy külön könyvtárba (mondjuk chroot) telepíti, hogy könnyű legyen file-listát generálni:
- meghívod --prefix=/tmp/csomagok/usr
módon
- telepíted a /tmp/csomagok/usr/{bin,lib,stb.}
-ba, generálod egy find
-dal a fájllistát
- a /tmp/csomagok
-ból átpakolsz mindent a /
-be.
Ez azért nem lesz jó, mert mondjuk a gtk2-nek a *.pc
fájljaiban az lesz, hogy:
prefix=/tmp/csomagok/usr
includedir=${prefix}/include
...
Cflags: -I${includedir}/gtk-2.0
Azaz a Cflags
a /tmp/csomagok/usr/include/gtk-2.0
könyvtárat mondaná, hogy ott is keresgélni kell a header-eket. Viszont ott már nincs semmi!
Szóval ezért mondtam, hogy ne a prefix-et használja erre a célra, hanem a DESTDIR-t (ha autoconf/automake-es esetet nézünk, eléggé számíthatunk a DESTDIR-re).
- A hozzászóláshoz be kell jelentkezni
Ugy remlik, a cmake is tamogat DESTDIR-szeru valtozot.
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
Köszi a segítséget a csomagok törlésére úgy döntöttem hogy a porg nevű csomagot fogom használni.
- A hozzászóláshoz be kell jelentkezni
A porg-gal egyetlen gond, hogy csak a "make install" reszt automatizalja be, a configure/make folyamatokat nem, tehat a --prefix es tarsainek beallitasat nem fogod meguszni.
--
Ki oda vágyik, hol száll a galamb, elszalasztja a kincset itt alant:
()=()
('Y') Blog | @hron84
C . C Üzemeltető macik
()_()
- A hozzászóláshoz be kell jelentkezni
cmake ... -DCMAKE_INSTALL_PREFIX:PATH=/usr ...
-fs-
Az olyan tárgyakat, amik képesek az mc futtatására, munkaeszköznek nevezzük.
/usr/lib/libasound.so --gágágágá --lilaliba
- A hozzászóláshoz be kell jelentkezni
Itt nagy keveredés van. A "--prefix" azt mondja meg, hogy a "DESTDIR=/" esetén hol legyenek a csomagok, magyarul a gyökérhez képest. Ezt lehet felüldefiniálni, hogy ne az alaprendszerbe, hanem egy külön könyvtárba telepítsen. Ergo a "DESTDIR=/var/tmp/destroot make install" a /var/tmp/destroot/$prefix/... könyvtárba fog pakolni...
Amúgy érdemes lenne megnézni a Frugalware vagy az Arch csomagkészítőjét. Minimális munkával át lehetne alakítani és nagyon jól kezeli mindkettő a build függőségeket...
- A hozzászóláshoz be kell jelentkezni
Olvasd el még egyszer, mit írtam és mire írtam.
- A hozzászóláshoz be kell jelentkezni
Sziasztok !
Segítségeteket szeretném kérni. Van 2 változom. Az 1-ik kilistáza a felsorolt csomagokat "ha találja" a másik meg tartalmazza a csomag listát. Az a kérdésem hogyan tudom összehasonlítani őket, úgy hogy a amiket az első kilistáz és nem szerepel az írja ki pirossan amit talál azt meg zölden. Azt már késsz ami ha mindegyik megvan akkor zölden nyomja ki a listát ha nincs akkor meg pirossan. Már csak azt kéne hogy kombinálja öket.
- A hozzászóláshoz be kell jelentkezni
Első felindulásra:
cat file1 file2 | sort | uniq -d
- ezek szerepelnek mindkét listában (feltételezve, hogy mindkét fájlban minden csak egyszer szerepel).
- A hozzászóláshoz be kell jelentkezni
Nem fileba szerepelnek.
A lényeg, hogy
első változó "porg -v unzip alsa-lib"
Második "unzip alsa-lib"
Ha mondjuk a első változó csak a "unzip" -et adja ki akkor zöld és a "alsa-lib" piros. vagy akár fordítva. Első változó eredménye határozza meg a színt a listába.
- A hozzászóláshoz be kell jelentkezni
Egyrészt lehet a kimenetet egy ideiglenes fájlba is irányítani, és azokat feldolgozni.
Másrészt lehet parancs kimenetével is dolgozni.
Opció1:
(parancs1 ; parancs2) | sort
Opció2:
sort <(parancs1) <(parancs2)
- A hozzászóláshoz be kell jelentkezni
Körülbelül 20szor kellett átolvasnom és kitalálnom hogy milyen nyelven is írtad, mert néhol hiányzik a tárgy a mondatban, de van hogy az alany és az állítmány is. A határozókról nem is beszélve. :D
Amúgy meg ha bash, akkor két forciklussal, de a kisebbik listán kezdj el először átszaladni. Ha mondjuk bármilyen más interpreter nyelv lenne, akkor kivonnám egymásból a két array-t vagy hash-t.
- A hozzászóláshoz be kell jelentkezni
Nem egyszerűbb és elegánsabb és gyorsabb és kevesebb hibalehetőséget rejtő sort
+uniq
kombó?
- A hozzászóláshoz be kell jelentkezni
De, ha csak a listára vagy kiváncsi. Ő viszont szeretné külön szinezni az egyes eseteket. Szóval a sort hlyett szükség van a végigszaladáskor if-ekre is. Az én olvasatomban. De mondom, elég nehezen értem alany, állítmány, tárgy és határozó nélkül a mondatait. :D
- A hozzászóláshoz be kell jelentkezni
Színezni is lehet: ami előfordul kétszer, az zöld (merthogy a függőségek között is ott van és a telepítettek között is), ami csak egyszer, az piros. Legalábbis első blikkre úgy tűnik, hogy mennie kell.
- A hozzászóláshoz be kell jelentkezni
A dupla for-al próbálkoztam már de nem sikerült. Mostanába keztem tanulni a bash nyelvet meg az egész programozás dolgot. Leht, nem ilyen project-be kelett volna elösször nekiugrani.
- A hozzászóláshoz be kell jelentkezni
Sok sikert, de az oka eléggé érdekelne, hogy miért is?
- A hozzászóláshoz be kell jelentkezni
A függöség kezelésre azt találtam ki, hogy csak megmutatja a függöségeket és az "extra" csomagokat listába. Telepíteni nem telepíti őket, csak jelzi mi van fent és mi nincs.
- A hozzászóláshoz be kell jelentkezni
egy ilyet gyártottam:
http://pvtv.hu/tarolo/out_files/xzpkg
A csomagokat úgy készítem, hogy a DESTDIRT tömörítem tar.xz-re.
-fs-
Az olyan tárgyakat, amik képesek az mc futtatására, munkaeszköznek nevezzük.
/usr/lib/libasound.so --gágágágá --lilaliba
- A hozzászóláshoz be kell jelentkezni
TARGET=/foo/bar\ baz xzpkg ... esetén hogy fogja kezelni a TARGET változót az if?
- A hozzászóláshoz be kell jelentkezni
Én a helyedben kipróbálnám, hogy a telepítéskor "strace -f -eopen" mennyivel lassítja a telepítést. Ha nem nagyon, akkor ez lehet jobb megfejtés, mint a find előtte és utána is. De az, hogy melyik a gyorsabb nagyon sok mindentől függ. Ha mondjuk az egész Xorg-ot telepíted egy 32GB-os SSD-re, akkor nyilván jobban jársz a find előtte-utána megoldással...
- A hozzászóláshoz be kell jelentkezni
Sziasztok !
Szeretném segítségeteket kérni abba, hogy lementettem file-ba a make install rész kimenetét.Létrehozott file-ban a sorok elejére szeretnék "rm -rf"-et hozzáadni. Rádásul, minden fileba addja hozzá a legelehére, a #!/bin/bash -t.
Ezt hogyan tudnám kivitelezni?
- A hozzászóláshoz be kell jelentkezni
sed a lelke mindennek. Ha nem megy kapásból, akkor gugli megadja a választ.
- A hozzászóláshoz be kell jelentkezni
Oke. Kezdjuk ott, hogy a make install kimenete kozvetlenul nem hasznosithato, mert egy csomo, parancskent nem ertelmezheto sort tartalmaz.
Aztan, nem a sor elejere kell beszurni az "rm -rf" -et, hanem az install/mkdir parancsokat kell lecserelni erre.
De meg ezekkel a megkotesekkel sem ajanlom igy ebben a formaban a dolgot. Sok telepito ugyanis a /usr, /usr/bin, /usr/sbin konyvtarakat is "letrehozza" (az mkdir -p/install -d csak akkor hoz letre tenyleges mappakat, ha azok nem leteznek), marpedig ezek "rm -rf" -fel vakon torteno torlese katasztrofalis eredmenyhez vezetne.
Ugyhogy a legbiztonsagosabb megoldas atolvasni a fajlt, es kimasolgatni az utvonalakat. Ha adsz peldakimenetet (nem tudom, melyik progi "make install" kimenetet mentetted le, raadasul egy cmake tok mas kimenetet ad, mint egy normal autoconfos cucc), akkor a kigyujteshez tudok adni tippet, de a kigyujtott fajl- es mappaneveket ketszer, haromszor at kell nezni, hogy tuti ne okozz kart a vegen.
--
Ki oda vágyik, hol száll a galamb, elszalasztja a kincset itt alant:
()=()
('Y') Blog | @hron84
C . C Üzemeltető macik
()_()
- A hozzászóláshoz be kell jelentkezni
Tulajdonképp, egy egyszerű bash csomagkezelővel készítésével kisérletezgetek. A csomagok törlésére találtam ki, hogy "make install"-t lementem. Benne található eléréseket simán "rm" parancsal törlöm. Ezen tényleg átsiklottam, hogy más csomag is használhatja úgyan azt a mappát. Köszi a figyelmeztetést . :) Ennek törlése tényleg elég nagy káoszt okozna. De "-rf" nélkül mappát nem töröl, így a csomagok álltal belerakott file-t törli csak ki. Elméletileg, így nem okozhat káoszt.
- A hozzászóláshoz be kell jelentkezni
Ebben a topicban már implicite és explicite elhangzott, hogy a csomagkezelés nem egyszerű dolog (sosem volt igazán az, és egyre kevésbé), ezért nincs is olyan állat, hogy egyszerű csomagkezelő.
A profi csomagkezelők se tudnak annyira profik lenni, hogy annak, aki elég sokat dolgozik velük, ne kelljen olykor átve[nr]ni az irányítást.
Szóval csak óvatosan, mert ezen a tájon nem vicces a klasszikus "gyors, egyszerű és hibás megoldás".
- A hozzászóláshoz be kell jelentkezni
Üdv!
Gyártottam ilyet, én úgyoldottam meg, hogy fordítás után a DESTDIR-be bekerültek a csomag fájljai, abból simán tar.xz-t csináltam, és a telepítés fázisában csinálok egy listt ennek a tartalmáról... persze azt is tömörítve.
a teleptés így néz ki:
xzpkg install csomagnév.tar.xz
a telepítés "lényege":
...
case $1 in
...
install)
ACTUALDIR=`pwd`
echo -n $2" "
cd $TARGET
echo -n " telepítése..."
tar -Jxf $SOURCE"/$2".tar.xz --strip-components=1 >/dev/null 2>/dev/null
echo -n " listáz..."
tar -Jtf $SOURCE"/$2".tar.xz --strip-components=1 2>/dev/null | sed -n 's/'$2'//pg' | xz -c3 - >"$TARGET"/var/lib/xzpkg/$2.txt.xz
...
az uninstall rész:
...
uninstall)
echo -n "Uninstall: $2 delete... "
xz -dc "$TARGET"/var/lib/xzpkg/$2.txt.xz | sort -r | while readfilename
do
if [ -d "$TARGET""$filename" ]
then
rmdir "$TARGET""$filename" >/dev/null 2>/dev/null
else
rm "$TARGET""$filename" >/dev/null 2>/dev/null
fi
done
echo -n "clean... "
rm "$TARGET"/var/lib/xzpkg/$2.txt.xz >/dev/null 2>/dev/null
echo -n "sync... "
sync
-fs-
Az olyan tárgyakat, amik képesek az mc futtatására, munkaeszköznek nevezzük.
/usr/lib/libasound.so --gágágágá --lilaliba
- A hozzászóláshoz be kell jelentkezni
Ezzel csak az a baj, hogy én forrás alapút szeretnék csinálni. De ötletes megoldás. Köszönöm !
- A hozzászóláshoz be kell jelentkezni
Pontosan mit ertesz az alatt hogy forras alapu?
A kollega forrasbol forditotta a dolgokat ha jol vettem ki a posztjabol, csak mielott beleresztette volna a rendszerbe a file-kat elotte csinalt belole egy tar.xz file-t.
Ez nekem ugy tunik hogy "forrasbol" van, forras alapu.
- A hozzászóláshoz be kell jelentkezni
Szerintem a kérdező azt érti forrás alapon, hogy nem akar csomagot készíteni, csak egyenesen a rendszerre telepíteni.
A telepített fájlok elvileg (sacc per kb) így meghatározhatóak:
find / >/tmp/elotte.txt
telepit ... ...
find / >/tmp/utana.txt
diff lst.txt lst2.txt | grep -v "^---" | grep -v "^[0-9c0-9]" | sed -n 's/> //pg' >uj_fajlok.txt
-fs-
Az olyan tárgyakat, amik képesek az mc futtatására, munkaeszköznek nevezzük.
/usr/lib/libasound.so --gágágágá --lilaliba
- A hozzászóláshoz be kell jelentkezni
Ez forrásalapú marad. Egy DESTDIR-be telepíted, ott könnyen legenerálod a fájlok listáját, és a DESTDIR-ből kimásolod a /-be. De ezt már párszor leírták/tuk.
- A hozzászóláshoz be kell jelentkezni
Legyszi olvass utana, hogy mi az a DESTDIR, es hogy mukodik az autoconf alapu build rendszer, es ird ide ha sikerult. Akkor tovabb tudunk segiteni. De ennyibol lovesed sincs ezekrol, addig pedig en nem akarnek csomagkezelot irni, plane nem forrasalaput.
Tahonak tunhet a fenti kijelentes, de ezek alapveto dolgok, ha nem tudod, akkor nagyon sokat fogsz szivni, mire rajossz.
--
Ki oda vágyik, hol száll a galamb, elszalasztja a kincset itt alant:
()=()
('Y') Blog | @hron84
C . C Üzemeltető macik
()_()
- A hozzászóláshoz be kell jelentkezni
Ahol a
... ./configure ...
... make ...
... make install
a telepítés menete, ott könnyen átírható ez a script. A probléma, hogy sok forrásnál teljesen más a telepítés menete.
Ha egy nem átlagos csomagról van szó, írhatsz hozzá egy installscriptet. Ha van, azt futtatod, ha nincs akkor ./configure;make;make install;
-fs-
Az olyan tárgyakat, amik képesek az mc futtatására, munkaeszköznek nevezzük.
/usr/lib/libasound.so --gágágágá --lilaliba
- A hozzászóláshoz be kell jelentkezni
A helyedben en a csomagot egy temp konyvtarba telepitenem (pl: make install DESTDIR=/tmp/temp-csomagnev) ebbol egyeszeruen ki tudod deriteni hogy mi a konkret file-lista amit majd uninstall eseten torolnod kell, majd csak utana tennem a file-kat a vegso helyukre.
Esetleg a fileokra meg ráengedhetsz egy md5sum-t hogy a jovendoben el tudd donteni hogy mindent-t torolni akarsz-e vagy pl meg akarod tartani a megvaltoztatott conf file-kat.
edit:
nezd meg ezeket a scripteket:
http://ftp.heanet.ie/mirrors/slackware/pub/slackware/slackware64-14.1/s…
- A hozzászóláshoz be kell jelentkezni
Szisztok !
Egy kis segítséget szeretnék kérni. Eddig egész jó uton halad az "egyedi" csomagkezelöm. Konfigurálás 2 megoldás jutott eszembe.
1; minden csomaghoz lenne külön config file ami tartalmazza a config kapcsolokat. Ha nem létezik a file akkor elöbb létre kell hozni.
2; alapból egy sima "./configure" parancs lefutna mindenféle kapcsoló nélkül HA nem létezik egy konfig file. Ha létezik akkor a meghatározott kapcsolok alapján futna le.
Kérdésem az lenne, hogy szerintetek melyik a jobb megoldás. Személy szerint, én a 2-dik megoldást jobbnak tartom. Ha esetleg van valaknek saját ötlete szívesen fogadom. :)
- A hozzászóláshoz be kell jelentkezni
Későbbiek miatt inkább egy környezeti változóban tárolnám csomagonként egy-egy konfigfájlban. Már csak azért, mert pl. CFLAGS-ot is akarsz majd, CXXFLAGS-ot, LDFLAGS-ot, stb. Ezekhez azért durva lenne csomagonként egy-egy fájl.
- A hozzászóláshoz be kell jelentkezni
En megneznem mas csomagkezelok (peldaul Gentoo Portage, BSD Ports, stb.) hogyan csinaljak ezeket.
Ami biztos nem jo megoldas, az a ./configure lefuttatasa kapcsolok nelkul. Nagyon sokfele csomag van, nagyon sokfele elbokott defaulttal. Ha a rendszerednek nincs egy standard konyvtarfelepitese, hanem minden "ahogy esik ugy puffan" alapon kerul fel, az kovethetetlen es hasznalhatatlan rendszert eredmenyez. Legrosszabb esetben is a --prefix, --sysconfdir es hasonlo kapcsolokat meg KELL adni a rendszerben, hogy mindig kovetheto, kitalalhato legyen mi hova kerul.
Amire kulonosen ugyelned kell, az a teny, hogy ha egy forrasfaban van egy "configure" nevu vegrehajthato allomany, az nem jelenti implicite azt, hogy az egy autoconf/automake alapokon gyartott konfiguracios script. Nagyon sok olyan csomag van, ahol ez az allitas egyszeruen nem igaz.
Amit en javaslok: legyenek alap opciok minden csomaghoz magaban a csomag/build leirojaban, amik fixek, nem valtoztathatok user oldalrol, nem is konfiguralhatoak. Ezek az alapvetesek, ami alapjan legalabb valamilyen QA-t lehet biztositani. Aztan, ha akarsz user-specified opciokat tamogatni, akkor arra legyen egy kulon fajl, amiben csak azokat az opciokat tarolod, amik elternek a defaulttol.
Egyebkent erosen javaslom, hogy minden ilyen kerdesed felmerulese eseteben eloszor nezd meg, hogy mukodik az adott build kornyezet, esetedben az autoconf/automake alapu rendszer. Gondold at alaposan, tizszer, szazszor, hogy ez mit jelent, milyen buktatoi lehetnek. Nezd meg, masok hogyan csinaljak, es gondold at, vagy kerdezz ra, miert igy csinaljak. Tanulj masoktol, mert mar sokan megoldottak azokat a problemakat, amikkel te szembesulsz, nincs olyan kerdes, amit mar fel ne tettek volna a temaban. Ne akarj mindent egyedul kitalalni, otletek tekinteteben nyugodtan tamaszkodj mas projektekre, valoszinuleg nem veletlenul hasznaljak azt a rendszert, amit.
--
Ki oda vágyik, hol száll a galamb, elszalasztja a kincset itt alant:
()=()
('Y') Blog | @hron84
C . C Üzemeltető macik
()_()
- A hozzászóláshoz be kell jelentkezni
Nem a Gentoo-t és nem a BSD-t nézném meg a helyében, mivel az ebuild-ek python alapúak, a ports-fa pedig Makefile-ok. Inkább Arch vagy Slackware.
- A hozzászóláshoz be kell jelentkezni
Nem azt mondtam, hogy fogja meg a vagolapot, es ollozza ossze maganak. De ezek jol fejlett, tisztan forrasalapu rendszerek, az alapotletuk pedig tokeletesen fuggetlen attol, hogy Pythonban vagy BSD Make-ban vannak irva, raadasul a tarolasi modjukban sincs semmi, ami jellemzo lenne az adott nyelvre (nem python marshallingban tarolja a cuccot a Portage pl, es a Ports altal letett fajloknak sincs semmi relaciojuk a Make fajlokhoz).
FYI: az ebuildek egyebkent bash script alapuak, barmily meglepo is ez. Sehol, semmilyen koze nincs a python nyelvhez az ebuildoknak, ugyanis egy bash alapu keretrendszer futtatja oket.
--
Ki oda vágyik, hol száll a galamb, elszalasztja a kincset itt alant:
()=()
('Y') Blog | @hron84
C . C Üzemeltető macik
()_()
- A hozzászóláshoz be kell jelentkezni
Akkor csak a portage-rendszer python? Nem használtam gentoo-t számottevő ideig, az ebuild-ek meg... hát, az valóban szinte nyelvfüggetlen. Akkor legyen a Gentoo.
Viszont a FreeBSD-t továbbra se javallom, nézd meg a mpd Makefile-ját! Ötleteket valóban lehet meríteni, de azért kézikönyv nélkül a különböző okosságokra megmondani, hogy mi mit csinál, kicsit meredek :) Ellenkező véglet: xprop.
- A hozzászóláshoz be kell jelentkezni
Nem tudom, talan nem fogalmaztam vilagosan.
Nem azt mondtam, hogy nezegesse a Makefajlokat, es az alapja epitse meg a rendszeret. De a FreeBSD, a Gentoo, az Arch es a tobbi forrasalapu rendszer mind-mind szembekerult mar azzal a problemakorrel, amivel most kuzd. Ha megnezem, hogy mas rendszerek milyen elmeleti alapokon indultak neki a megoldasnak, attol en meg megirhatom Rubyban vagy PHP-ban az implementaciot, mert baromira nem az szamit, mi mennyire fosul van megirva, vagy mennyire lassu, hatekonytalan a mukodese. Fohosunknek jelen pillanatban az elmeleti alapokkal van problemaja, kommentjebol lathatoan sut az, hogy meg sosem gondolkodott el azon, hogyan epul fel egy Linux rendszer az alapjaitol. Az LFS konyv felutese talan megtortent, de nem probalta meg a leirtak okait kutatni, a mogottes logikat felfedezni, hogy mitol lesz egy rendszer egyseges egesz, es nem egy nyuves Frankenstein.
Ha a BSD modszere alapjan kialakit egy tarolasi strukturat, attol meg nem kotelezo neki sem a mpd sem az xprop Makefajljait alapul venni a sajat csomagjaihoz. Elobb jussunk el oda, hogy taroljunk opciokat _valahogyan_, epitsunk ki egy adatbazist, es utana vitatkozzunk a tartalmarol.
--
Ki oda vágyik, hol száll a galamb, elszalasztja a kincset itt alant:
()=()
('Y') Blog | @hron84
C . C Üzemeltető macik
()_()
- A hozzászóláshoz be kell jelentkezni
Mindenki jó ötleteket és tanácsokat adott. Mindenkép lehet tanulni belölük. Mindenféle ötlet és segítségnek örülök. Egyébként én se voltam valami pontos, 2. "ötlet" amit írtam nem voltam elég pontos. Ez ügyben szeretnék elnézés kérni töletek. Nem arra gondoltam, hogy csak simán "./configure" azt kész. Hanem, Lennének alap kapcsolok ami minden csomagra egyaránt forgatásában benne lenne. Pl.: ./configure --prefix=/usr --localstatedir=/var --sysconfdir=/etc CFLAGS="-O3" -march=pentium2 -pipe" CXXFLAGS=$CFLAGS make -j3 ezek egységesek lennének minden csomagnál. A külön névre szóló config file tartalmazná az egyébb kapcsolokat. Lehet, ez is rossz ötlet.
ui: Amikor neki kezdtem a "project"-nek nem terveztem semmi extrát. Letölt, telepít, töröl. Még patch-t se terveztem. Egy tényleg egyszerű kis telepítőre gondoltam. Föleg, mivel a bash nyelvet se regében keztem itthon tanulgatni. De úgy gondolom, egész jól halad a csomagkezelőm. Nem kell, hogy jobban müködjön. Csak szeretnék egy saját viszonylag jól müködő csomagkezelőt. De a legfőbb oka ennek a bash tanulás és még mélyebben megismerni a rendszert.
- A hozzászóláshoz be kell jelentkezni
"Lennének alap kapcsolok ami minden csomagra egyaránt forgatásában benne lenne"
CFLAGS, CXXFLAGS lehetoleg ne legyen kozos, a make -j3 plane ne legyen az. Nagyon sok csomag nincs felkeszitve parhuzamos forditasra, sok mas pedig kulonfele CFLAGS-okon hasal meg. E temaban nagyon sokat lehet tanulni az Autotools Mythbusters-bol, bar kicsit mas teruletekre fokuszal, azert nagyon sokat elmond az autoconf/automake rendszerek mukodeserol. Az irok kozott van az a Diego Elio "Flameeyes" Pettenò, aki az egyik legregebbi Gentoo csomagkeszitok egyike. Ha valakinek a tudasara biztosan tamaszkodhatsz, az az ove. Tobb opensource csomaghoz irt mar build scriptet mint amennyit te fel tudsz sorolni.
Ha nagyon, sot bantoan oszinte akarnek lenni, senkit nem engednek a csomagkezeles kozelebe, aki nem huzott le legalabb 2 evet advanced Gentoo felhasznalokent, es nem hagyott mar maga mogott minimum 10 ebuildot. De ez termeszetesen az en hibam, en meg a hobbiprojektjeimben is maximalista vagyok, minosegre torekszem akkor is, ha senki sem fogja hasznalni. Na de ennyit rolam. Amit igazabol akarok mondani: a csomagkezeles messze bonyolultabb dolog, mint leforgatni egy csomagot. Tul sokfele csomag van, tul sok lehetoseg, nagyon nehez ezekhez egy jo atlathato feluletet biztositani.
Az igazsag az, hogy szurkolok neked, hogy egy faja kis rendszer jojjon ossze a cuccbol, es pont ezert probalok minden tolem telheto segitseget megadni. Aztan lehet, hogy a vegen meg sikerul.
--
Ki oda vágyik, hol száll a galamb, elszalasztja a kincset itt alant:
()=()
('Y') Blog | @hron84
C . C Üzemeltető macik
()_()
- A hozzászóláshoz be kell jelentkezni
Akkor a legegyszerűbb megoldást talán az jelenti, hogy lfs csomagok telepítő beállításait rakom bele egy névre szóló config file-ba. Így biztos nem lesz gubanc. Esetleg ha más kapcsolot is szükségem van akkor csak hozzá kell majd írni. Nem túl praktikus megoldás de müködöképes.
- A hozzászóláshoz be kell jelentkezni
Én értem, mit mondasz. Ebből viszont az következik, hogy én nem fogalmaztam világosan :)
Azt akartam mondani, ha bash-alapon akarja megcsinálni, akkor érdemesebb bash-szerű dolgokat nézegetni. A Makefile teljesen (vagy legalábbis jelentősen) más, mint a bash, tehát abból azért az ötleteket kimazsolázni nem biztos, hogy annyira egyszerű. Az xprop-ot azért hoztam példának, hogy egy full egyszerű program/csomag Makefile-ja egyszerűen csak ennyi, gyakorlatilag (a kérdező szempontjából) értékelhető információ nélkül, míg az ArchLinux-féle xprop-ból kicsit esélyesebb.
Az mpd-t meg "elrettentésképpen" hoztam - doksi-olvasgatás nélkül nem biztos, hogy triviális, hogy a MAD_CONFIGURE_ENABLE=mad
mire is szolgál (ha a MAD opció be van kapcsolva, akkor a configure kap egy --enable-mad -ot, ha kikapcsolt, akkor egy --disable-mad -ot), míg a Arch-féle mpd kicsit olvashatóbb, áttekinthetőbb, bash-értőknek könnyen feldolgozható.
- A hozzászóláshoz be kell jelentkezni
Pont ezert mondtam a Gentoo Portage-t is, eleg kozel all a bash-hez... amugy a make file-ok emlitett resze is felfoghato kornyezeti valtozokent, amit a Gentoo Portage is hasznal. Mondom, elveikben minimalisan kulonboznek, kulonosen azert, mert a Portage a BSD-s Ports es PkgSRC rendszerektol tanult.
A Portage eseteben se biztos, hogy egy IUSE="mad" az reszben egy --enable-mad jellegu kapcsolot jelent, plusz egy fuggoseget is.
--
Ki oda vágyik, hol száll a galamb, elszalasztja a kincset itt alant:
()=()
('Y') Blog | @hron84
C . C Üzemeltető macik
()_()
- A hozzászóláshoz be kell jelentkezni
Elveikben valóban erőteljesen hasonlóak (talán még több is, mint hasonlóak), de "bash-szemmel" egy ebuild-et sokkal könnyebb (szerintem) megérteni, mint egy bsd-s Makefile-t. Egy PKGBUILD-et meg még könnyebb megérteni :)
- A hozzászóláshoz be kell jelentkezni
Az Arch ill. Frugalware által használt "makepkg" rendszer konkrétan bash script. Hasonló dolgot akar, mint a kérdező, azzal a különbséggel, hogy ezeknek a végeredménye egy tarball. Kezel függőségeket, azokat is buildeli, ha kell... A végeredményt kell átírni, hogy ne tarballt csináljon. Vagy szimplán csak átnézni, hogy mit hogy old meg...
- A hozzászóláshoz be kell jelentkezni
Konfigulálás megvan. Felhasználom az lfs linux csomag beállításait (alapnak). Az a problémám, hogy a konfig filet létrehoztam, de fogalmam sincs, hogy adjam meg neki a nem futt le az egyik program hiba nélkül, akkor ne folytassa. pl patch-nél ha nem sikerült a patch akkor ne ugorjon a következő parancsra. Esetleg ebbe tudnátok segíteni?
- A hozzászóláshoz be kell jelentkezni
Fazisokat kell csinalni, prepare, configure, build, install (ezt fuggvenyekkel konnyen szet lehet szervezni), a fazisokon belul && -el ossze is kapcsolhatod a parancsokat, de ez igazabol felesleges, eleg, ha a fazis maga megdoglik, es nem ugrasz a kovetkezo fazisra.
Viszont, ha szep reportingot is szeretnel, akkor minden egyes fazis lefutasa utan if-fel vizsgalni kell a $? erteket, es relevans hibauzenetet megjeleniteni a usernek.
--
Ki oda vágyik, hol száll a galamb, elszalasztja a kincset itt alant:
()=()
('Y') Blog | @hron84
C . C Üzemeltető macik
()_()
- A hozzászóláshoz be kell jelentkezni
Ez nekem nem teljesen világos. Addig rendben van, hogy létrehozom a fügvényeket. Szép sorba létre is hoztam őket és mindegyikbe beleraktam mit kell lefuttatni. Ez utáni részen akadtam el. Érteni értem mit kéne csinálni csak azt nem tudom hogyan :(
- A hozzászóláshoz be kell jelentkezni
prepare () {
...
}
configure() {
...
}
build() {
...
}
install() {
...
}
prepare
if [ $? -ne 0 ]; then
echo "Nagy gáz volt a prepare közben"
exit 1
fi
configure
if [ $? -ne 0 ]; then
echo "Nagy gáz configure-kor"
exit 1
fi
...
Kb. ennyi.
- A hozzászóláshoz be kell jelentkezni
Sziasztok!
Most csinálom a source.list listának frissítésének az ellenörzését. A következőbe kérném a segítségetek.
A frissítés a csomagok hivatalos szerveréről történik ill az elenörzése is. A következő képpen:
curl -L -# http://download.savannah.gnu.org/releases/acl/ | tr "<>" "\ " | grep "acl" | awk '{print $12}' | grep -v ".sig" | tail -n 1
Eddig rendben is van de szeretném a "tar.gz" a tömörítés leszedni úgy, hogy csak a csomag és a verzió maradjon. Normál esetbe a végére raknám a "cut -c 1-10" de ezzel az a baj, ha verzió változik akkor nem fogja helyesen mutatni. Próbáltam a grep -v "tar.gz"-vel de nem jutottam eredményre.
- A hozzászóláshoz be kell jelentkezni
sed 's/\.tar\.gz//'
Egyebkent nem biztos, hogy ez igy jo otlet. Nem minden forrascsomag van olyan szerveren, ahol van directory lista. Nem tudom, mire hasznalod ezt az ellenorzest, de jobb helyeken a csomag meretet es MD5/SHA1 hashet szokas letarolni es azt csekkolni. A meret egeszen konnyen beszerezheto, ha -I kapcsoloval HEAD kerest kuldesz, a Content-Length fejlecben erkezik a meret.
--
Ki oda vágyik, hol száll a galamb, elszalasztja a kincset itt alant:
()=()
('Y') Blog | @hron84
C . C Üzemeltető macik
()_()
- A hozzászóláshoz be kell jelentkezni
Arra használom, hogy megtudjam van e újabb csomag belőle. A gcc-nél másabb volt mert ott minden újabb verzió új mappába is kertül. Ott lekértem az újabb mappát és útána meg a mappán belül az új forrást. A mappa volt az összehasonlitóm a telepített csomaggal.
- A hozzászóláshoz be kell jelentkezni
Changelog, kexcsokolom. Annak sokkal fixebb a formatuma.
--
Ki oda vágyik, hol száll a galamb, elszalasztja a kincset itt alant:
()=()
('Y') Blog | @hron84
C . C Üzemeltető macik
()_()
- A hozzászóláshoz be kell jelentkezni
Köszönöm a tanácsot. Kiprobálom, hogy ez mennyire lesz jó modszer. Ha nem akkor modosítom a changelog-ra.
- A hozzászóláshoz be kell jelentkezni
Már ahol van Changelog :)
Amikor LFS-sel játszottam, mindegyik honlapra kreáltam egy w3m-alapú szkriptet, ami a honlap (html) alapján kiszedi a legfrissebb verziószámot.
- A hozzászóláshoz be kell jelentkezni
Én is hasonló dolgot csinálok. Esetleg megvan még a script? Vagy tudnál írni egy példát, hogy te hogyan csináltad? Sajnos, az én modszerem 1-2 helyen nem igazán müködik. Pl.: bzip.org/1.0.6/bzip2-1.0.6.tar.gz de találkoztam olyannal is hogy nem a legutolsó és nem is az első volt a legfrissebb hanem az utolsó elötti. Ezeket te hogyan tudtad korigálni?
- A hozzászóláshoz be kell jelentkezni
Elo kell szedni a verzioszamot (nem tul bonyolult), es sort -t. -n
--
Ki oda vágyik, hol száll a galamb, elszalasztja a kincset itt alant:
()=()
('Y') Blog | @hron84
C . C Üzemeltető macik
()_()
- A hozzászóláshoz be kell jelentkezni
Ha elő tudod szedni, akkor egyszerű. Ha meg nem tudod lekérni a listát, akkor meg vagy lőve. Ekkor a html-ből szedheted ki :)
A sort -t. -n nem jó:
$ cat lista
1.10
1.9
1.10.2
1.9.2
$ sort -t. -n lista
1.10
1.10.2
1.9
1.9.2
A sort-nak egyébként van egy "-V" (--version-sort) opciója, azt javaslom inkább :)
- A hozzászóláshoz be kell jelentkezni
Sajnos, lesz olyan amit majd a html-ből kell kiszedni. Egyébként köszi a script-et. Átnézegettem, jók lettek. Egy kezdőnek egész hasznos infokat tartalmaz már amenyire ki tud rajta igazodni :)
- A hozzászóláshoz be kell jelentkezni
html-ből hogyan lehet kiszedni az infót?
- A hozzászóláshoz be kell jelentkezni
Kiparzolod sed-del, grep-pel, awk-val. Javaslom az AWK-val valo ismerkedest egyebkent, shell programozashoz nelkulozhetetlen, es nagyon powerful szovegfeldolgozo nyelv.
--
Ki oda vágyik, hol száll a galamb, elszalasztja a kincset itt alant:
()=()
('Y') Blog | @hron84
C . C Üzemeltető macik
()_()
- A hozzászóláshoz be kell jelentkezni
- A hozzászóláshoz be kell jelentkezni
- A hozzászóláshoz be kell jelentkezni
- deduplicated -
- A hozzászóláshoz be kell jelentkezni
curl -sL http://download.savannah.gnu.org/releases/acl/ |\
awk -F'\"' '/acl.*.gz</ {gsub(/.tar.gz/,"",$8);s=$8;}END{print s}'
- A hozzászóláshoz be kell jelentkezni
Sziasztok !
Arra gondoltam, hogy a telepítés befejezés útán belerakatom a installpkg.list-be a feltelepített csomagot verzió számmal együtt. Ez eddig rendben is van, de ha csak frissítésről van szó akkor, ne adja újból hozzá hanem cserélje le "régit" az új verzióval. Arra gondoltam, echo-val rakatnám bele és if-el szétpontanám ha létezik akkor csere ha nem akkor addja hozzá. Azt viszont nem tudom, hogy esetleg sed-el nem e lehet egyszerübben megoldani. Ha igen akkor hogyan? Ti melyiket ajánjátok?
- A hozzászóláshoz be kell jelentkezni
Csináld úgy, ahogy sok más rendszer is csinálja: létrehozol egy /var/db/pkg könyvtárat, és ebbe pakolsz könyvtárakat, pl. firefox-32.0, ami arra utal, hogy a firefox 32.0 van telepítve. Minden ilyen könyvtárban lenne egy installed-files, meg ilyesmi fájlok. Nézd meg a Slackware-nél, ott is így csinálják (úgy rémlik).
- A hozzászóláshoz be kell jelentkezni
Gentoo is igy csinalja... (oke, abbahagytam.)
--
Ki oda vágyik, hol száll a galamb, elszalasztja a kincset itt alant:
()=()
('Y') Blog | @hron84
C . C Üzemeltető macik
()_()
- A hozzászóláshoz be kell jelentkezni
Akkor a gentoo is, azt nem tudtam. Slackware-t használtam régebben huzamosabb ideig, azért tudtam azt mondani.
- A hozzászóláshoz be kell jelentkezni
Funtoo is így csinálja. Ide pakol mindent ami alapján telepített.(keywords use stb). Egyébként igazatok van. Fölösleges külön nementenem egy file-ba a telepített csoagokat és verzíoit. Mivel telepített csomagról létrehoz egy filet, amibe van a törlésre használt elérési útvonalak. Célszerübb lenne ezt felhasználni. Köszi a segítséget.
- A hozzászóláshoz be kell jelentkezni
Funtoo = Gentoo improved.
--
Ki oda vágyik, hol száll a galamb, elszalasztja a kincset itt alant:
()=()
('Y') Blog | @hron84
C . C Üzemeltető macik
()_()
- A hozzászóláshoz be kell jelentkezni
Sziasztok !
Már csak az "update" van hátra. Elösször arra gondoltam, hogy lesz egy külön script ami a csomagok frissitéseit fogyja figyelni. Nekem csak annyi lett volna a dolgom, hogy ha dob ki frissebbet akkor átírom a source.list file megfelelő sorát és lehet is frissíteni. De mivel ez a project nem annyira egyszerű csomagkezelő mint aminek indult. Arra gondoltam, jó lenne ha a source.list bejegyzéseit is modosítani.
Abba kérnék segítséget, hogy ezt hogyan tudnám kivitelezni.
A source.list tartalmazza a csomagok teljes elérési utvonalát.Egymás alatt felsorolva. Pl.: http://robotlab.itk.ppke.hu/gcc/releases/gcc-4.9.1/gcc-4.9.1.tar.gz
van egy külön script ami figyeli a verziót. Szóval arrol lenne szó, ha gcc-ből megjelenik egy frissebb pl:gcc-4.9.2 akkor hogyan tudnám a source.listbe átírni így (http://robotlab.itk.ppke.hu/gcc/releases/gcc-4.9.2/gcc-4.9.2.tar.gz ) ebbe az esetbe 2 helyen is átkell írni.
- A hozzászóláshoz be kell jelentkezni
Változók. A frissülésfigyelőd mikor lefut, létrehoz egy gcc_version
nevű változót, amiben tárolja a gcc legfrissebb verzióját, a sources.list
-edben meg http://robotlab.itk.ppke.hu/gcc/releases/gcc-${gcc_version}/gcc-${gcc_version}.tar.gz
van, oszt' kalap, nem kell senkinek semmit sehol átírogatni.
- A hozzászóláshoz be kell jelentkezni
Sziasztok !
Már a csomagokat csinálom. Elősször, az lfs linux csomagjait csinálom. De viszont, pár helyről nem tudom hogyan lehet kinyerni az infót a csomagról. Ebbe szeretnék még segítséget kérni.
Az egyik ilyen: Expat - http://expat.sourceforge.net/
Expect http://expect.sourceforge.net/
bzip2 http://www.bzip.org/downloads.html
Hogyan tudom kinyerni az infot?
- A hozzászóláshoz be kell jelentkezni
http://sourceforge.net/projects/expat/files/expat/
http://sourceforge.net/projects/expect/files/Expect/
bzip.org: ha más nem, akkor "grep 'current version is'".
- A hozzászóláshoz be kell jelentkezni
Nem birom nem megemliteni: a legtobb csomagkeszito a puszta ket kezevel potyogi be az epp aktualis verziokat a csomagfajlokba. Nem veletlenul: a weboldalak megszunhetnek, megvaltozhatnak, elkoltozhetnek, fuggeni toluk a leheto legrosszabb otlet. Ne legy lusta.
--
Ki oda vágyik, hol száll a galamb, elszalasztja a kincset itt alant:
()=()
('Y') Blog | @hron84
C . C Üzemeltető macik
()_()
- A hozzászóláshoz be kell jelentkezni
De ha csak egy csomagkészítő lesz ezer csomagra? Nem fog ráérni minden nap ezer honlapot átnyálazni, ilyenkor jön jól az ajtómatika :)
- A hozzászóláshoz be kell jelentkezni
Ez így van. Ezért van úgy megtervezve a config file-ok is, hogy egyszer kell csak megcsinálni öket. Más csomagkezelővel ellentétbe nekem kell foglalkoznom minden új frissítésnél újra létrehozni config filet.
- A hozzászóláshoz be kell jelentkezni
Egy verziószámot kell(ene) átírni, meg mondjuk egy md5sum-ot.
- A hozzászóláshoz be kell jelentkezni
Már meg van oldva. Mondjuk, md5sum-ot nem tartalmaz. Jelenleg, 21 csomag érhető el. Most az Expect csomag lekérésével kinlodok.
- A hozzászóláshoz be kell jelentkezni
Hi!
Frugalware alatt az expect FrugalBuild-je.
A FrugalBuild-ben van egy up2date rész, ami felel a verzió ellenőrzésért. Naponta párszor automatikusan ellenőrzi a verziókat, az eredmény ilyen. Mint látod elég sok a "There was no output!" jelzés, azokban a csomagokban már törött az up2date, javítani kellene. hrgy84-nek tehát igaza van, hogy az automatikus verzió ellenőrzés is plusz munka, de inkább uzsolt megközelítése a jobb, sokat is tud segíteni. (Frugalware-nál maradva: 7101 csomagból 682-ben törött az up2date, a többinél releváns infót ad.)
expect-nél maradva, abban nem látod az up2date-t, mert azt a sourceforge.sh -ban van definiálva (amely megoldás illik az összes sourceforge csomagra:) Van még több sourceforge-hoz hasonló séma.
Ez egy egyszerűbb up2date, hogy egyértelmű legyen: unzip.
- A hozzászóláshoz be kell jelentkezni
" Ezért van úgy megtervezve a config file-ok is, hogy egyszer kell csak megcsinálni öket."
Hiszed te. Holnap az expat wordpressre koltozik, a fajlokat kipakoljak s3-ba, ahol nem lehet oket listazni. Holnaputan az openssl apache projektte valik, megvaltozik a mappaszerkezet, a weboldal szerkezete, es a fajlnevek felepitese.
Nem. Egy csomagkezelo sosem arrol szol, hogy egyszer megcsinalom, oszt jo'van. Hidd el, naladnal sokkal okosabb emberek is atmentek mar ezeken a tevedeseken, nem hiszem, hogy te talalnad itten fel a melegvizet, ahhoz mar tulontul sok letezo rendszer es letezo csomagkezelo van.
Egy csomagkezelo csak annyira jo, amennyire karbantartjak a csomagjait. Marpedig egy scriptelt csomag akkor lehet a legjobb, ha minel kevesebb dologtol fugg. Ha hirtelen kitalalja a komplett GNU projekt, hogy marpedig ok kikoltoznek S3-ba, ahol nem kapcsoljak be a fajlok listazasat, akkor nagyon megszivod, mert nem egy csomag, hanem vagy harminc-otven kerul hirtelen ki a latokorodbol, es vaghatsz bele a GNU honlap parzolasaba - ha egyaltalan ugy elo tudod szedni, es parhuzamosan nem kezdik mondjuk valami javascriptes mokaval kigeneralni a lapokat valami S3-as API alapjan formazatlan JSON-bol, amit eleg problemas bash-bol kezelgetni.
Felre ne erts, amit csinalsz, az ujjgyakorlatnak tokeletes. Rengeteg dolgot megtanulhatsz altala. De meg csak veletlenul se tekints ugy erre a projektre, hogy barmi haszna van. Ahogy no a csomagok szama, egyre tobb karbantartasi feladatot csinalsz magadnak, raadasul minel bonyolultabban van megoldva a csomagok felepitese es mukodese, annal bonyolultabbakka valnak a karbantartasi feladataid is. Egy verzioszamot atirni: a piece of cake (1 perc). Egy komplett parzolo scriptet atnezni/javitani/atirni: pain in the ass (fel-egy ora). Es nem lesz mindig idod ezeket maintenelni.
--
Ki oda vágyik, hol száll a galamb, elszalasztja a kincset itt alant:
()=()
('Y') Blog | @hron84
C . C Üzemeltető macik
()_()
- A hozzászóláshoz be kell jelentkezni
Igaz, ha valamelyik honlap megszünik vagy költözik akkor megszívtam hacsak, nem találok egy "alternativ" oldalt ahonnét tudom folytatni. Ha modjuk "http://ftp.gnu.org/gnu/" megszűnik akkor felborul minden. Mivel elég sok csomagot innét kértem le. Számoltam ilyen lehetöséggel.
Mondjuk elég sokmindent tanultam így az első projetembe. Ennek egy része a csomagezelők menyire összetett, más részt a "programozásról" jobban mondva a script írásról. Valahol olvastam, hogy program írása elött, érdemes papírt és ceruzát ragadni és vázlatot készíteni mielött nekilátunk az program írásnak. Eleinte hülyeségnek tartottam, de mostmár úgy gondolom, hogy van benne vami. Töletek is sokat tanultam amiért hálás is vagyok. Mivel vizuális tipús vagyok így könyebben tanulok másoktól. Tudom, ez a project nem épp a legjobb legalábbis, kivitelezésben és megtervezésben. De elmodhatom, hogy az enyém. Mégha nem is igazán lehetnék rá büszke. :) Ígyekeztem, saját megoldásokat találni és nem koppintani másokat. Nem egy emerge,rmp,pacman vagy egyébb más csomagkezelőt akartam bashba átírni. Ez egy saját független megközelítés annak elenére, hogy akadha hasonlonló vagy megegyező megoldás más csomagkezelővel. Lassan kész a project-em. Tudom elég lassan készült el, de kevés a szabadídőm.
Köszönöm mégegyszer mindenkinek a segítségét és a tanítását.
ui.: Már ki van gondolva a következő project is. Természetesen, ez is olyan project lesz amihez nem értek. Nem tudom pontossan hogyan is müködik valojában. De remélhetőleg ebből is jó dolog fog majd kisülni min t a mostaniból. :)
- A hozzászóláshoz be kell jelentkezni
Ha magadnak csinálsz Linuxot, akkor tudni fogod, mikor jön el az ideje, hogy valamiből már kell az új. Ilyenkor lehet, hogy megúszod az adott csomag újrafordításával, vagy max. néhány függőségével. Lehet olyan is, hogy egy csomag miatt az egészet az eljétől újra kell fordítani. Ilyenkor jön jól, ha már az egész művelet le van scriptelve, a forráscsomagok is átalakírva olyanra, hogy ha új forrást teszel, csak a verziószámot írd át.
-fs-
Az olyan tárgyakat, amik képesek az mc futtatására, munkaeszköznek nevezzük.
/usr/lib/libasound.so --gágágágá --lilaliba
- A hozzászóláshoz be kell jelentkezni
Ezt tudom. De az egésznek az egyik lényege, hogy "egyedi" legyen. Másik, jobban megismerjem bash nyelvet. Az egész projectnek a tanulás a célja leginkább. Nem tervezem, hogy publikálom.
- A hozzászóláshoz be kell jelentkezni
Kozben fentebb reagaltam, anelkul hogy ezt a kommentedet lattam volna. Mindegy, amit mondtam, tartom.
Alapvetoen egy jo otlet, de az a problema vele, hogy ha meg nem is publikalod, akkor sincs semmi haszna, meg szamodra sem. Tobb gondod lenne vele, ha ez alapjan akarnal barmit is csinalni (akar csak a sajat kornyezetedben, pl laptop), mintha nekiulnel megismerni mondjuk az RPM alapu csomagok szerkezetet, es elkezdened kitalalni, hogyan mukodik a csomagkeszites.
Ertettem es megertettem a projekt celjat, azonban szerintem egy ilyen tanulo projektnek az lenne a celja, hogy minel tobb _hasznos_ tudast szerezz altala. Ebbol is egeszen sokat tanulhatsz, sot, de ha egy olyan letezo rendszerrel kezdenel el foglalkozni, amit tobb projekt is hasznal, abbol meg tobbet profitalhatnal, raadasul szinte azonnal be is szallhatnal valamelyik projektbe csomag-maintainernek. Jelenleg eleg sok projektben eleg sok csomag arva, nincs gazdaja, nincs aki karbantartana, meg az olyan kezdoket is nagyon szivesen latnak, mint amilyen te vagy. Minden projektben akad egy-ket srac, aki szivesen a szarnyai ala veszi a kezdoket, es kitanitja. De ehhez szukseges az is, hogy ne csak a sajat - adott esetben hibas - logikadat lasd at, hanem kepes legyel egy fokkal bonyolultabb rendszert is attekinteni. Lepj ki minel tobbszor a komfortzonadbol, vagj bele ismeretlen rendszerek felterkepezesebe, abbol tanulod a legtobbet. Nem veletlenul spameltelek folyamatosan, hogy melyik rendszert erdemes atnezni, hogy mi-hogy mukodik benne.
Kicsit az az erzesem, hogy sikerult szamottevo lovaglotudas nelkul forditva megulni egy olyan pacit, amit nem is olyan egyszeru kezelni. Nem rakhatsz ra nyerget, az allatok jogai tiltjak, hogy sarkantyuzd, es a kotofekre egyszeruen nem reagal. Elobb meg kellene tanulni lovagolni...
--
Ki oda vágyik, hol száll a galamb, elszalasztja a kincset itt alant:
()=()
('Y') Blog | @hron84
C . C Üzemeltető macik
()_()
- A hozzászóláshoz be kell jelentkezni
A bzip2-1.0.6 fordításánál kicsit kókányolni kell, a "make install [PREFIX|DESTDIR]=..." valahogy nem igazán akar működni. Nekem így sikerült kicsikarnom a kívánt eredményt:
# cat bzip2.system.build
...
...
./configure --prefix= --bindir=/bin --libexecdir=/usr/libexec --datarootdir=/usr/share --mandir=/usr/share/man --bindir=/bin --includedir=/usr/include
sed -i 's/-O2/-O3 -funroll-all-loops -minline-all-stringops -fomit-frame-pointer/pg' Makefile
#sed -i 's/\/man\//\/usr\/share\/man/pg' Makefile
sed -i 's/-O2/-O3 -funroll-all-loops -minline-all-stringops -fomit-frame-pointer/pg' Makefile-libbz2_so
make -f Makefile-libbz2_so
cp libbz2.so* /tmp/$TARGET_PKG/lib
#make clean
make -j2
make install PREFIX=/tmp/$TARGET_PKG
cp libbz2.so* /tmp/$TARGET_PKG/lib
mkdir -p /tmp/$TARGET_PKG/usr/share
cp --recursive /tmp/$TARGET_PKG/include /tmp/$TARGET_PKG/usr
cp --recursive /tmp/$TARGET_PKG/man /tmp/$TARGET_PKG/usr/share
rm -r /tmp/$TARGET_PKG/include
rm -r /tmp/$TARGET_PKG/man
cd /tmp/$TARGET_PKG/lib
rm libbz2.so.1.0
ln -s libbz2.so.1.0.6 libbz2.so.1.0
cd /tmp/$TARGET_PKG/bin
rm bzcmp
rm bzegrep
rm bzfgrep
rm bzless
ln -s bzdiff bzcmp
ln -s bzgrep bzegrep
ln -s bzgrep bzfgrep
ln -s bzmore less
...
...
-fs-
Az olyan tárgyakat, amik képesek az mc futtatására, munkaeszköznek nevezzük.
/usr/lib/libasound.so --gágágágá --lilaliba
- A hozzászóláshoz be kell jelentkezni
Sziasztok.
Arra gondoltam, az update parancsra (lekérdezés alatt) mutatná hány százalék van kész. Ezt hogyan tudnám kivitelezni? Mondjuk, a csík állhatna ebből "#"
- A hozzászóláshoz be kell jelentkezni
#define szazalek
--
Ki oda vágyik, hol száll a galamb, elszalasztja a kincset itt alant:
()=()
('Y') Blog | @hron84
C . C Üzemeltető macik
()_()
- A hozzászóláshoz be kell jelentkezni
Márhogy pl. 10 frissítendő csomagból? Vagy a fordítás hány százaléka?
- A hozzászóláshoz be kell jelentkezni
Ez a file miközben futt hol tart http://pastebin.com/PT46LusN
- A hozzászóláshoz be kell jelentkezni
Azért ez nem olyan vészes. Megszámolod, hogy hány írás van a pkgversion-be (grep '$pkgversion' $0 | wc -l
), utána fogsz egy változót, és minden egyes lekérdezésnél megnöveled eggyel, a kettő számot elosztod egymással, szorzod százzal és szevasz.
- A hozzászóláshoz be kell jelentkezni
Az a baj, hogy ez még bövülni fog. Akkor inkább egy egyszerű szöveges kimenetet adok neki.
- A hozzászóláshoz be kell jelentkezni
És az miért baj? Ha rendesen csinálnád meg, akkor sokkal egyszerűbb lenne bővíteni.
Pl.
#!/usr/bin/env bash
pkgversion="..."
source="..."
# $1 - homepage
# $* - szűrés
bovites() {
hp=$1 ; shift
curl -L -s $hp | $* >> ${pkgversion}
echo $hp >> ${source}
echo "$((szamlalo*100/osszes))% kész"
szamlalo=$((szamlalo+1))
}
szamlalo=1
osszes=`grep "bovites " $0 | wc -l`
bovites http://download.savannah.gnu.org/releases/acl/ 'tr "<>" "\ " | grep "acl" | awk '{print $12}' | grep -v ".sig" | sort -V | tail -n 1'
bovites http://ftp.gnu.org/gnu/gcc/ 'tr "<>" "\ " | grep "gcc" | awk '{print $12}' | tail -n 1'
satöbbi
- A hozzászóláshoz be kell jelentkezni
A szokozt idezojelek kozott nem kell megvedeni.
--
Ki oda vágyik, hol száll a galamb, elszalasztja a kincset itt alant:
()=()
('Y') Blog | @hron84
C . C Üzemeltető macik
()_()
- A hozzászóláshoz be kell jelentkezni
Egyáltalán nem elemezgettem (sőt, nem is néztem meg), csak az ötletet néztem, és próbáltam (szerintem) egy kicsit karbantarthatóbb formába terelni. Amúgy nyilván igaz.
- A hozzászóláshoz be kell jelentkezni
Sziasztok.
Minden igaz, az utolsó rész van hátra és kész a csomagkezelő. Utána már csak bővíteni kell a csomaglistát. Már megvan a csomaglista frissítés is. A következőt találtam ki.
Van egy változó ahol az összes telepített csomag benne fileba. Másik változóba benne van az update csomag verziója.
Az a kérdés hogyan tudom 1 verzió tartalmát összehasonlítani 2 változóval úgy, hogy ne keljen egyesével if-et használni minden csomagnál?
- A hozzászóláshoz be kell jelentkezni
diff?
- A hozzászóláshoz be kell jelentkezni
Ezt lehet akkor is használni, ha mindkét változó tartalma változik?
Az első változó aszerint változik, hogy telepítek vagy törlök belöle. A második változó a szerverekről lekért csomagok verziója változhat. Tulajdonképp, 1 változó csomagjait ki kell szürni a 2 verzió-ból és azokat kell összehasónlítani. Ezt hogyan tudnám egyszerüen megcsinálni?
- A hozzászóláshoz be kell jelentkezni
A 2. verziót eleve úgy készíteném el, hogy amikor lekérdezi a netről a csomagjaid aktuális verzióját, egy if-el eldönti, hogy az frissebb-e mint ami neked van és csak akkor kerül a második verziódba, ha frissebb. Aztán egy cat 2. file-val már tudnád is mit kell frissíteni...
- A hozzászóláshoz be kell jelentkezni
Sziasztok.
Egyszerüen nem jöbök rá hogyan tudnám megcsinálni az utolsó részt. Raktam bele egy "--update-list" kapcsolot aminek az lenne a funkciója, hogy megmutassa milyen csomagokat tudnék frissíteni.
Arra gondoltam, hogy valahogy a remove mappában lévő rm kiterjesztésű file-kat kéne kiszürni a pkgversion-ból.
pkgversion tartalma: http://pastebin.com/72hAUmRu
remove mappába: gcc-4.9.1.rm bash-4.3.rm (itt milyenden telepített csomag benne van és a késöbbiekbe telepítettek is bekerülnek ide.)
A kérdés az hogyan tudom ez a kettő összehasonlítani úgy, hogy azokat a csomagokat mutassan amikből talál frissítéseket és azt jelenitse is meg, melyik csomagot frissíthető mire.
- A hozzászóláshoz be kell jelentkezni
A pkgversion-ban vannak az általad telepített csomagok legfrissebb verziói?
- A hozzászóláshoz be kell jelentkezni
Nem pkgversion tartalmazza az elérhető legfrisebb verziót a csomagból. A remove mappába található az általam telepített csomagok verziói. Ez azért van rm kiterjesztésbe a file mert ez egybe a törlő script is.
- A hozzászóláshoz be kell jelentkezni
"A remove mappába található az általam telepített csomagok verziói. Ez azért van rm kiterjesztésbe a file mert ez egybe a törlő script is."
Khhmm... apro, felkezes, szegyenlos facepalm. Ne. Ezt igy ne, nagyon kerlek.
--
Ki oda vágyik, hol száll a galamb, elszalasztja a kincset itt alant:
()=()
('Y') Blog | @hron84
C . C Üzemeltető macik
()_()
- A hozzászóláshoz be kell jelentkezni
for ciklusba beolvaasod ls-el a remove mappad *.rm fajlait, a ciklusban megnevezel ket valtozot az egyik a progi neve, masik a verzioja, sed-vagy amivel tetszik, aztan a progi neve valtozoval keresel a pkgversion fajlban, a talalatot feldolgozod, kinyered belole a verziot, ez is egy valtozoba, aztan az *.rm fajlbo kinyert verziot osszehasonlitod a pkgversion bol nyert verzioval egy if- ben, ha azonos akkor semmi tovabb a ciklus kovetkezo elemere, ha nem egyezik, kiiratod, hogy ennel a proginal van ilyen es ilyen frissebb verzio, aztan tovabb a kovire?
- A hozzászóláshoz be kell jelentkezni
Valami ilyesmivel probálkoztam.
for u in $(ls $REMOVE | grep "*.*" | sed 's/\.rm//'); do
for l in $(cat $VERSION | grep "$u" | sed 's/\.tar\.xz//' | sed 's/\.tar\.gz//' | sed 's/\.tar\.bz2//' | sed 's/\src//'); do
if [ $u != $l ]; then
echo "$u >> $l"
else
echo "Nincs frissítés"
fi
done
done
- A hozzászóláshoz be kell jelentkezni
az $u az neked ilyesmi nem pl: gcc-4.9.1?
ha ezzel keresel, de a frissítés fájlodban már gcc-4.9.2.tar.gz van, akkor nem ad találatot, így az echo-d kimenete: gcc-4.9.1 > >
én valahogy így csinálnám:
for u in $(ls $REMOVE/*.rm); do
# az összes .rm végződéső fájl beolvasása a $REMOVE alól
_name=$(echo $u | sed -n 's/\(.*\)-[0-9].*/\1/p')
# a kimenet elvileg a '-' és egy szám előtti rész
# pl gcc-4.9.1.rm esetén: -4 előtti azaz gcc
_ver=$(echo $u | sed -n "s/$_name-\(.*\).rm/\1/p")
# az előbb megkapott csomagnév és a .rm közti rész,
# azaz a verzió
_new_ver=$(grep $_name $VERSION | sed -n "s/$_name-\(.*\)/\1/p" | sed 's/\.tar\.gz//;s/\.tar\.bz2//;s/\src//')
# hát ez most nem megy szebben :P
# reményeim szerint az új verziót kapod meg
if [ $_ver != $_new_ver ]; then
echo "$_name: $_ver >> $_new_ver"
else
echo "$_name: Nincs frissítés"
fi
done
Nem próbáltam, nem tudom működik-e egyáltalán, meg ha van/lesz olyan csomagjaid hogy pl firefox és firefox-hu, akkor félremegy a dolog, mert a firefox ra keresésnél találatot ad a firefox-hu-ra is....
- A hozzászóláshoz be kell jelentkezni
Sajnos nálam nem müködik. Ennyi a kimenet amit kapok rá "/usr/bashpkg/remove/gcc: >> "
- A hozzászóláshoz be kell jelentkezni
igen lama vagyok, nem kezeltem az utvonalat... :)
a _name valtozoban csereld ezt
sed -n 's/\(.*\)-[0-9].*/\1/p'
erre
sed -n "s/$REMOVE\/\(.*\)-[0-9].*/\1/p"
ja, meg a _ver valtozoban a sed-es reszben a $_name ele egy .* is kell :P
jaj, meg a .rm se jo, \.rm lesz
- A hozzászóláshoz be kell jelentkezni
Valahogy így gondoltad?
for u in $(ls $REMOVE*.rm); do
_name=$(echo $u | sed -n 's/$REMOVE\/\(.*\)-[0-9].*/\1/p')
_ver=$(echo $u | sed -n 's/.*$_name-\(.*\)\.rm/\1/p')
_new_ver=$(grep $_name $VERSION | sed -n 's/$_name-\(.*\)/\1/p' | sed 's/\.tar\.gz//;s/\.tar\.bz2//;s/\.src//')
if [ $_ver != $_new_ver ]; then
echo "$_name:$_ver >> $_new_ver"
else
echo "$_name: Nincs frissítés"
fi
done
- A hozzászóláshoz be kell jelentkezni
Ha sed -r
lenne, akkor nem kellene annyi visszaper. Másrészt ezeket a cseréket lehet egy sed-del is megcsináltatni
$ echo alma körte | sed -r "s,(lm),X\1X, ; s,kör,négyzet,"
aXlmXa négyzette
- A hozzászóláshoz be kell jelentkezni
valahogy igen, az elejen a $REMOVE*.rm inkabb $REMOVE/*.rm
- A hozzászóláshoz be kell jelentkezni
Nem dob vissza semmit.
Azért hagytam ki a "/" a REMOVE-ból mert a változónál benne van.
- A hozzászóláshoz be kell jelentkezni
a valtozok utan tegyel rogton egy egy echo -t rajuk, lasd mit ad vissza
hm, valszeg a $REMOVE al van baj, tele van /- el, akkor ott hasznalj a sed-nek -r kapcsolot ahogy uzsolt mondta, de akkor szedd ki a tobbi \-t
- A hozzászóláshoz be kell jelentkezni
Egyikre se add vissza semmit.
- A hozzászóláshoz be kell jelentkezni
a _name nal sed -r legyen es az elvalaszto ne /, hanem pl :
a tobbi azzert ures, mert mar a _name is semmi
szerk:
sed -n 's/$REMOVE\/\(.*\)-[0-9].*/\1/p'
helyett
sed -r "s:$REMOVE/(.*)-[0-9].*:\1:p"
szerk2: az osszes sed-esnel, ahol valtozot is felhasznalunk '///' helyett "///" legyen, ' ' eseten nem helyettesiti be a valtozott....
- A hozzászóláshoz be kell jelentkezni
Rájötttem, hogy a "_ver" változó nem add vissza eredményt. Másik dolog "for u in $(ls $REMOVE*.rm)" erről le lehet hagyni a "*.rm" -t mivel a mappába lévő filekat listázás és úgyan az lesz az eredmény.
_name=$(echo $u | sed 's/\-[0-9]*//') >> ez így csak a csomag nevét dobja ki ahogy kell.
Viszont a "_ver" változóra még nem találtam megoldást, ahogy robálkoztam vagy eredményt nem add vagy csomagot mutatja "rm" végzödés nélkül.
Ebbe tudna valaki segíteni, hogyan tudnám lecsipni az elejét és a végét?
- A hozzászóláshoz be kell jelentkezni
a _name-re szerintem ez a jó: sed 's/-[0-9].*//', gondolom csak elírtad.
_ver=$(echo $u | sed -n "s/$_name-\(.*\)\.rm/\1/p")
jó kell legyen, most már csináltam ilyen .rm fájlokat is, működik vele
a _new_ver az jó?
- A hozzászóláshoz be kell jelentkezni
Szia úgy tünik moswtmr jó :)
- A hozzászóláshoz be kell jelentkezni
Köszi a segítséget. Mostmár müködik. Csak azt nem értem miért mutatja kétszer a friss csomagot.
Ezt mutatja:
bash-4.2 --> bash-4.3.30
bash-4.3.30
gcc-4.9.1 --> gcc-4.9.2
gcc-4.9.2
Ez helyett:
bash-4.2 --> bash-4.3.30
gcc-4.9.1 --> gcc-4.9.2
- A hozzászóláshoz be kell jelentkezni
mondjuk bash esetén mi a _name, _ver és _new_ver értéke?
- A hozzászóláshoz be kell jelentkezni
_name=csomagnév (pl gcc bash)
_ver=verzió (4.9.1 4.3)
_new_ver=gcc-4.9.2 bash-4.3.30
Az értékek jók ahogy az tervezted.
- A hozzászóláshoz be kell jelentkezni
Megtaláltam a probléma forrását. Az új csomagok listáját nem törlödött frissítés eletött és minden frissítésnél dubpláztotott a vejegyzés. Most már ki van javítva és remekül möködik :)
Köszönöm mindenkinek a segítségét. Jőhet a tesztelés ! :D
- A hozzászóláshoz be kell jelentkezni
a _new_ver nem jó, ott csak a csomagverziónak kellene lennie...
_new_ver=$(grep $_name $VERSION | sed -n "s/$_name-\(.*\)/\1/p" | sed 's/\.tar\.gz//;s/\.tar\.bz2//;s/\src//')
ez van nálad?
vagy ahogy uzsolt írta össze is lehet vonni a sed-eket:
_new_ver=$(grep $_name $VERSION | sed -n "s/$_name-\(.*\)/\1/p;s/\.tar\.gz//p;s/\.tar\.bz2//p;s/\src//p")
figyelj a sed-nél a "" vagy '' -re. A fentiek szerint én megkapom a $VERSION alatt lévő fájlban felsorolt sorok közül pl a gcc verzióját, és csak a verzióját.
nálam tehát gcc-nél maradva ezek az értékek:
_name=gcc
_ver=4.9.1
_new_ver=4.9.2
és ezután:
if [ $_ver != $_new_ver ]; then
echo "$_name: $_ver >> $_new_ver"
else
echo "$_name: Nincs frissítés"
fi
ezt kapom:
gcc: 4.9.1 >> 4.9.2
- A hozzászóláshoz be kell jelentkezni
Már meg van oldva tökéletessen müködik. A frissítés verzónál volt a gond. Feljebb írtam. Köszönöm a segítségét mindenkinek.
- A hozzászóláshoz be kell jelentkezni
Sziasztok. Folyik a tesztelés a csomagkezelőmnek. A csomag letöltés, kibontás, Csomagfa frissítés rendessen müködik, de a confignál van egy kis gond. A konfig file így nézz ki pl a nano-nak. http://pastebin.com/b8kh7aJ9
Eleinte a configure is be volt rakva egy oylan if-be mint a build. De nem hajtotta végre a feladatát. Mióta kivettem azóta lefutt a konfig de a build nem. Ha kiveszem az if-ből a build-et akkor lefutt az is. A problémám vele, ha a configure-ba hiba akkor folytatja a build-el de viszont ezt nem szeretném. Ezt hogyan lehetnem megoldani, hogy ha nem futt le a configure akkor nem folytassan csak akkor ha hiba nélkül le tud futni a config.
- A hozzászóláshoz be kell jelentkezni
A check
-re:
curl -L -s http://ftp.gnu.org/gnu/nano/ | sed -rn '/href="nano/ s@.*a href="(nano-[^"]*.tar.gz).*@\1@p' | sort -V
Talán egy kicsit egyszerűbb.
Kérdésedre a válasz:
configure && build
- A hozzászóláshoz be kell jelentkezni
Grep, awk, tr... Csodalom, hogy meg nem sikitott fel senki erre erzekeny hangosan. Mint egy rossz szexfilm. Egy strip meg egy touch hianyzik belole meg... :-)
Ha a build nem fut le, annak az lehet az oka, hogy a $? nem nulla. Probaltad mar peldaul kiiratni a $? erteket, hogy mi a baj?
Ami a fuggvenyneveket illeti, probalj valami semlegeset adni a configure-nek, mert ha a "." pathen van, nem biztos, h az tortenik, amit elvarsz... Mondjuk egy pkg_config() / pkg_build() fgv nevek jobbak lehetnenek.
--
Ki oda vágyik, hol száll a galamb, elszalasztja a kincset itt alant:
()=()
('Y') Blog | @hron84
C . C Üzemeltető macik
()_()
- A hozzászóláshoz be kell jelentkezni
Miért mi a baj a "grep, awk, tr"-rel? Müködik nálam és a többi is így lett csinálva. Sőt, még a update rész is (tulajdonképp úgyan ez van abba is).
kézzel is lefuttatam a configure-t és gond nélkül lefutt. Csak a build nem indult el.
Egyébként, a teszteléssel jelenleg még nem folyik. Gondjaim vannak, mert make nem müködik. (szegmentális hiba)-t ír.
- A hozzászóláshoz be kell jelentkezni
curl -L -s http://ftp.gnu.org/gnu/nano/ | tr "<>" "\ " | grep "nano" | awk '{print $8}' | grep -v ".sig" | grep -v "/a" | sed 's/\.tar\.gz//' | sort -V | tail -n 1
vs.
curl -L -s http://ftp.gnu.org/gnu/nano/ | sed -rn '/href="nano/ s@.*a href="(nano-[^"]*.tar.gz).*@\1@p' | sort -V | tail -n 1
Egyrészt rövidebb. Másrészt könnyebben áttekinthető. Harmadrészt könnyebben karbantartható. Negyedrészt lényegesen kevesebb (felesleges!) külső program hívás (6 és 1, a sort
és tail
részt sehol nem számolva), ami nyilván sebességben is meglátszódik.
Ui. pl. grep-awk páros felesleges, hiszen az awk is tudja azt, ami neked kell a grep-ből.
- A hozzászóláshoz be kell jelentkezni
Igazad van, tényleg rövidebb és kevesebb plusz programot hív meg. Lefuttatam néhányat a te verziódból, hogy melyik a gyorsabb. Külömbséget nem vettem nagyon észre. Remélhetőleg, nem nagyon kell karban tartani. Eredetíleg úgy terveztem, hogy a programot mindig a megadott helyről frissíti ebben az esetben "http://ftp.gnu.org/gnu/nano/" a nano-t. Ha esetleg valami miatt nem tudja lekérni pl:megszünik az oldal vagy elköltözik. Abban az esetbe kell az új oldalon lekérni és kicserélni az update ill a csomaghoz tartozó config fileba.
Amint rájövök, az lfs linux-ba miért nem müködik a make-4.1 (segmental fail) és sikerül kijavítani nekiállok tesztelni.
Köszönöm az észrevétel és a rengeteg segítséget. Ha a tesztek sikeresek, elkezdem bővíteni a csomagokat amik kellenek nekem azt mehet egy új project.
- A hozzászóláshoz be kell jelentkezni
Ebben az esetben valóban nem biztos, hogy feltűnik a sebességkülönbség, ui. szerintem az internettel való okoskodás több időt vesz igénybe. Viszont ha net nélküli részt írnál, és sok ilyen lenne, szembetűnőbb lenne a sebesség-különbség.
Viszont ha erre szoksz rá, nagyon átláthatatlanok lesznek a szkriptjeid. Ami, ha soha a büdös életbe nem veszel elő, "csak" használod, nem számít. A legfontosabb, hogy menjen rendesen.
Viszont azt már most garantálom, hogy mindig kell majd valamit alakítani rajta. És akkor egyszerűbb lesz egy áttekinthetőbb kódot bővíteni, változtatni, mint egy nagy katyvaszt, aminél egy sorban is tíz lépcső van (egy tr-elt output-ot grep-pel szűrünk, majd awk-val csak a nyolcadik oszlopot íratom ki, majd újra grep, meg sed. Két hét múlva neked is öt percig kell majd ülnöd felette, hogy ezt most miért. Na, mindegy, majd meglátod.
Make segfault-ja. Először is, biztos, hogy a make segfault-ol? Nem pedig a gcc vagy esetleg valamelyik teszt egy csomagfordítás közepette? A pontos hibaüzenetet másold ide (még egyszer sem sikerült leírnod rendesen hogy "Segmentation fault" - ui. gondolom, hogy ezt írta ki).
- A hozzászóláshoz be kell jelentkezni
Igazad van. Elég nagy a katyvasz a programomba. főleg, a "fő" programomba. De tervezem kicsit áttekinthetőbbé rakni amint sikeres teszt lesz.(Első probálkozásnak szerintem azért elfogadható.)
Tuti, hogy a make-val van a gond. A konfigure rész lefutt szépen utána jön a make parancsra a gond. "Segmentation fault" bármit csinálok a make-val. pl: make --version -ra is úgyan úgy kidobja a "Segmentation fault" hibát. Ebből gondolom, hogy ez szállt el.
- A hozzászóláshoz be kell jelentkezni
Akkor valóban a make-kel van gond. Esetleg megérné újrafordítani... bár nem tudom, hogy hogy csinálnád meg, ui. a make fordításához kell a make. Nyilván van egy host rendszered, onnan kellene újrafordítani. Fordítás után nem csináltál make check
-et?
- A hozzászóláshoz be kell jelentkezni
Már egyszer újra forgatam az egészet rendszert de maradt a hiba. Make check-et tényleg ne futtatam.
- A hozzászóláshoz be kell jelentkezni
Az ilyen fontos programoknál azért nem lenne hülyeség.
- A hozzászóláshoz be kell jelentkezni
A kevesbe fontosaknal se. Nem veletlen, hogy a legtobb RPM alapu cuccban van %check szekcio.
--
Ki oda vágyik, hol száll a galamb, elszalasztja a kincset itt alant:
()=()
('Y') Blog | @hron84
C . C Üzemeltető macik
()_()
- A hozzászóláshoz be kell jelentkezni
Azoknál se, nyilván.
- A hozzászóláshoz be kell jelentkezni
Tényleg csak okulásul: Különbséget, karbantartani (karban tartani a kisbabákat szokás amikor szoptat a kismama, meg amikor ringatja).
--
Ki oda vágyik, hol száll a galamb, elszalasztja a kincset itt alant:
()=()
('Y') Blog | @hron84
C . C Üzemeltető macik
()_()
- A hozzászóláshoz be kell jelentkezni
(fejvakar) igazabol en eredetileg foleg azert mondtam, hogy ez a fajta frissitesi mod nem lesz annyira jo, mert egyvalamit nem tamogat a csomagkezelod: az elore letoltott forrasokbol offline telepitest, mert a verziot mindig helyben online akarja feloldani. Tudom, hogy ma mar mindenutt van internet, de meg igy is elofordulhatnak helyzetek, amikor epp doglodik, es idotolteskeppen kivasalnal peldaul egy make segfault hibat.
--
Ki oda vágyik, hol száll a galamb, elszalasztja a kincset itt alant:
()=()
('Y') Blog | @hron84
C . C Üzemeltető macik
()_()
- A hozzászóláshoz be kell jelentkezni
Tudom, hogy "van" vagy "lehet" hátülötöje ennek a mondhatni sajátos modszernek. Viszont, ahogy elörébb is írtam, nem lesz publikálva. Még az se 100%, hogy saját magam használoni fogom. Bár gondoltam rá ha a teszteken müködik, visszatérek lfs-re és ott használni fogom.(Ha tesztek alatt tényleg müködik akkor nagy valószinüséggle használom is.) Bizok benne, azért egy egésszen müködő kis csomagkezelőt tudtam fabrikálni. Jelenleg függösékeket se kezeli. Ha esetleg, rendben müködik, és használom is akkor valószínű tovább fogom fejleszteni magamnak. Pl: kitalálok valamit a függöség kezelésre.
Ez a project első sorban a tanulás miatt indult. Ezt a nyelvet választottam első nyelvnek és első project-em ez a csomagkezelő. Mondjuk, ha meglátnátok a magát a csomagkezelőt hogy nézz ki sírva fakadnátok. Lehetne mit finomítani rajta, amit fogok is. Minden esetre, számomra tanulságos volt maga a project. Nagyon sok új dolgot tanultam ill tanitottatok. Gondolom ez sovány vigaz mert közben hajatokat téptétek, de örülök, hogy szántatok rám az időtökből és segítetek. :)
u.i: Hamarossan, nekiesek az új project-nek, ami egy bash-ba írt windows manager lesz.
Mégegyszer köszönöm mindenki segítségét.
- A hozzászóláshoz be kell jelentkezni
Windows manager? :-)
--
Ki oda vágyik, hol száll a galamb, elszalasztja a kincset itt alant:
()=()
('Y') Blog | @hron84
C . C Üzemeltető macik
()_()
- A hozzászóláshoz be kell jelentkezni
Tudod, menedzseli az XP-t, a Vistát, sőt, még a 3.1-et is.
- A hozzászóláshoz be kell jelentkezni
Cool!
--
Ki oda vágyik, hol száll a galamb, elszalasztja a kincset itt alant:
()=()
('Y') Blog | @hron84
C . C Üzemeltető macik
()_()
- A hozzászóláshoz be kell jelentkezni
X windows systemhez szeretnék készíteni majd egy ablakkezelőt. Így már érthető? :)
Egyébként a csomagkezelőm törlését újra kell gondolnom. Esetleg van valami őtlet?
- A hozzászóláshoz be kell jelentkezni
s/X Windows/X Window/
egyes szam. Mint ahogy nem Windows Manager, hanem csak Window Manager. Nem ablakokkezelo, hanem ablakkezelo.
Figyelj oda, mert egy betu es mast jelent, az angol mar csak ilyen. Nagyon nem mindegy, hogy "Are you see" vagy "Are you sea"
--
Ki oda vágyik, hol száll a galamb, elszalasztja a kincset itt alant:
()=()
('Y') Blog | @hron84
C . C Üzemeltető macik
()_()
- A hozzászóláshoz be kell jelentkezni
Oké. Sose voltam jó angolból :)
- A hozzászóláshoz be kell jelentkezni
Sziasztok.
Szépen alakul a csomagkezelő. Már 0.2-es verziónál járok. Ebben a verzióban van már csomagkereső és megmutatja, melyik csomagokat lehet miről mire frissíteni. Arra gondoltam, ha már ennyire eltértem egy "szimpla" csomagkezelőtől megprobálok függöségkezelést is belerakni. Ebbe kérnék egy kis segítséget kérni. Hogyan lehet, ezt viszonylag egyszerüen kivitelezni? Már ha van rá egyszerünek mondható megoldás.
Nekem egy olyan megoldás jutott az eszembe, hogy csinálok egy változót ami tartalmazza a függöségeket és szépen minden egyes függöségi csomagot berakok egy if-be leellenörzöm fel van e telepítve ha nincs akkor ráindítok a telepítésre. Van valami egyszerübb modszer rá?
Válaszokat elöre is köszönöm.
- A hozzászóláshoz be kell jelentkezni
Én se tudnék (lényegesen) más módszert.
Amire még érdemes lehet figyelni: verzió-függőség is, azaz pl. egy X csomag függ az Y csomagtól, de annak is a legalább 2.1-es verziójától. Nem annyira mainstream, de széles körben használt csomagoknál sűrűn előfordul, hogy az Y-ból a legújabb kell neki.
- A hozzászóláshoz be kell jelentkezni
Azzal nem lesz gond, hogy a legújabbat kapja. Mivel az egész csomagkezelő ezen alapszik, hogy a legfrissebb csomagok érhetök le azonnal. Szerintem, a függöség kezelés egyenlőre hanyagolom. Késöbbiekbe meg folytatom. Addig is jöhet egy másik project.
Ez a project mondhatni sokkal jobb lett mint amit elösször akartam. Nem gondoltam, hogy elsőre ilyent össze tudok tákolni. Nekem nagyon tanulságos volt.
Köszönöm mindenkinek a segítségét. Gondolom, kiváncsi vagytok hogyan nézz ki a tálkolmányom. Mielött nagyon kritizálnátok jusson eszetekbe első project és első probálkozásom a bash script ill az egész "programozás" világába. Tanácsokat észrevételt szívesen fogadok okulás gyanánt.
http://pastebin.com/McHjYbgh
- A hozzászóláshoz be kell jelentkezni
Sziasztok !
Tesztelésnek vége. Az eredmény pozitív. Nagyon jól müködik. Egy kis finomhangolást szeretnék csinálni rajta. Amibe, kérném a segítségeteket.
Az első "bashpkg --sync" futtatásnál ami a csomaglista frissítés ebbe szeretnék egy olyant ami mutatja %-ba hol tart plusz [########## ]- valami ilyesmi csikba is. Ilyesmi kép nézze ki "[######################] 76%".
A Másik : ez itt a csomag frissítés mutatja, hogy van e csomag amit frissíthetek. Így nézz ki.
for u in $(porg -a | grep "$PACKNAME"); do
name="$(echo $u | sed 's/-[0-9].*//')"
ver=$(echo $u | sed "s/$name\-//")
new_ver="$(cat $VERSION | grep "$name" | sed "s/\.tar\.gz//;s/\.tar\.bz2//;s/\.src//;s/\.tar\.xz//")"
if [ "$name-$ver" != "$new_ver" ]; then
echo -e "$name-$ver $g -->$def $r $new_ver$def"
else
echo -e "$r Nincs frissítés.$def $g:)$def"
fi
done
Annyi a gond vele, hogy amikor nincs frisssíthető csomag akkor minden csomagnál kiírja "Nincs frissítés." De úgy szeretném, hogy ha nincs egyeltalán akkor csak 1x írja ki.
Segítséget előre is köszönöm.
- A hozzászóláshoz be kell jelentkezni
Anelkul, hogy megprobalnam megerteni, mit csinal a kod (kora hajnal van meg, ez ilyenkor nem megy):
anyupdate=0
for u in $(porg -a | grep "$PACKNAME"); do
name="$(echo $u | sed 's/-[0-9].*//')"
ver=$(echo $u | sed "s/$name\-//")
new_ver="$(cat $VERSION | grep "$name" | sed "s/\.tar\.gz//;s/\.tar\.bz2//;s/\.src//;s/\.tar\.xz//")"
if [ "$name-$ver" != "$new_ver" ]; then
echo -e "$name-$ver $g -->$def $r $new_ver$def"
anyupdate=$((anyupdate + 1))
fi
done
if [ "${anyupdate}" -eq 0 ]; then
echo -e "$r Nincs frissítés.$def $g:)$def"
else
echo -e "$r $anyupdate db csomag frissíthető"
fi
Btw, az echo-knal en angol kiirast alkalmaznek, es megismerkednek a gettext nevu parancs hasznalataval. Bovebben lsd: https://github.com/meonkeys/bash-i18n-example
Ami a progress baros kerdest illeti, azt a) elfelejtenem b) megbaratkoznek a gondolattal, hogy "dialog" alapon irom ki. Rendes progress bart csinalni nativ bash-bol nem annyira trivialis, mivel a nyelv maga egy stateless cucc, az egyes programok nem tudjak rendesen a kozponti kornyezetben tarolni az allapotukat ket meghivas kozott.
Amit helyette ajanlok: felejtsd el a progress bart, ird ki csak a szazalekot paddingolva, es akkor azt 3 backspace jellel vissza tudod torolni.
Demonstracio:
#!/bin/bash
echo -ne "Progress: 0%"
for i in $(seq 1 100); do
sleep 1
echo -ne "\b\b\b\b$(printf "%3d%%" ${i})"
done
echo
Egyvalamire figyelj nagyon: a folyamatjelzo lefutasa utan mindenkepp kell egy ures echo, hogy visszaalljon a rendes kiirasi ciklus. Ha fuggvenyeket irsz a dologra, mindenkeppen kell egy "progressbreak" fuggveny is, hogy a hibajelzeseket ki tudd szepen irni.
--
Ki oda vágyik, hol száll a galamb, elszalasztja a kincset itt alant:
()=()
('Y') Blog | @hron84
C . C Üzemeltető macik
()_()
- A hozzászóláshoz be kell jelentkezni
Hali.
Progress rész nem teljessen értem. A script elszámol 100-ig az oké. De ezt hogyan tudom összekapocsolni a lekéréssel?
Másik kérdés: Találkoztam egy érdekes problémával. Konfig file-ba is leszeretném csípni a végét (tar.gz, ta.bz2 stb...) ilyen módon (sed "s/\.tar\.gz//;s/\.tar\.bz2//;s/\.src//;s/\.tar\.xz//") de érdekes módon csak a tar.gz-t szedi le. Config file így nézz ki http://pastebin.com/cUVfAz78 a kérdés itt miért csak a tar.gz-t szedi le?
- A hozzászóláshoz be kell jelentkezni
"De ezt hogyan tudom összekapocsolni a lekéréssel?"
Akkor irsz ki uj szazalekot, amikor epp akarsz. Ha van 50 csomagod, akkor mindegyik utan 2-vel tobbet irsz ki (2%-4%-8%-10%. stb). De ez csak kreativitas kerdese, gondolom szazalekszamitast meg vettetek mar suliban :-)
$ echo foo.src.tar.gz | sed 's/\.tar.\+//;s/\.src//'
foo
Egyre figyelj, a kep.tar-0.25.zip -bol csak kep lesz.
--
Ki oda vágyik, hol száll a galamb, elszalasztja a kincset itt alant:
()=()
('Y') Blog | @hron84
C . C Üzemeltető macik
()_()
- A hozzászóláshoz be kell jelentkezni
> gondolom szazalekszamitast meg vettetek mar suliban :-)
kevesebb, mint fél évvel vagy csak régebb óta a hupon, csak szólok... :)
- A hozzászóláshoz be kell jelentkezni
Humor volt... amugy nem mindig van relacio a regisztracio ota eltelt ido es a kor kozott...
--
Ki oda vágyik, hol száll a galamb, elszalasztja a kincset itt alant:
()=()
('Y') Blog | @hron84
C . C Üzemeltető macik
()_()
- A hozzászóláshoz be kell jelentkezni
Progress bar:
#!/bin/bash
while :; do
echo -en "\e[10G" # kurzort 10. oszlopba mozgat
read -n 1 n # számot beolvas
echo -en "\e[1G\e[J\e[41m"
# \e[1G kurzort 1. oszlopba mozgat
# \e[J letörli a terminált a kurzortól kezdve
# \e[41m háttérszínt pirosra beállít
for (( c=1; c<=$n; c++ )); do
echo -n " "
done
echo -en "\e[0m" # háttérszínt visszaállít
done
Amelyik számbillentyűt lenyomod, annyi karakter széles piros csíkot kirajzol. A "read -n 1 n" utáni kódot másold ki ha akarod ezt használni; "n" változóba kell rakni hogy hány karakter széles legyen.
- A hozzászóláshoz be kell jelentkezni
En nem szeretem feltetlen ezt az ASCII-s cuccot, mert ha valaki egyszinu terminalrol nezi, az nem lat semmi haladast. Gondolom egy csomagkezelonel ez elkepzelheto scenario.
Egyebkent erdekes megoldas, koszi.
--
Ki oda vágyik, hol száll a galamb, elszalasztja a kincset itt alant:
()=()
('Y') Blog | @hron84
C . C Üzemeltető macik
()_()
- A hozzászóláshoz be kell jelentkezni
Sziasztok köszönöm a segítséget.
Lenne még egy kérdésem. Van egy változó a konfig file-ba ami így néz ki pl gcc-be :
VERSION="$(cat /usr/bashpkg/pkgversion | grep "gcc" | sed "s/\.tar\.gz//;s/\.tar\.bz2//;s/\.src//;s/\.tar\.xz//")" kimenete a következő : "gcc-4.9.2"
Elméletileg a sed rész leszedi az összes "tar.gz; tar.bz2; src; tar.xz" kiterjesztését. Sőt gyakorlatileg is működik conzolba tesztelve. A probléma az, hogy a változóba nem hajtja végbe a teljessen. Csak a tar.gz-t szedi le. A kérés az lenne miért csak a tar.gz-t szedi le? Ezt a fajta megoldást máshol is használom de ott jó.
- A hozzászóláshoz be kell jelentkezni
Megoldva. Elfelejtettem a fő programomba is belerakni a tar.xz kiterjesztés. Csomagok készítésénél tartok azt mehet az éleszbe kicsit huzamosabb tesztelés azt lehet visszatérek az lfs linuxra. Természetessen a saját csomagkezelömmel.
Egyenlőre a frissítés százalékba való mutatását. Köszönöm a segítséget mindenkinek.
Kellemes ünnepeket mindenkinek.
- A hozzászóláshoz be kell jelentkezni
Azt a sort, amely a VERSION-t kreálja, lecserélhető:
VERSION="$(sed -rn /usr/bashpkg/pkgversion '/gcc/ s/\.(src|tar\.(gz|bz2|xz))//gp')"
- A hozzászóláshoz be kell jelentkezni
Köszi a már megoldottam. Már 26 config file van ami alapján lehet telepíteni a csomagokat. Egy darabig nem tudok foglalkozni vele. De amint lesz rá lehetöségem, folytatom. Csomag gyártás kb 1-2 percet fesz igénybe. Már csak a további csomagokat kell megcsinálni és használhatóm a csomagkezelőmet.
Modhatni, a project elkészült. Rádásul, jocskán túlszárnyalta az elvárásaimat. Ebbe elég nagy szerepet játszatatok ti is (ötletek, tanácsok és megoldásokba). Nagyon sokat tanultam ebből a project-ből.
Remélem hamarossan neki tudok állni egy újabb project-nek.
Köszönöm mindenkinek a segítségét.
Kellemes karácsonyi és boldog új évet kívánok mindenkinek.
- A hozzászóláshoz be kell jelentkezni