Společnost JetBrains uvolnila Mellum, tj. svůj velký jazykový model (LLM) pro vývojáře, jako open source. Mellum podporuje programovací jazyky Java, Kotlin, Python, Go, PHP, C, C++, C#, JavaScript, TypeScript, CSS, HTML, Rust a Ruby.
Vývojáři Kali Linuxu upozorňují na nový klíč pro podepisování balíčků. K původnímu klíči ztratili přístup.
V březnu loňského roku přestal být Redis svobodný. Společnost Redis Labs jej přelicencovala z licence BSD na nesvobodné licence Redis Source Available License (RSALv2) a Server Side Public License (SSPLv1). Hned o pár dní později vznikly svobodné forky Redisu s názvy Valkey a Redict. Dnes bylo oznámeno, že Redis je opět svobodný. S nejnovější verzí 8 je k dispozici také pod licencí AGPLv3.
Oficiální ceny Raspberry Pi Compute Modulů 4 klesly o 5 dolarů (4 GB varianty), respektive o 10 dolarů (8 GB varianty).
Byla vydána beta verze openSUSE Leap 16. Ve výchozím nastavení s novým instalátorem Agama.
Devadesátková hra Brány Skeldalu prošla portací a je dostupná na platformě Steam. Vyšel i parádní blog autora o portaci na moderní systémy a platformy včetně Linuxu.
Lidi dělají divné věci. Například spouští Linux v Excelu. Využít je emulátor RISC-V mini-rv32ima sestavený jako knihovna DLL, která je volaná z makra VBA (Visual Basic for Applications).
Revolut nabídne neomezený mobilní tarif za 12,50 eur (312 Kč). Aktuálně startuje ve Velké Británii a Německu.
Společnost Amazon miliardáře Jeffa Bezose vypustila na oběžnou dráhu první várku družic svého projektu Kuiper, který má z vesmíru poskytovat vysokorychlostní internetové připojení po celém světě a snažit se konkurovat nyní dominantnímu Starlinku nejbohatšího muže planety Elona Muska.
Poslední aktualizací začal model GPT-4o uživatelům příliš podlézat. OpenAI jej tak vrátila k předchozí verzi.
Balíčkovací systémy jsou jistě tématem, které hodně hýbe světem GNU/Linuxu. Jedni je vynášejí, jiní zatracují. Co vlastně balíčkovací systémy přináší ?
První bod je jasný. Snadná instalace programů. I když pojem "snadná" je velmi
relativní, sám dobře vzpomínám na hodiny strávené na rpmfindu hledáním závislostí.
Závislosti jsou vůbec jednou z nejvíce kritizovaních vlastností balíčkovacích systémů.
Jenže narozdíl od skutečného světa mohou být tyto závislosti velmi užitečné.
Protože kdyby balíčkovací systém neřešil závislosti, nainstalovali byste program
a zjistili, že nejde. Chybí libxyzblbost.so.4
. Ale kde sehnat libxyzblbost
ve správné verzi ? Bez balíčkovacích systémů vám zbývá google, najít správnou verzi
projektu, zkompilovat, případně nainstalovat a zjistit, že nefunguje, protože
se nesnese libnesmysl.so.5 verze 1.14.3. Balíčkovací systém alespoň ví, co
přesně potřebujete — který balíček. Ale ani tohle řešení není zcela ideální.
Když najdete a stáhnete potřebné balíčky (což je o něco jednodušší díky službám
typu rpmfind), zjistíte, že vyžadují další balíčky, a ty mají další závislosti.
Tomuto jevu se říká dependency hell a je často kritizován uživateli OS, který
se nejmenuje. Jenže zapomínají na obrovské výhody tohoto systému. Nemusíme
nic psát dvakrát. V nejmenovaném OS si každý program řeší všechno sám za sebe,
vznikají složité nesourodé balasty bez návaznosti na okolní prostředí. Ve
světě GNU/Linuxu je to jinak. Vývojáři se snaží o maximální využití existujícího
kódu a doboru spolupráci programů. A od tohu zde máme systém závislostí. Pravda,
instalece programů tímto způsobem nebyla nejjednodušší a dalo se tím strávit nějakých pár
hodin.
Ale samozřejmě vývoj jde kupředu a objevuje se nový trend — repozitáře. Ty zdánlivě řeší mnoho nevýhod stávajícího systému. Nemusíte hledat balíčky — chcete firefox ? Napište impkg install firefox a máte. Nemusíte řešit závislosti, balíčkovací systém je natolik inteligentní, že je všechny v repozitářích vyhledá a automaticky stáhne a nainstaluje (s vaším souhlasem). Je to výrazný pokrok oproti předchozí variantě, ale má jeden velký nedostatek. Co když se daný balíček nenachází v repozitářích vaší distribuce ani jiných kompatibilních repozitářích ? Většina balíčkovacích systémů založených na repozitářích nabízí i klasickou variantu — instalaci balíčků běžným způsobem ze souboru. Jenže na takovouto instalaci se zase většinou nevztahují výhody repozitářů a automatické řešení závislostí. Závislosti si proto musíte nainstalovat sami — většinou z repozitářů, což je celkem jednoduché, ale přesto je nepochopitelné, proč tato činnost často není balíčkovacím systémem vykonána automaticky. Ale závislosti, které nenajdeme v repozitářích, musíme sehnat a nainstalovat klasickým způsobem a opět se vracíme do raných dob rpm.
Jako taková menší odbočka se v této době začaly objevovat různé "nebalíčkové" systémy instalace, spíše podobné instalátorům v OS, který nesmíme jmenovat. Tyto nástroje často neřeší závislosti vůbec — spoléhají na určitou základní množinu knihoven, která musí být na cílovém systému přítomna (glibc, gtk+, ...) a zbytek je přibalen. Zde je zcela evidentní, že se nejedná o moc inteligentní řešení, o čemž svědčí i jeho původ.
Další změnou na poli balíčkových systémů byly systémy využívající balíčky ze zdrojového kódu. Tyto systémy kombinují většinu (ne)výhod balíčkovacích systémů s většinou (ne)výhod kompilace programů. Výrazně se zvyšuje čas potřebný k instalaci balíčků, zároveň se ale zvyšuje rychlost a přizpůsobitelnost programů, což ocení převážně pokročilí uživatelé. Ovšem i tyto nástroje kopírují klasické rysy balíčkovacích systémů, ať už jde o závislosti nebo repozitáře, a objevují se stejné problémy.
Proto rozumným krokem ve vývoji balíčkovacích systémů je sjednocení repository a non-repository balíčků. Jednou z mnoha myšlenek je identifikace balíčků pomocí URL, která tak vlastně vytváří z celého internetu jeden velký repozitář. Instalace je poté pohodlná i u programů, které nejsou součástí distribuce, prostě napíšete impkg install http://program.example.org/program-1.0. Ovšem zde je problém nejednoznačnosti. Jak mám balíčkovací systém poznat, že http://nesmysl.com/libgtk-2.6 a http://packages.imdistro.org/pkg/gtk2-2.6 jsou balíčky stejné knihovny ? Některé programy si jako závislost mohou vybrat první URL, jiné druhou. Systém potom nainstaluje oba (zdánlivě rozdílné) balíčky a vzniknou konflikty. V podstatě ať přemýšlíte nad otázkou správného řešení balíčků jakkoliv, ideální řešení neexistuje. Ale můžeme se mu libovolně přibližovat. Proto další rozšíření předchozího nápadu zahrnuje jednoznačné názvy balíčků. Tyto názvy by se měly vytvářet podle jednotných pravidel, ideálně po dohodě s autorem programu, aby byly skutečně jednotné. Potom je jedno, jestli instalujete http://gtk.org/gtk2/2.6 nebo http://impkg.nesmysly.com/gkt2-ultimate/gtk2/2.6-u. Systém rozliší stejný název a vybere nejvíc vyhovující verzi. Zároveň si sebou distribuce může nést připravený seznam vzorů URL, kde se dají hledat balíčky přímo podle názvu. Takže v /etc/impkg.conf bude např. http://packages.imaginarninesmysl.net/ a při požadavku impkg install program se vybere http://packages.imaginarninesmysl.net/program, pokud existuje. Pokud ne, zkusí další položku v seznamu atd.
I toto řešení má značnou nevýhodu v neexistenci seznamu balíčků, kde by si uživatel neznalý konkrétního názvu mohl vybrat, co hledá. To ale není příliš velký problém, stačí přidat katalog balíčků, který si nese popisy balíčků spolu s jejich URL. Ten by bylo možné vytvářet automaticky se zadáním URL zdrojů, které by obsahovaly potřebné metainformace.
Takže finální podoba tohoto návrhu je (nemám tušení, zda něco podobného někde existuje, či nikoliv; veškerá podobnost se skutečnými implementacemi je čistě náhodná): balíčky identifikujete podle jednoznačného názvu a podle URL, která také odpovídá fyzickému umístění balíčku. URL může vypadat jako http://server/cesta/název nebo http://server/cesta/název/verze pro instalaci kontkrétní verze. V adresáři /cesta/název/verze na serveru pak leží balíček verinfo s informacemi o balíčku, popisem, definicí závislostí, atd. Např:
#IS:text.config.impkg-verinfo #impkg package file for package gtkBlbost [Package] pkgname=blbost version=0.1 [Files] data=http://server/data/blbost-0.1.tar.bz2 configfiles=/etc/blbost.conf /etc/.blbostrc #nebodou mazány ani přepisovány scripts=preinstall postremove #seznam skriptů z dataarchivu (z adresáře např. .scripts), #které jsou spouštěny při daných operacích (instalace, odstranění, update, ...) [Locations] #nutno uvést lokace všech vyžadovaných balíčků pro případ, že systém žádné implicitní nemá #ale správce balíčků ma plné právo použít jiné lokace dle vlastního či uživatelova uvážení gtk2=http://packages.impkg.org/gtk2 blbost-extras=http://server/cesta/blbost-extras #nesmysl není definován, protože je vyžadována pouze jeho nepřítomnost [Dependencies] require gtk2 >=2.4 recommend gtk2 >=2.6 suggest blbost-extras =0.1 require !nesmysl #nesnese se s konkurenčním programem [Changelog] ...a v nadřazeném adresáři soubor pkginfo se souhrným obsahem, např.
#IS:text.conf.impkg-info [Package] pkgname=blbost url=http://server/cesta/blbost [About] #informace pro katalog category=misc #nezařaditelné name=gtkBlbost desc=Absolutní blbost [Versions] all=0.1 0.2 0.3b latest=0.3b stable=0.1 testing=0.2 devel=0.3bTakovýto systém by mohl fungovat jak pro kompilované balíčky ala Gentoo, tak pro binární. To ale pro tuto chvíli není podstatné. Takže každý balíček by měl podobné definice a soubory ke stažení. Vlastní balíčkovací systém také musí mít jednoduchou konfiguraci, např. /etc/impkg.conf:
#impkg configuration file [Prefs] preferred=devel #stable, testing, devel, cvs, ... [Locations] gtk2=http://gtk.impkg.org/gtk2 [Repositories] #url "repozitářů" ve kterých zkouší hledat balíčky http://packages.impkg.org http://packages.imdistro.org sftp://customer1453:heslo@store.impkg.comPotom by bylo možné instalovat klasickým způsobem:
impkg install http://server/cesta/blbost impkg install http://server/cesta/blbost/1.0 impkg install http://server/cesta/blbost 1.0 impkg install http://server/cesta/blbost testing impkg install blbost #za předpokladu, že je impkg install blbost 1.0 #v některém z "repozitářů", #tedy implicitních vzorů URLOdstraňování by bylo ještě jednodušší prostě
impkg remove blbost
,
potom samozřejmě aktualizace typu impkg update blbost
nebo rovnou
impkg system-update
. Ovšem dalším faktem je, že spousta současných repository-based
správců balíčku opomíjí uživatele nedisponující připojením k internetu, přesněji disponující, ale
na jiném počítači. Ti se musí spokojit s klasickou zdlouhavou metodou. Přitom řešení je tak jednoduché.
Vyexportovat informace o nastavení balíčkovacího systému a nasinstalovaných balíčcích do jednoho souboru,
ten přenést na libovolném médiu na počítač s internetem, stáhnout vše potřebné do speciálního archivu,
který se opět importuje na cílovém počítači. Např. impkg export >/media/usbdisk/my.ipe
,
a na druhém počítači se použije jednoduchá utilitka imdl, která nevyžaduje ani instalaci (pokud
v systému není přítomen impkg). Nejdříve se připraví a otevře cílový archiv, např. imdl open
/media/sdb1/my.ipe /media/sdb1/programy.ipi
(první soubor jsou vyexportované informace o balíčcích
a druhý je název archivu, do kterého se budou ukládat stažené programy). Poté je možno používat imdl
stejným způsobem jako impkg, např imdl install blbost
. Nakonec je třeba ukončit práci s
archivem, např imdl close
. Archiv lze potom naimportovat na původním počítači, např.
impkg import /media/usbdisk/programy.ipi
. Je to rozhodně o něco jednodušší než ruční stahování
balíčků...
V předchozím odstavci jsem jen tak zhruba nastínil, jak bych si představoval
implementaci dobrého balíčkovacího systému. Přemýšlel jsem o tom docela dlouho,
a žádné lepší řešení mě nenapadlo. Pokud máte nějaké rozumné nápady, můžete se
o ně podělit s ostatními v komentářích. Popsané kategorie balíčkovacích systémů
byly brány zcela obecně, avšak většina z nich doopravdy existuje minimálně v jednom
exempláři. Já jsem zatím víceméně spokojeným uživatelem gentoo, ale instalace čehokoliv
mimo repozitáře je hrozná. PORTDIR_OVERLAY
už mi leze krkem a zdá
se mi, že k nainstalování takovéhoto balíčku je třeba až příliš mnoho úkonů,
nemluvě o udržování programu aktuálního. Jisté řešení se pokouší nabídnout layman,
ale stále jsou nejčastěji šířeny samotné ebuildy. impkg v tomto textu označuje
imaginární balíčkovací systém, pod kterým si můžete představit cokoliv. Nemám čas
ani chuť nastíněné myšlenky implementovat a nechat vzniknout tisícprvní balíčkovací systém,
už takhle je jich dost. Berte to jen jako námět k zamyšlení nad stávající implementací,
třeba to někoho inspiruje...
Tiskni
Sdílej:
ln -s /opt/program/share/program /usr/share/program
. Kouzlo jednoduchosti...
hodně velkým písmem, ať to nikdo nezkouší instalovat příkazem make installAND
Balíčkovací systém by neměl dopustit, aby si dva balíčky přepsaly binárky nebo jakýkoli jiný soubor
make install
asi nebude součáští nějakého balíčkovacího systému. :)
A myslím si, že by nebylo od věci mít možnost takový přepis povolit, pokud to explicitně balíkář povolí, zajisté po zralé úvaze. A myslím si, že se tak děje běžně, ale jen za předpokladu, že soubor nebyl změněn. Tedy pokud nainstaluješ apache z balíku a hned poté (ještě než upravíš konfiguráky) nainstaluješ php, tak si ten balík php upraví konfigurák apache, pokud dále nainstaluješ mysql a ještě si neupravil php.ini tak si to IMHO opět povolí dynamický modul pro spolupráci mysql a php.
jak nainstalovat program tenaten do adresáře tohoatohoTo je jednoduché:
./configure --prefix=/home/ja/mujvlastniadresar
- a nic mimo nepocuchám. A žádné řeči o kompilaci, pokud vymýšlím kraviny, dostanu zákonitě kravskou odpověď.
Proč by si běžný uživatel nemohl nainstalovat program? Běžný uživatel domácího desktopového PC si sám běžně instaluje operační systém a programy. Na tom není nic nenormálního. Každý nepotřebuje mít doma administrátora, aby mu to udělal.Odpověď se netýkala instalace samotné, ale umístění instalovaných souborů. Ale poslední větou jste si odpověděl sám: Právě že každý nemusí mít doma administrátora, aby mu určoval, kam který soubor má přijít, že... Takže to prostě nechám na balíčkovacím systému, a když chci vyvádět psí kusy, tak si je vyvádím pomocí prefixu při kompilaci
C:\Program Files
, v horším případě C:\PROGRA~1
, a basta fidli.