Před 70 lety, 7. června 1954, ve věku 41 let, zemřel Alan Turing, britský matematik, logik, kryptoanalytik a zakladatel moderní informatiky.
NiceGUI umožňuje používat webový prohlížeč jako frontend pro kód v Pythonu. Zdrojové kódy jsou k dispozici na GitHubu pod licencí MIT.
Open source platforma Home Assistant (Demo, GitHub, Wikipedie) pro monitorování a řízení inteligentní domácnosti byla vydána ve verzi 2024.6. Z novinek lze vypíchnout lepší integraci LLM (OpenAI, Google AI, Ollama) nebo podporu Matter 1.3.
IKEA ve Spojeném království hledá zaměstnance do své nové pobočky. Do pobočky v počítačové hře Roblox. Nástupní mzda je 13,15 liber na hodinu.
Alyssa Rosenzweig se v příspěvku na svém blogu Vulkan 1.3 na M1 za 1 měsíc rozepsala o novém Vulkan 1.3 ovladači Honeykrisp pro Apple M1 splňujícím specifikaci Khronosu. Vychází z ovladače NVK pro GPU od Nvidie. V plánu je dále rozchodit DXVK a vkd3d-proton a tím pádem Direct3D, aby na Apple M1 s Asahi Linuxem běžely hry pro Microsoft Windows.
Byla vydána (𝕏) květnová aktualizace aneb nová verze 1.90 editoru zdrojových kódů Visual Studio Code (Wikipedie). Přehled novinek i s náhledy a animovanými gify v poznámkách k vydání. Ve verzi 1.90 vyjde také VSCodium, tj. komunitní sestavení Visual Studia Code bez telemetrie a licenčních podmínek Microsoftu.
Byla vydána (Mastodon, 𝕏) nová verze 2024.2 linuxové distribuce navržené pro digitální forenzní analýzu a penetrační testování Kali Linux (Wikipedie). Přehled novinek se seznamem nových nástrojů v oficiálním oznámení.
Počítačová hra Tetris slaví 40 let. Alexej Pažitnov dokončil první hratelnou verzi 6. června 1984. Mezitím vznikla celá řada variant. Například Peklo nebo Nebe. Loni měl premiéru film Tetris.
MicroPython (Wikipedie), tj. implementace Pythonu 3 optimalizovaná pro jednočipové počítače, byl vydán ve verzi 1.23.0. V přehledu novinek je vypíchnuta podpora dynamických USB zařízení nebo nové moduly openamp, tls a vfs.
Canonical vydal Ubuntu Core 24. Představení na YouTube. Nová verze Ubuntu Core vychází z Ubuntu 24.04 LTS a podporována bude 12 let. Ubuntu Core je určeno pro IoT (internet věcí) a vestavěné systémy.
Portage má USE flagy, RPM má zase makra, a tak si můžeme USE flagy implementovat sami. Není k tomu zapotřebí žádná zvláštní podpora ze strany rpmbuild
u. Mechanismus, jenž nyní popíši, se zatím nepoužívá ani příliš široce ani obzvlášť systematicky, avšak existuje.
Nejrpve určíme makro, řekněme %with_sandals
, které má řídit kompilaci podpory
libsandals do balíčků. Pak upravíme spec soubory, aby se do programů zakompilovala podpora
libsandals, má-li %with_sandals
hodnotu 1
, a nezakompilovala, má-li hodnotu 0
. To mimo jiné obnáší úpravu BuildRequires
%if %with_sandals BuildRequires: libsandals-devel %endif
předání správných parametrů configure
%configure \ %if %with_sandals --with-sandals \ %else --without-sandals \ %endif
a podobné úpravy Provides
či v sekci %files
. Častý obrat je též vytvoření vedlejšího balíčku, jenž je celý podmíněný:
%if %with_sandals %package sandals Summary: Supplementary sandals for lobster … %description sandals … %endif
Další postup záleží na poměru naší lenosti a megalomanie.
V nejjednodušším případě přidáme na začátek spec souboru
# Define to 1 to enable sandals %define with_sandals 0
a s pocitem dobře vykonané práce se půjdeme věnovat nečemu jinému, například odpočinku. Podobných spec souborů můžeme potkat spousty.
Kdo bude ovšem chtít takové zdrojové rpm překompilovat s jinou hodnotou
%with_sandals
, musí upravit spec soubor. To není právě praktické. Změníme proto
alespoň definiční řádek na potlačitelnou implicitní hodnotu:
%{!?with_sandals:%define with_sandals 0}
Nyní už může uživatel zapnout podporu sandálů jak jednorázově při kompilaci:
rpmbuild --define 'with_sandals 1' -bb lobster.spec
tak trvale definicí v ~/.rpmmacros
:
%with_sandals 1
Novější verze RPM, tj. alespoň 4.4, přímo podporují volby --with sandals
a --without sandals
, jež definují makra %_with_sandals
, resp. %_without_sansals
, a můžeme tak jednoduše spouštět
rpmbuild --with sandals -bb lobster.spec
Ve skutečnosti tedy RPM nic přímo nepodporuje, uvedené dvě volby jsou jen aliasy popt pro
--define
, definované v /usr/lib/rpm/rpmpopt-verze
, které si můžeme do staršího rpm případně doplnit sami (nebudeme ovšem měnit tento soubor, ale doplníme je do /etc/popt
).
Stále však cosi schází – volba --with sandals
vytvoří makro
%_with_sandals
, kdežto my bychom rádi %with_sandals
. A také musíme zpracovat negativní argument --without sandals
. Tedy nemusíme, protože implicitní je kompilace bez sandálů, a tak můžeme v tomto případě --without sandals
klidně ignorovat, ale potřebovali bychom ji zpracovat, kdyby se implicitně sandály zakompilovávaly.
Chybějící dílek skládačky doplňují standardní makra %bcond_with
a %bcond_without
:
%define bcond_with() %{expand:%%{?_with_%{1}:%%global with_%{1} 1}} %define bcond_without() %{expand:%%{!?_without_%{1}:%%global with_%{1} 1}}
Porozumění definicím si necháme na dlouhé zimní večery a zaměříme se na praktické použití. Volitelnou součást balíku deklarujeme jedním z následujících způsobů:
%bcond_with sandals %bcond_without sandals
První přitom použijeme, má-li --with sandals
zapínat implicitně vypnutou podporu sandálů; druhou pak, má-li --without sandals
vypínat implicitně zapnutou podporu. V obou případech se pak řídíme existencí makra %with_sandals
. Abychom to měli ještě jednodušší, byla zavedena makra %with
a %without
(vidíme, že to jsou jen specializované varianty %defined
a %undefined
)
%define with() %{expand:%%{?with_%{1}:1}%%{!?with_%{1}:0}} %define without() %{expand:%%{?with_%{1}:0}%%{!?with_%{1}:1}}
s nimiž můžeme psát čitelné podmínky
%if %{with sandals} … %endif
Jsme-li osamělí baliči, na další stupínek megalomanie už nedosáhneme. Tvoříme-li však
distribuci, můžeme se pokusit udělat ve with_…
makrech pořádek, aby každý balíček nepoužíval, jaká jeho autora zrovna napadla, zdokumentovat je a definovat standardní formu, jak a kam se do spec souboru píší, abychom usnadnili zjišťování, která daný spec soubor podporuje (od rpm
lze stěží očekávat, že je dokáže vypsat, když o žádných %with_…
nemátušení).
Přemístitelné (relocatable) balíčky mohou být nainstalovány do jiného než implicitního adresáře (obvykle /usr
) pomocí volby --prefix
, případně podrobněji
--relocate starý_adresář=nový_adresář
. Kupříkladu
rpm -ivh --prefix /opt/lobster lobster-1.10-1.i386.rpm
nainstaluje lobster
do /opt/lobster
namísto do /usr
.
Postavíme-li si hlavu, můžeme, pravda, nainstalovat cokoli kamkoli s volbou
--badreloc
, ale následky padají na naši hlavu. Balíčky, jež přemístitelnost samy
deklarují, by měly po instalaci do jiného adresáře i fungovat.
Přemístitelný balíček vyrobíme přidáním položky Prefix
do hlavičky. Ta jednak
deklaruje, že se všechny soubory instalují do tohoto adresáře – to rpmbuild
kontroluje a obsahuje-li balíček soubory i v jiných adresářích, kompilace selže. A jednak určuje, který adresář bude nahrazen hodnotou z --prefix
při případném přemístění. Typická deklarace vypadá
Prefix: %{_prefix}
Instaluje-li se rpm i do dalších adresářů, např. /etc
, ale je přitom přemístitelné (to není právě obvyklá situace), můžeme uvést několik hlaviček Prefix
, pro každý adresář jednu, a při přemisťování si pak už nejspíš nevystačíme s --prefix
a musíme použít --relocate
. Ve starších verzích pro to existovala položka Prefixes
, dnes je ale synonymní s Prefix
.
Zda nějaký program je či není možné po kompilaci pro určitý prefix přemístit, samozřejmě závisí na tom, jak hledá své komponenty a jak ho využívají další programy. Není-li přemístitelný sám od sebe, položka Prefix
to sama magicky nezařídí, proto se při jejím přidávání musíme zamyslet, bude-li program po přemístění opravdu fungovat.
Metadata balíčku lze lokalizovat, takže se pak uživateli např. při rpm -qi
vypíší informace v jeho rodném jazyce. Smysluplnost tohoto kroku je zapotřebí zvážit. Jednak mají lokalizované informace tendenci rozcházet se s originálem, za druhé je kupříkladu celý zbytek výstupu rpm -qi
prakticky nelokalizovatelný, neboť je to alias popt pro rpm -q --qf=…
se správným formátem – frontendy k RPM toto omezení, pravda, mít nemusejí.
Položky hlavičky lokalizujeme přidáním jména jazyka do závorky za její název:
Summary: A poor human doctor emulator Summary(cs): Ubohá napodobenina lidského lékaře
Lokalizovat lze tyto položky hlavičky: Summary
, Group
,
Requires
, PreReq
, BuildPrereq
, BuildRequires
. Skupinu je ovšem nesmysl překládat ve spec souboru každého balíčku znovu (a nejlépe pokaždé jinak), a k čemu má sloužit lokalizace závislostí, netuším (balíček vyžaduje sjednocení množin závislostí uvedených pro všechny jazyky). Zbývá tedy stejně jen Summary
.
Jediná další věc, již lze přeložit, je sekce %description
. Název locale pak
uvádíme volbou -l
:
%description -l cs …
Nástroje: Tisk bez diskuse
Tiskni Sdílej:
Tahle vlastnost me taky pekne nastvala, zvlast kdyz to bylo po kompilaci KOffice :) Nechapu, kdo na to prisel? Warning by uplne stacil, ale ukoncit vyrobu balicku? ufff...
Nicmene nastesti vse resi makro %_unpackaged_files_terminate_build 0
viz http://www.rpm.org/hintskinks/unpackaged/