Vývoj Fedory 28 je v plném proudu – Beta jej již ke stažení, a seznam změn – – je opravdu veliký. Za zvýraznění stojí, že f28 bude mít GCC ve verzi 8. F28 final freeze se navíc odehrál dnes – 17.4.2018.

Krátce ze zajímavých balíčků posledních týdnů:

   Poběrky

  • java-openjdk – rolling release for short term support OpenJDK
  • libdasm – Simple x86 disassembly library
  • git-crypt – transparent file encryption in git

Koprovka

List přání:

Černá kronika:


Poběrky

java-openjdk

bug balíček

java 10 – poslední krátce žijící JDK, před očekávanou, s dlouhou podporou, javou 11, se stává součástí Fedory. Pravda trošku se zpožděním neb review se protáhlo, ale snad o to lepší. Jelikož se jedná o rolling release budoucích JDK s krátkou životností (viz slidy v iniciálním komentáři ; tedy changesInjavaReleaseProcess.pdf bylo zdraví balíku opravdu potřeba.
V době psaní článku se balíček ještě nacházel v testovacím repu, ale již velmi brzy bude ve stabilním.

Zapnut testovací repo (krok již nemusí být potřeba)

$ # dnf repolist # pro porovnání
$ sudo dnf config-manager --set-enabled updates-testing
$ # dnf repolist # pro ověření

Nainstalovat a nastavit jdk:

$ sudo dnf install java-openjdk
java -version
openjdk version "1.8.0_162"
$ # java-openjdk má nižší prioritu než java-1.8.0-openjdk, proto, pokud jste již měli nainstalovanou javu 8, není změna viditelná okamžitě
$ sudo alternatives --config java

There are 3 programs which provide 'java'.

  Selection    Command
-----------------------------------------------
*+ 1           java-1.8.0-openjdk.x86_64 (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.162-3.b12.fc27.x86_64/jre/bin/java)
   2           java-9-openjdk.x86_64 (/usr/lib/jvm/java-9-openjdk-9.0.4.11-4.fc27.x86_64/bin/java)
   3           java-openjdk.x86_64 (/usr/lib/jvm/java-10-openjdk-10.0.0.46-10.fc27.x86_64/bin/java)
# zmáčkněte 3 a enter

$ java -version
openjdk version "10" 2018-03-20
OpenJDK Runtime Environment (build 10+46)
OpenJDK 64-Bit Server VM (build 10+46, mixed mode)

$ # podobně pro java-openjdk-devel a javac

Opět vypnut testovací repo (pokud bylo jeho zapnutí potřeba a již jej nechcete)

$ # dnf repolist # pro porovnání
$ sudo dnf config-manager --set-disabled updates-testing
$ # dnf repolist # pro ověření

libdasm

bug balíček

Knihovna pro zobrazování binárního kódu pro procesory Intel. Kromě toho že ji můžete používat ve svých programech (libdasm-devel: /usr/include/libdasm.h a /usr/lib64/libdasm.so) obsahuje balíček libdasm také ukázkový program:

$ sudo dnf install libdasm
$ sudo    /bin/das  /usr/lib/libasound.so.2.0.0  | head
00000000  7f45              jg 0x47
00000002  4c                dec esp
00000003  46                inc esi
00000004  0101              add [ecx],eax
00000006  0100              add [eax],eax
00000008  0000              add [eax],al
0000000a  0000              add [eax],al
0000000c  0000              add [eax],al
0000000e  0000              add [eax],al
00000010  0300              add eax,[eax]
$ sudo    /bin/das   /bin/rustc -a  16 | head
00000000  7f45                              jg 0x47
00000002  4c                                dec %esp
00000003  46                                inc %esi
00000004  0201                              add (%ecx),%al
00000006  0100                              add %eax,(%eax)
00000008  0000                              add %al,(%eax)
0000000a  0000                              add %al,(%eax)
0000000c  0000                              add %al,(%eax)
0000000e  0000                              add %al,(%eax)
00000010  0300                              add (%eax),%eax

Kromě přepínaní mezi Intel a AT&T (-i/-a) syntaxí je poslední přepínač číslo – šířka dat instrukce (defaultně 8).
Proč program odmítá číst systémové knihovny bez oprávnění roota nevím

git-crypt

bug balíček

Knihovna na transparentní push/pull zašifrovaných souborů. Jednoduše si vyberete, které soubory v repositáři jsou zašifrovány. Tyto potom prochází přes git během pull/push skrze symetrické šifrování a váš privátní GPG klíč. Výhodou je, že uživatelé bez klíče mohou s vaším repositářem dále pracovat, všem některé části nevidí. Ačkoliv myšlenka je to zajímavá, může svádět k ukládání různých hesel a dodává celému „otevřenému repositáři“ takový kyselý nádech, může se v některých případech hodit.

$ sudo dnf install https://kojipkgs.fedoraproject.org//packages/git-crypt/0.6.0/3.fc28/x86_64/git-crypt-0.6.0-3.fc28.x86_64.rpm
$ git init git-crypto-test
$ cd git-crypto-test
$ git-crypt init

Tento proces pouze nastaví klíče a konfiguraci repositáře:

$ cat .git/config
[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[filter "git-crypt"]
    smudge = \"git-crypt\" smudge
    clean = \"git-crypt\" clean
    required = true
[diff "git-crypt"]
    textconv = \"git-crypt\" diff

Následně se může do souboru .gitattributes zapsat jaké soubory se mají šifrovat:

secretfile filter=git-crypt diff=git-crypt
*.key filter=git-crypt diff=git-crypt

Poběrek + Koprovka

Microsoft Visual Studio Code

Na dnu otevřených dveří brněnského Red Hatu, jsem se dozvěděl, že Visual Studio Code je k mání na jako Copr repositář. Nějakou dobu zpět jsem musel na C# sáhnout, a tak jsem se jal do zkoumání. Na neštěstí je situace velmi smutná:

Jak rychlé tak hlubší hledání, zjistila, že o MVS se pokouší hodně repositářů, ale většinou velmi neúspěšně. Navíc nejnovější buildy (pokud vůbec nějaké) jsem našel pro Fedoru 26. Nejlepší (čtěte jediný funkční) byl mosquito/vscode. Autor si relativně věří, neboť má v kopru i link na PayPal.

Takže šup, přidat repositář a zfalšovat verzi fedorky (neb jsem již na F27)

$ cd  /etc/yum.repos.d/ ;
$ BASE_REPO_FILE_NAME=mosquito-vscode-fedora-26.repo
$ sudo rm -v $BASE_REPO_FILE_NAME*;
$ sudo wget https://copr.fedorainfracloud.org/coprs/mosquito/vscode/repo/fedora-26/$BASE_REPO_FILE_NAME ;
$ sudo sed  's/$releasever/26/' -i $BASE_REPO_FILE_NAME  ;
$ cat $BASE_REPO_FILE_NAME*
$ sudo dnf install vscode

bohužel selže na špatné verzi nodejs.
Je tedy třeba nainstalovat hlavní dependenci:

$ sudo dnf install electron
$ cd ~
$ dnf download vscode # bez sudo :)
$ sudo rpm --nodeps  -ivh vscode-1.16.1-1.fc26.x86_64.rpm

Což (minimálně na f27) poběží (alespoň nějak), neboť je zde nodejs verze 8, což je přesně ta verze kterou potřebujeme.

vscode

vscode window

Ovšem teď ty negativa. Vscode je prostě textový editor. Nic víc, něco málo míň – od počátku předpokládá, že bude IDE – takže v něm najdete různé debug, step over a spol, i když kničemu nejsou. Nemá vůbec nic společného Microsfot Visual Studio. A sám o osbě toho moc neumí. Veškerá funkcionalita je dodávána skrze pluginy, které jsou po maloměkkém většinou uzavřeny. Tolik ke smutnému příběhu. Pokud se někdo ve vscode pluginech vyzná, prosím o posdílení zkušeností…

Atom

Za zmínku ještě stojí, že onen mosquito má zajímavých koprů hned několik. Mezi nimi i atom, který (narozdíl od vscode jde nainstalovat (po případném hacku s verzí fedory) bez komplikací:

$ cd  /etc/yum.repos.d/ ;
$ BASE_REPO_FILE_NAME=mosquito-atom-fedora-26.repo
$ sudo rm -v $BASE_REPO_FILE_NAME*;
$ sudo wget https://copr.fedorainfracloud.org/coprs/mosquito/vscode/repo/fedora-26/$BASE_REPO_FILE_NAME ;
$ sudo sed  's/$releasever/26/' -i $BASE_REPO_FILE_NAME  ;
$ cat $BASE_REPO_FILE_NAME*
$ sudo dnf install atom
$ atom

atom window

Oba balíky mají celkem dobrou integraci, a tak si mosquito možná nějaký ten cent do PayPal kasičky zaslouží.

List přání – kcov

review bug

Kcov je nástroj měřící pokrytí ḱódu testy pro programy psané v jazice rust.
kcov fungue velmi jednoduše, a generuje velmi pěkný report.

$ # v brzské budoucnosti:  dnf install kcov
$ # zatím pouze přes rpmbuild
$ wget https://dridi.fedorapeople.org/review/kcov-34-1.fc29.src.rpm
$ rpmbuild --rebuild  kcov-34-1.fc29.src.rpm ; # muze vynutit manualni update/install libcurl-devel
$ dnf isntall ~/rpmbuild/RPMS/x86_64/kcov-34-1.fc27.x86_64.rpm
$ # nebo poctivím samobuildem a plnou cestou dle návodu výše
$ cd some/project/with/cargotoml
$ cargo test --no-run
$ kcov report-dir target/debug/$TEST_EXECUTABLE

Kde $TEST_EXECUTABLE je něco jako vas_program-hascode. Lze automatizovat jako kcov target/cov target/debug/vas_program-* ale jako u každého použití *, pozor na ni … Pozitivní je, že daný hash se se změní pouze pokud to vy chcete.
kcov je velmi živý projekt

Například:

$ cd hg/icedtea-web/rust-launcher/
$ cargo test --no-run
$ kcov  target/cov target/debug/launcher-ae08e3dae7e23422 ;
$ firefox target/cov/index.html

kcov, no dead code window

Nezapoměnte, že rustc (jako spousta dalších překaldačů) nekompiluje defaultně mrtvý ḱód, takže větev, kterou není možné v programu nikdy nijak projít není ani ve výsledné binárce. Toto můžete změnit RUSTFLAGS=‘-C link-dead-code‘

$ cargo clean
$ export  RUSTFLAGS='-C link-dead-code'
$ cargo test --no-run
$ kcov  target/cov target/debug/launcher-ae08e3dae7e23422 ;
$ firefox target/cov/index.html

kcov, dead code included window

Vidíte že rozdíl je velmi malý

Černá kronika – openjfx

.. je dnes opravdu černočerná, neboť osiřelo OpenJFX – a balíček openjfx tudíž čeká na svého majitele. Následkem je, že tedy nemáme openjfx ani pro f28 a výše (poslední pád se stal Srpnu 2017).
Jen pro úplnost – openjfx je ve Fedoře linkován z java-1.8.0-openjdk. java-9-openjdk ani java-10-openjdk vazby na openjfx nemají. Důvodem je systém modulů který s jdk9 přišel. Abychom mohly openjfx linkovat z java-11-openjfx musí být i openjfx modulární. A v okamžiku kdy bude modulární, zase nepojede s JDK8 Takže je to kus práce, ktery se zatím nikomu nechtěl udělat. I dnes můžete openjfx s javou 9 avýše používat, ale musíte dát knihovny FX na classpath ručně, neboť openjfx instaluje knihovny zatímco java-1.8.0-openjdk-openjfx pouze linky aby byla FX dostupná „jen tak“.

Jonnymu je zasloužen všechen respekt protože zabalit a udržovat JavaFX vůbec nebyla legrace. Jonny tak posunul javu ve fedorce o velký krok vpřed.