Blogi

Koonti

Make ja GCC: puhtaan koonnin liput

Tiukat varoitukset ja debug-symbolit paljastavat virheet jo käännösvaiheessa.

Koonti

CMake ja Ninja: nopea koonti erilliseen hakemistoon

Erillinen build-hakemisto pitää lähdekoodin puhtaana, ja Ninja kääntää vain muuttuneet tiedostot.

Koonti

deb-paketin rakentaminen debhelperillä

Paketti asentuu, päivittyy ja poistuu järjestelmän omilla työkaluilla.

Koonti

RPM: spec-tiedosto ja paketin rakentaminen

Spec kuvaa paketin koonnin, asennuksen ja sisällön Fedoralle, RHELille ja johdannaisille.

Ydin

Linux-ytimen rakentaminen lähdekoodista

Käytä toimivan ytimen asetuksia pohjana ja käännä ne omilla muutoksillasi.

Ydin

Oma ydinmoduuli: hello world

Minimimoduuli näyttää latauksen, poiston ja ytimen lokiin kirjoittamisen.

Ydin

DKMS: moduulit, jotka selviävät ydinpäivityksistä

DKMS kääntää ulkoiset moduulit uudelleen aina, kun uusi ydin asennetaan.

Ydin

bpftrace: ytimen jäljitys yhdellä rivillä

eBPF mahdollistaa järjestelmäkutsujen ja ytimen funktioiden seurannan ilman uudelleenkäynnistystä.

Ydin

kselftest: ytimen omat testit

Ytimen lähdepuussa on automaattitestit alijärjestelmille, kuten verkolle, ajastimille ja muistille.

Testaus

bats: automaattitestit shell-skripteille

Testaa skriptien paluukoodit ja tulosteet kuten tavallinen koodi.

Testaus

testinfra: palvelimen tilan testaus pytestillä

Testit kuvaavat, millaisia paketit, palvelut ja portit ovat asetusten jälkeen.

Testaus

stress-ng: järjestelmän kuormitustestaus

Työkalu kuormittaa prosessoria, muistia ja levyä ja paljastaa järjestelmän rajat.

Testaus

fio: levyn suorituskyvyn mittaus

fio toistaa sovellusten kuormaa: satunnaislukemista ja -kirjoitusta, eri lohkokokoja ja jonoja.

Testaus

AddressSanitizer ja UBSan: muistivirheiden metsästys

Kääntäjä lisää tarkistukset rajojen ylityksille, vuodoille ja määrittelemättömälle käytökselle.

Testaus

Valgrind: muistivuodot ja profilointi

Valgrind ajaa ohjelman virtuaaliympäristössä ja löytää vuodot sekä alustamattoman muistin luvut.

Testaus

Fuzzaus AFL++:lla

Fuzzeri generoi syötteitä, jotka kaatavat ohjelman, ja löytää haavoittuvuuksia automaattisesti.

Testaus

Linux Test Project: ytimen regressiotestit

LTP tarkistaa järjestelmäkutsut ja ytimen alijärjestelmät tuhansilla testeillä.

CI/CD

GitLab CI: koonti ja testit jokaisella commitilla

Vaiheista koostuva putki rakentaa projektin ja ajaa testit puhtaassa kontissa.

CI/CD

GitHub Actions C-projekteille

Workflow ajaa koonnin ja testit jokaisella pushilla ja pull requestilla.

CI/CD

pre-commit: tarkistukset ennen committia

Koukut ajavat linterit ja muotoilun ennen kuin koodi päätyy repositorioon.

Virheenjäljitys

GDB: askel askeleelta -virheenjäljitys

Keskeytyskohdat, kutsupino ja paikalliset muuttujat paljastavat kaatumisen syyn.

Virheenjäljitys

strace: mitä ohjelma todella tekee

Järjestelmäkutsujen jäljitys näyttää avatut tiedostot, verkkokutsut ja käyttöoikeusvirheet.

Virheenjäljitys

perf: profilointi ilman uudelleenkäännöstä

perf näyttää, missä ohjelma kuluttaa prosessoriaikaa, ytimen funktioihin asti.

Virheenjäljitys

git bisect: etsi rikkonut commit

Binäärihaku historiassa löytää syyllisen commitin muutamassa vaiheessa.

Virheenjäljitys

Core dump ja coredumpctl

Kaatuneen prosessin muistivedos mahdollistaa vian tutkimisen jälkikäteen.

Ympäristöt

QEMU: käynnistä oma ydin sekunneissa

Virtuaalikone minimaalisella levykuvalla testaa ytimen ilman pääjärjestelmän uudelleenkäynnistystä.

Ympäristöt

Docker-kuva toistettavaan koontiin

Yhteinen kuva kääntäjällä ja työkaluilla antaa koko tiimille saman ympäristön.

Ympäristöt

systemd-nspawn: kevyet testiympäristöt

Täysi järjestelmä kontissa käynnistyy sekunneissa eikä vaadi Dockeria.