Portál AbcLinuxu, 1. května 2025 19:07
Ne? Tak o čem? Že z vašeho pohledu komplexní rpm má být lepší než jednoduchý deb? Víte co, trochu se v těch systémech pohrabte, udělejte si pár balíků, a pak můžeme dál pokračovat.četl jste vůbec můj blogpost:
V tomto ohledu je přístup RPM mnohem více sjedocující napříč distribucemi a má mnohem blíže k přenostelnosti a otevřenosti....Asi ne...
no, tak práve vlastnoť robiť závislosti na súbor (a nie na balík) je vec, ktorá celý systém rozbíja (a je prenositelna asi ako windows - krabica sa preniesť dá). btw, bola tam dodaná, pretože zamestnanci redhat-u sa v slovníku nedostali po slovo "alternatíva".Mám balíček DEB z debianu. Pokusím se ho nainstalovat na moji Deb-based ditribuci. Mohou nastat jen dva případy: 1) balíček odkazuje na balíčky, které se v mé distribuci jmenují stejně jako v Debianu a balíček se nainstaluje. 2) balíček odkazuje na balíčky, které se jmenují jinak, než balíčky v mé distribuci a jsem v prdeli. Mám-li RPM, nemusím znát jméno balíčku, solver prohledá balíky, najde si potřebné knihovny, vyrobí si závislosti a balík nainstaluje. Tenhle princip mi přijde IMHO univerzálnější, ne?
no, tak práve vlastnoť robiť závislosti na súbor (a nie na balík) je vec, ktorá celý systém rozbíja (a je prenositelna asi ako windows - krabica sa preniesť dá). btw, bola tam dodaná, pretože zamestnanci redhat-u sa v slovníku nedostali po slovo "alternatíva".
Mám-li RPM, nemusím znát jméno balíčku, solver prohledá balíky, najde si potřebné knihovny, vyrobí si závislosti a balík nainstaluje. Tenhle princip mi přijde IMHO univerzálnější, ne?Ne, oba dva principy dělají trochu něco jiného, než by dělat měly, a každý to dělá trochu jinak. Závislost u softwaru znamená, že potřebuji třeba nějakou knihovnu implementující něco s nějakými vlastnostmi. To něco může být třeba
SSL
dané interfacem openssl
a požaduji třeba implementaci protokolu SSL 2. Nebo to může být třeba Java Runtime Environment ve verzi alespoň 1.5.
Jeden balíčkovací systém to řeší závislostí na balíčkách (takže vychází z předpokladu, že tu danou věc může implementovat právě jeden balíček). Druhý to řeší (mimo jiné) závislostí na souborech (takže vychází z předpokladu, že přítomnost nějakého souboru někde znamená přítomnost implementace). Asi nejčistší řešení by bylo, kdyby o sobě každý balíček říkal, co poskytuje, a každý balíček by si mohl říci, co potřebuje. Jenže to je zároveň velmi pracné na údržbu, protože to budete muset složitě definovat i u balíčků, které víc implementací normálně nemají.
kdyby o sobě každý balíček říkal, co poskytujeMyslíš něco jako tohle?
mantisha:/home/marek # rpm -qp --provides madwifi-kmp-default-0.9.4_2.6.25.4_9.1-1.i586.rpm madwifi-kmp = 0.9.4_2.6.25.4_9.1 ksym(_ath_hal_attach) = ea10ec7e ksym(ath_hal_computetxtime) = 770fb583 ksym(ath_hal_detach) = 9616c7c2 ksym(ath_hal_getuptime) = 2d2cd95d ksym(ath_hal_getwirelessmodes) = 88074857 ksym(ath_hal_init_channels) = e8a4894a ksym(ath_hal_memcmp) = 93cb6276 ksym(ath_hal_memcpy) = a0fa8bf4 ksym(ath_hal_memzero) = 4dce8c00 ksym(ath_hal_mhz2ieee) = 62f37fda ksym(ath_hal_printf) = 5b1d4795 ksym(ath_hal_probe) = 51a400eb . . .Provides je generované automaticky z binárky.
Provides:
, poté se provede sjednocení množin z automatické registrace provides a těch ručně definovaných provides. Stejně tak se nakládá i s requires.
/usr/bin/git
níže naznačuje, že pokud chcete používat globálně jednoznačné identifikátory (ať už jména balíčků nebo třeba souborů), musí existovat nějaký proces, který jim určuje globálně jednoznačnou sémantiku. Tento proces může vypadat různě – ať už jako centrální repository všech balíčků (Debian), nebo jako nějaký hierarchický systém (někdo mi přidělí nějaký prefix, muže to být třeba doména v DNS, a já pak mohu definovat identifikátory začínající tímto prefixem).
Mám-li RPM, nemusím znát jméno balíčku, solver prohledá balíky, najde si potřebné knihovny, vyrobí si závislosti a balík nainstaluje. Tenhle princip mi přijde IMHO univerzálnější, ne?Do té doby, než se ve světě vyskytnou dva balíčky, které obsahují stejně pojmenovaný soubor
/usr/bin/git
může patřit buďto k version control systému GIT, a nebo ke GNU Interactive Tools. Pak se celý systém závislostí na souborech s velkým řinkotem rozbije.
/usr/bin/git
, balíčkovací systém neví, který z těch dvou balíčků nainstalovat.
/usr/bin/git
konfliktí s tím balíčkem, který obsahuje ten /usr/bin/git
, který nechci. Je to sice ošklivá konstrukce, ale když žádnou lepší nemáme... mj.ucw.cz/libpci/3.0
. Ostatní pak vědí, že chtějí-li záviset na mé libpci, mohou se odkázat na toto jméno.
Případně to jméno dokonce může být URL souboru s nějakými metadaty o balíčku, kterými formálně popíšu, co je takový balíček zač – tedy třeba na existenci jakých souborů se všichni mohou spolehnout (bude mezi nimi knihovna, ale už mezi nimi asi nebudou init-skripty [kdyby libpci nějaké měla], protože ty jsou závislé na distribuci a mohou se v různých instancích balíčku lišit).
Debian má tu výhodu, že má obrovské centralizované repozitáře, u většiny RPM distribucí tohle bohužel neplatí.To je ale pěkná hloupost. Debian má právě výhodu že umožňuje mít decentralizované repository.
Mám balíček DEB z debianu. Pokusím se ho nainstalovat na moji Deb-based ditribuci. Mohou nastat jen dva případy: 1) balíček odkazuje na balíčky, které se v mé distribuci jmenují stejně jako v Debianu a balíček se nainstaluje. 2) balíček odkazuje na balíčky, které se jmenují jinak, než balíčky v mé distribuci a jsem v prdeli.Muze nastat vice moznosti. Napr. konflikty verzi. Ale taky v deb lze nastavit promenna "Provides". Tzn, mas balik mplayer a pak mas balik treba Ogmrip. Ogmrip ma jako zavislost mencoder. A balik mplayer ma promennou "Provides: mencoder". Tzn. neinstalujes zadny balik mencoder ale pouze mplayer a zavislosti jsou presto splneny.
/opt/kde3
. Pokud to jiná RPM distribuce dává jinam, tak je poněkud logické, že se tam musí dát nějaká podmínka. Nebo musí existovat nějaká globální proměnná ${KDE3_ROOT_DIR}, která by byla implementovaná ve všech RPM distribucích. Stejně tak naming convention se liší. V openSUSE ají knihovny prefix lib, python moduly python-. A není to způsobeno tím, že by to byla chyba RPM, ale tím, že každá distribuce má svoje specifika pro určité věci.
Na druhou stranu, klad této "feature" je, že pokud máte deb pro Ubuntu Gusty, tak na U.G. jistojistě funguje.ROFL. To je snad samozřejmost, nikoli klad?
Že jsou deby pouze pro debian, ano, to jsou. Debian a Ubuntu spolu v tomhle nejsou kompatibilní. Balíčky mezi jednotlivýma release Ubuntu taky ne. Jistě, je to omezení.Asi mám štěstí, ale občas instaluji balíček z Debianu do Ubuntu a zatím (musím zaklepat) žádný problém...
Balíčky mezi jednotlivýma release Ubuntu taky ne.Ehm, a není to čistě náhodou kvůli tomu, že v dalším vydání Ubuntu jsou oproti minulému i knihovny a aplikace ve vyšších verzích? A tudíž to nezávisí na balíčcích jako takových, ale na jejich obsahu? Příklad: zkus si (klidně s RPM) nainstalovat software A, které potřebuje B ve verzi 2, přičemž je dostupné jen B ve verzi 1... Ach jo.
Ale možnost požadovat knihovnu abc.so verze 3.1 v RPM je IMHO snazší, než zahrnout všechny existující názvy DEB baíčků pro všechny existující Debian-based distra.No, z mych zkusenosti naopak plyne, ze debian based distra maji jednotny nazvy balicku (nazev, pripadne nazev-verze), dale je znak podtzitko a nasleduje skutecne verze baliku, dal pak nasleduje architektura. Vetsinou tak plati, ze nejakej DEB z nejaky verze debianu jde nainstalovat na jiny debian based distra, zalozeny na ty originalni verzi debianu. Naopak co jsem delal drive s RH, tak RH, Mandrake i SUSE mely pro jeden stejnej program ruzny jmena (nebo prinejmensim verze), takze neslo vzit balik od SUSE nebo MDK a nainstalovat na RH, protoze to vyzadovalo jinej RPM s nazvem, kterej se v RH jmenoval samozrejme jinak.
No, z mych zkusenosti naopak plyne, ze debian based distra maji jednotny nazvy balicku (nazev, pripadne nazev-verze), dale je znak podtzitko a nasleduje skutecne verze baliku, dal pak nasleduje architektura.Jednotný mají pouze styl pojenovávani, sttejně jako RPM má jednotný styl pojmenovávání. Přijde mi, že z RPM konvence lze vyčíst o něco více informací. Stačí se podívat na Debian vs. Ubuntu, a je jasné, že kompatibita je děj náhodný, nikoli zamýšlený.
RH, Mandrake i SUSE mely pro jeden stejnej program ruzny jmena (nebo prinejmensim verze)Tohle právě řeší RPM tím, že odkazuje na soubory. Není tedy třeba znát, ve kterém balíku se v dané distribuci knihovna nachází. Solver si ji najde sám. Proto není vyřešení závislostí mezí různými distry závislé na pojmenování balíčku jako u Debianu.
RPM závisí na konkrétních knihovnách v konkrétních verzích.... zkompilovaných se správným ABI, správnými volbami a správnými verzemi třetích knihoven? Tím chci říct, že rozhodně neplatí "stejné jméno souboru => bude to fungovat." Ono to 100% neplatí ani u jmen balíků, ale aspoň se dá říct do bugreportu "reporter: vole, tvůj balik závisí na špatnym balíku" na rozdíl od "packager: z kerý žumpy si vyhrabal tuhle knihovnu?" Na druhou stranu chápu, že pro enterprise binární distro, který má za cíl podporovat binární aplikace třetích stran, je ten RPM způsob asi vhodnější.
packager: z kerý žumpy si vyhrabal tuhle knihovnu?protože stejně tak může nastat stejný případ kdy to bude
packager: z kerý žumpy si vyhrabal tenhle balík se stejným jménem?A anapříklad u kernelu umí záviset na konkrétních symbolech.
mantisha:/home/marek # rpm -qp --requires madwifi-kmp-default-0.9.4_2.6.25.4_9.1-1.i586.rpm rpmlib(VersionedDependencies) <= 3.0.3-1 kernel-default grep coreutils /bin/sh /bin/sh /bin/sh rpmlib(PayloadFilesHavePrefix) <= 4.0-1 rpmlib(CompressedFileNames) <= 3.0.4-1 kernel(default:vmlinux) = e61690aa8c2e0b5e rpmlib(PayloadIsLzma) <= 4.4.2-1 mantisha:/home/marek # rpm -qp --provides madwifi-kmp-default-0.9.4_2.6.25.4_9.1-1.i586.rpm madwifi-kmp = 0.9.4_2.6.25.4_9.1 ksym(_ath_hal_attach) = ea10ec7e ksym(ath_hal_computetxtime) = 770fb583 ksym(ath_hal_detach) = 9616c7c2 ksym(ath_hal_getuptime) = 2d2cd95d ksym(ath_hal_getwirelessmodes) = 88074857 ksym(ath_hal_init_channels) = e8a4894a ksym(ath_hal_memcmp) = 93cb6276 ksym(ath_hal_memcpy) = a0fa8bf4 ksym(ath_hal_memzero) = 4dce8c00 ksym(ath_hal_mhz2ieee) = 62f37fda ksym(ath_hal_printf) = 5b1d4795 ksym(ath_hal_probe) = 51a400eb ksym(ath_hal_process_noisefloor) = cf91b80d ksym(ether_sprintf) = d0732629 ksym(ieee80211_aclator_get) = 5caa4f9c ksym(ieee80211_aclator_register) = ad58224e ksym(ieee80211_aclator_unregister) = 551ef76e ksym(ieee80211_add_wds_addr) = 99d437f8 ksym(ieee80211_alloc_node) = 2a62053c ksym(ieee80211_announce) = 879f53fa ksym(ieee80211_announce_channels) = 16e54b10 ksym(ieee80211_authenticator_backend_get) = 34b03391 ksym(ieee80211_authenticator_backend_register) = 7f290d29 ksym(ieee80211_authenticator_backend_unregister) = 8ee89cfe ksym(ieee80211_authenticator_register) = 5021f947 ksym(ieee80211_authenticator_unregister) = 9974adc5 ksym(ieee80211_beacon_alloc) = c716d8f0 ksym(ieee80211_beacon_miss) = be0d8b18 ksym(ieee80211_beacon_update) = 53297b36 ksym(ieee80211_bg_scan) = 1514341e ksym(ieee80211_chan2ieee) = 3c384c88 ksym(ieee80211_chan2mode) = 5f729065 ksym(ieee80211_cipher_none) = ddb95144 ksym(ieee80211_create_ibss) = d6f7910a ksym(ieee80211_create_vap) = f7a3a23f ksym(ieee80211_crypto_attach) = 25643454 ksym(ieee80211_crypto_available) = eef90ede ksym(ieee80211_crypto_decap) = 2faa52c5 ksym(ieee80211_crypto_delglobalkeys) = ac06045c ksym(ieee80211_crypto_delkey) = 9771ad25 ksym(ieee80211_crypto_detach) = a914437b ksym(ieee80211_crypto_encap) = dac0f942 ksym(ieee80211_crypto_newkey) = a06a3b94 ksym(ieee80211_crypto_register) = 6622a37e ksym(ieee80211_crypto_setkey) = 15eb2422 ksym(ieee80211_crypto_unregister) = ac8e5d86 ksym(ieee80211_crypto_vattach) = 313f1b6c ksym(ieee80211_crypto_vdetach) = bd4f6c43 ksym(ieee80211_ctl_subtype_name) = f539e971 ksym(ieee80211_del_wds_node) = e1725a6b ksym(ieee80211_dfs_test_return) = 2bd0ad1b ksym(ieee80211_dturbo_switch) = ac5ee46d ksym(ieee80211_dump_pkt) = a9c9b10 ksym(ieee80211_encap) = ddcd18f3 ksym(ieee80211_find_channel) = 5edba707 ksym(ieee80211_find_node) = a09fa133 ksym(ieee80211_find_rxnode) = b05400c3 ksym(ieee80211_find_txnode) = 926cd855 ksym(ieee80211_find_wds_node) = cde219a2 ksym(ieee80211_free_node) = b5680abd ksym(ieee80211_getcfframe) = 242a6041 ksym(ieee80211_getrssi) = b0918563 ksym(ieee80211_ibss_merge) = eadeb4b8 ksym(ieee80211_ieee2mhz) = 54982107 ksym(ieee80211_ifattach) = abdbc710 ksym(ieee80211_ifdetach) = 5f350154 ksym(ieee80211_input) = f3599314 ksym(ieee80211_input_all) = 7f7dd4da ksym(ieee80211_input_monitor) = a0edd37a ksym(ieee80211_ioctl_create_vap) = f6376fc7 ksym(ieee80211_iterate_dev_nodes) = 4b02dcda ksym(ieee80211_iterate_nodes) = 714f2261 ksym(ieee80211_mark_dfs) = 6520e4ae ksym(ieee80211_media2rate) = 469b25e9 ksym(ieee80211_media_change) = 8b62080f ksym(ieee80211_media_status) = 6fa206ab ksym(ieee80211_mgt_subtype_name) = 737a25a1 ksym(ieee80211_mhz2ieee) = 80b53b09 ksym(ieee80211_monitor_encap) = 2ff3c8f9 ksym(ieee80211_node_authorize) = fb29da0 ksym(ieee80211_node_leave) = d0188136 ksym(ieee80211_node_unauthorize) = 4997620e ksym(ieee80211_note) = 2ec0a37d ksym(ieee80211_note_frame) = b021eb3b ksym(ieee80211_note_mac) = 588c59ad ksym(ieee80211_notify_michael_failure) = 9535eba7 ksym(ieee80211_notify_replay_failure) = f4199f18 ksym(ieee80211_phymode_name) = aa7782e ksym(ieee80211_print_essid) = 3075477 ksym(ieee80211_proc_vcreate) = 44a890b9 ksym(ieee80211_rate2media) = 1cbe2d47 ksym(ieee80211_rate_attach) = 3a3e38f0 ksym(ieee80211_rate_detach) = 42ddc169 ksym(ieee80211_rate_register) = 57470585 ksym(ieee80211_rate_unregister) = d6c0376a ksym(ieee80211_remove_wds_addr) = be9b5ba5 ksym(ieee80211_saveie) = 2c1b6439 ksym(ieee80211_scan_dfs_action) = 6c4a6987 ksym(ieee80211_scan_dump_channels) = 98e463da ksym(ieee80211_scanner_get) = 4ee6889b ksym(ieee80211_scanner_register) = 7a05a549 ksym(ieee80211_scanner_unregister) = fec38de5 ksym(ieee80211_scanner_unregister_all) = 87c420a ksym(ieee80211_send_qosnulldata) = 68b90721 ksym(ieee80211_setmode) = b8ec8e7f ksym(ieee80211_sta_join) = 82e9cea9 ksym(ieee80211_sta_join1_tasklet) = 1ed27f27 ksym(ieee80211_start_running) = 40acaed4 ksym(ieee80211_start_scan) = 7e061072 ksym(ieee80211_state_name) = bc0d2992 ksym(ieee80211_stop) = e5b64cec ksym(ieee80211_stop_running) = 81b49b14 ksym(ieee80211_vap_attach) = 4303db0a ksym(ieee80211_vap_detach) = ed7be7fb ksym(ieee80211_vap_setup) = c0623fc0 ksym(ieee80211_wme_acnames) = 1009d14d ksym(ifmedia_ioctl) = 200660f1 madwifi-kmp-default = 0.9.4_2.6.25.4_9.1-1 mantisha:/home/marek #Ale máš pravdu, kdyby umělo záviset na konkrétních symbolech u všech knihoven bylo by to cool, ale afaik to neumí.
Ono se samozřejmě předpokládá, že uživatel bude využívat balíčky pro konkrétní distribuci, tak nevím proč tady strkáš ten příkladProtože ostatní v diskuzi právě tohle (možnost použít mimo distribuci) vyzdvihují jako velkou výhodu. Pokud distribuce má fungovat především jako celek (já si to taky myslím), tak závislost na konkrétním balíku nikoho nezabije. Kde je víc balíků poskytujících stejnou knihovnu se stejnou sémantikou/ABI/..., tam se dají použít virtuální balíky (v Debianu je tuším tahle situace u libGL.so). Naopak, kde jsou dva balíky se stejnou knihovnou s různou sémantikou/ABI/..., tam má uživatel smůlu, ale aspoň si nenainstaluje něco, co pak nefachá.
Ale máš pravdu, kdyby umělo záviset na konkrétních symbolech u všech knihoven bylo by to coolNevím, jestli by to stačilo.
Ale máš pravdu, kdyby umělo záviset na konkrétních symbolech u všech knihoven bylo by to cool, ale afaik to neumí.Bohužel nestačilo: dvě různé verze knihovny mohou mít funkci stejného jména, která se volá jinak. Typický příklad je třeba, má-li funkce za parametr pointer na strukturu, která mezi verzemi změnila deklaraci.Zkusím to někdy někde navrhnout
A anapříklad u kernelu umí záviset na konkrétních symbolech.
Na fóru sem nalezl velmi častý dotaz proč ještě někdo používá to zaostalé RPM, když balíčky Debianu a Gentoo jsou mnohem lepší.Nebylo to spis mysleno tak, ze SPEC file je "takovej divnej", kdezto debiani control (txt file) a rules (make file) a Gentoovskej ebuild (bash) jsou jednodussi na uceni? kdyz jsem jeste v dobe RH7.3 az RH9 zkousel delat SPEC soubory, tak to bylo obcas docela drina. Tehdy to melo jakousy %if konstrukci, ale nic moc slavnyho. Samozrejme v tomhle ma ebuild s USE hodne navrch.
Suggests:
a Recommends:
)
2) metabalíčky, alternativy (prázdný balíček totem s Depends: totem-gstreamer | totem-xine
)
3) virtuální balíky (všechny balíčky, které umí posílat maily mají: Provides: mail-transport-agent
)
4) množství balíčků přímo v distribuci
5) frontendy nad dpkg (dselect/apt-get/aptitude)
V jednotlivostech RPM deb dohání a předhání, ale Debian toto všechno měl pohromadě a funkční už v době, kdy se v RPM-based distribucích používalo tak akorát rpm -i balíček.rpm
.
Jinak díky za pohled zvenku na dpkg/apt.
1) slabé závislosti (Suggests: a Recommends:)RPM je umí taky, minimálně to susí.
3) virtuální balíky (všechny balíčky, které umí posílat maily mají: Provides: mail-transport-agent)Tohle jde v RPM taky.
4) množství balíčků přímo v distribuciTo má být výhoda formátu balíčků? Ale notak...
5) frontendy nad dpkg (dselect/apt-get/aptitude)Zypper?
Jasně, není to vlastnost balíčkovacího systému. Spíš okolnost, kvůli které byly ty vlastnosti/výhody v Debianu dostupné mnohem dřív než jinde.4) množství balíčků přímo v distribuciTo má být výhoda formátu balíčků? Ale notak...
Apt tím jasně naznačil, že ty jazykové balíky jsou pro jinou verzi OpenOffice než která je v repository k dispoziciOprava: ... než kterou má bibri nainstalovanou.
OmylSilně pochybuji.
Ověřoval jsem to v přímo v repozitářích na FTPSpíš myslím, že jste si ověřil něco jiného, než v čem byl problém (kromě toho, že rozhodnutí APTu na FTP nezávisí). Pokud myslíte, že ne, hoďte do placu verze nainstalovaných OOo balíků a verzi instalačních kandidátů. Jinak můžu poradit jen používat aptitude (kde by se toto nestalo) nebo napsat bugreport na ooo-l10n-cs, protože tahle praxe (deklarování verzované závislosti pomocí Conflicts:) je podle mě porušení debian policy (konflikt mezi balíky neposkytujícími stejnou/podobnou funkcionalitu). Jsou pro to důvody, i když dle mě značně pomýlené. Jenže občas se na debian-devel objeví nějaký exot, který toto prosazuje, a pak je z toho flame, takže bych to nehrotil.
Hardy Heron, povoleny pouze oficialni zdroje (main, multiverse, universe, restricted) a z aktualizaci jen security a updates (provedeno)Ubuntu vůbec neznám, ale nemohlo se čirou náhodou stát, že jeden den bylo v těhle zdrojích OOo (např.) 2.3.0 a další den 2.3.1?
ale tohle by se proste stat nemeloPrávě proto by to chtělo ten bugreport.
ChudákuZas tak moc mě litovat nemusíšJá mám pořád iluze o tom, že existuje něco, co aspoň trochu funguje. Vědět, jak je to doopravdy (a ono je to jasné - vždycky je to všude stejné) musí být značně frustrující
... blogpost, protože jeho autor prostě nepochopil, že to co vyhovuje jednomu, nemusí vyhovovat druhému a do pekla závislostí se lze dostat jak u RPM tak u DEB...Já bych vás prosil, aby jste přestal takto lhát. Nikde netvrdím, že RPM je lepší ani že musí vyhovovat každému.
problem je v tom, ze susi RPM, na ktere jsi zvykly, neni "to" RPM, i kdyz se tak snazime tvarit.No jasně, to vím. Většinou to doplňuji komentářem "alespoň v SUSE", ale pokud jsem to někde zapoměl, tak se omlouvám.
Susi RPM melo oproti upstreamu jeste donedavna vic nez 100 patchu. Ted se sice konecne zacina darit spoluprace a je to lepsi (donedavna nas upstream ignoroval), ale porad je to takovy bes, ze si nekdo na update RPM u nas troufnul naposledy v roce 2005, pokud vim.To mě těší.
A pokud vim, zrovna ty tagy Suggests a spol. RPM umi jenom tise ignorovat, zbytek se resi jindeNo jasně, ono taky dpkg pokud vím tyhle věci neřeší, řeší je až apt, v SUSE je zase řeší libZYpp. Donedávna (možná stále) je neuměl ani OBS, protože ty tagy nedával do metadat k repu. Psali jsme report, tak už to snad někdo fixnul.![]()
Koukám, že sama nemajíc ideových nepřátel, přicházím o spoustu kladných pocitů:D![]()
Suggests:
" a "Recommends:
" (synonyma).
Jiná otázka je, jak jsou tyto tagy využívány nástroji vyšší úrovně. APT-RPM umí informovat o doporučených balíčcích, nicméně abych ho donutil pomocí přepínače považovat doporučené balíky za vyžadované, musel jsem ho trochu přiohnout. Jak jsou na tom v tomto ohledu yum, smart, urmpi a zypper nevím.
No, názor na deb mi tohle vytvořilo rychle a ne zrovna kladný.Mně naopak velmi silný negativní názor na RPM vytvořilo to, že je to jakýsi podivný binární formát, který se nedá standardními nástroji rozbalit (když pominu metodu "najděte si gzipovou signaturu a až do té usekněte hlavičku"). Sice už jsem mu to asi prominul, ale ještě ne úplně, protože za tím nevidím žádný rozumný důvod.
--nodeps
?
Nějak mi připadá, že to je chiméra, kterou už dlouho nikdo neviděl, ale všichni se s ní zaklínají.
Na rozdíl od rpm lze však deb balíčky poměrně jednoduše opravit.Nějak nechápu co je tak složitého na opravě RPM balíčku ? Nainstaluji si zdrojový balíček, opravím .spec soubor podle svého a zadám
rpmbuild -bb balik.spec
. Hotovo.
Kdyby byl balíčkovač stavěn nad archivátorem, pak stačí novou kompresi dodělat do archivátoru a bude ji používat nejen balíčkovač, ale také spousta dalších programů.
Ale vždyť tak je to implementované? RPM balík od nějakého místa snad není nic než jiného než CPIO soubor něčím komprimovaný (gzip, bzip2...). Jenže problém s LZMA je, že existují snad minimálně dva (dokonce myslím, že snad tři) způsoby, jak ten stream uložit do souboru, a netuším, jak se řeší takové věci, jako je dekomprimovatelnost streamu ve více vláknech. (LZMA ji podporuje - tedy v p7zipu - a to velice efektivně, jestliže LZMA je podstatně rychlejší než bzip2 i na jednom jádře, pak dvoujádro (alespoň mně) skrouhne z wallclock time dalších asi čtyřicet procent.) A nejsem si jist ani tím, jak moc je momentálně stabilní. S největší pravděpodobností by i při přímém použití formátu .tar.lzma musel být předepsaný konkrétní software a jeho verze, jak moc by si tím člověk pomohl?
Jinak, přiznám se, že účely archivace velkého množství dat (bez potřeby zachování některých atributů) používám čistě 7z. Má takovou docela pěknou fíčuru, v solid režimu seřadí za sebe soubory s podobným obsahem (nevím, jestli podle hlaviček nebo přípon - každopádně to v praxi znatelně funguje), takže ten slovník se mezi jednotlivými soubory skutečně dokáže účinně recyklovat. Netušíš o něčem podobném pro tar?
Ale vždyť tak je to implementované? RPM balík od nějakého místa snad není nic než jiného než CPIO soubor něčím komprimovaný (gzip, bzip2...).... jen kdyby do tohoto místa nebyly v souboru nabastlená metadata v úplně jiném formátu. Přitom by bylo tak jednoduché (a stejně efektivní) uložit je jako první soubor do archivu.
Netušíš o něčem podobném pro tar?Zatím jsem nic takového neviděl. Ale stálo by za to propojit tar s třídící heuristikou z GITu
To ještě nic neznamená. Stejně tak by se dalo tvrdit, že gz i bz2 jsou zbytečné, protože máme (měli jsme) compress.Jenže GZ i BZ2 přinášejí oproti compressu něco nového (účinnější kompresi), zatímco RPM oproti archivačním formátům zhola nic.
Mimoto rpm je starší než bz2.Jak to spolu souvisí?
Jenže GZ i BZ2 přinášejí oproti compressu něco nového (účinnější kompresi), zatímco RPM oproti archivačním formátům zhola nic.
Momentálně proti nim přináší třeba LZMA, kterážto komprese (o dost účinnější a rychlejší než BZ2) snad kromě 7z formátu standardní kontejner zatím nemá. head
" je co do efektivity ekvivalentní rouře "gunzip | cpio | head
" ? Uvědomuješ si vůbec, že data v cpio.gz jsou komprimována ?
head
, protože dopředu nevím, kolik těch dat bude. Na extrakci souboru samozřejmě nepotřebuji volat spoustu externích programů, mohou to klidně být knihovny. Dekomprese GZIPu je oproti fyzickému čtení dat z disku záležitost okamžiku.
A moc by se mi to líbilo - myslím, že máme lidi, kteří mají na to, udělat konečně něco, co funguje.<rejp> Doporučuju lidi z libzyppího teamu, ti nedávno prokázali, že skutečně dokážou dělat věci, které "konečně fungují".
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.