Programmering

Anmeldelse: Alpine Linux er lavet til Docker

Alpine Linux er en minimal Linux-distribution, oprindeligt bygget med Gentoo, men nu uafhængig og selvhosting. I nogle henseender ligner Alpine Linux konceptuelt NanoBSD, idet tekniske brugere kan starte med Alpine Linux for at opbygge et Linux-system med netop det, der er nødvendigt for at udføre missionen, og intet mere.

Typisk set indlejret i enheder eller apparater fik Alpine Linux et stort boost, da det blev valgt til at erstatte Ubuntu som basisbillede for Docker. Sikkerhed, pålidelighed og solid udviklingspraksis var hovedårsagerne.

Alpine Linux er i modsætning til enhver Linux-distribution, som en typisk Linux-desktopbruger vil have stødt på. Lad os starte med at se på / bin-biblioteket, hvor systemværktøjerne opbevares:

Bemærk, at næsten alle binære filer er links til / bin / busybox. Busybox er et sæt almindelige bruger- og systemværktøjer pakket i en enkelt binær for hurtigere opstart, lavere pladsbehov og generelt bedre sikkerhed på bekostning af reduceret funktionalitet. Mange af de ofte anvendte indstillinger til hjælpeprogrammerne er blevet fjernet, men alle de almindeligt anvendte indstillinger forbliver.

Derudover bruger Alpine musl libc, en minimal implementering af standard C / POSIX-biblioteket og udvidelser designet til statisk sammenkædning og realtidsindlejrede applikationer, hvilket undgår GNU-opblussen af ​​glibc. Statisk sammenkædning betyder hurtigere opstart, men tager mere plads, så det er bedst egnet til mindre systemer. Ved at kombinere alle systembinarier i en enkelt eksekverbar og forbinde med musl får Alpine et lille og hurtigt sæt systembinarier, hvilket er det, der kræves i et indlejret system.

Endelig er der fokus på sikkerhed. Systemet inkluderer Grsec / PaX-kerneopdateringer, der giver en samling sikkerhedsfunktioner til Linux-kernen, herunder beskyttelse af adresserum, forbedret revision og rollebaseret adgangs- og proceskontrol. Med typiske Linux-distributioner bliver brugerne nødt til at kompilere og køre deres egen kerne for at få disse patches, noget selv de mest avancerede brugere sandsynligvis ville undgå.

Alpine Linux installation og konfiguration

Der er meget, der er usædvanligt ved installation af Alpine Linux. Dette er for det meste rodfæstet i dets oprindelige tilsigtede anvendelse i indlejrede systemer, som routere. Som sådan er Alpine designet til at starte og køre fra RAM, selvom hybridindstillinger er tilgængelige. I overensstemmelse med denne oprindelse bruger Alpine Linux extlinux, en Syslinux-variant, som sin bootloader. Syslinux bruges normalt ikke til at starte fulde Linux-installationer, fordi Linux normalt ikke er installeret på FAT-filsystemer. I stedet bruges Syslinux ofte til boot- eller redningsdisketter, live USB'er og andre lette boot-systemer. Alpine bruger dele af Syslinux-projektet til at tillade opstart fra cd-rom'er og bruger extlinux til at starte fra Linux-filsystemer eller FAT-filsystemer til USB-enheder. FAT-filsystemer har nogle begrænsninger, såsom filstørrelse og længde på filnavne.

Alpine understøtter tre installationstilstande: diskless, "data" og "sys." I en datainstallation indlæses operativsystemet i RAM fra skrivebeskyttede medier, men monterer læse / skrive-partitioner for at gemme data. Dette kan f.eks. Bruges, hvis en router baseret på Alpine lagrede indbrud eller adgangslogfiler på en disk. Kopiering af logfiler til RAM ville være spild af en værdifuld ressource. Diskløs tilstand er ens, men læs / skriv-partitionen er normalt mindre og bruges til at gemme OS-konfigurationsoplysninger. Sys er en traditionel diskbaseret installationstilstand.

Når du installerer i diskløs eller datatilstand, bruges Alpine Local Backup-systemet til at gemme konfigurationsfiler. Dette gøres med lbu (lokal backup-hjælpeprogram), der sporer filer, der er ændret i / etc-biblioteket, og gemmer disse ændringer i .apkovl "overlay" -filer (tar-gzip-arkiver). Med lbu kan administratorer f.eks. Sammenligne, flette eller vende tilbage til tidligere konfigurationer.

Jeg startede med at prøve en diskeløs installation, fordi jeg ville køre Alpine, som det oprindeligt var beregnet til, som et operativsystem til apparater. Desværre stødte jeg på en langvarig (2015) fejl i en VMware-installation, der ikke er blevet repareret, og heller ikke er dokumentationen opdateret. Det ser ud til, at det virtuelle diskettebillede ikke monteres ved opstartstidspunktet. Dette betyder, at konfigurationsændringer går tabt ved hver genstart.

Endelig tyede jeg til en sys-installation, som gik fint. Den første ting at bemærke er, at ikke noget, ikke engang SSH, er installeret som standard. Hvis man bygger indlejrede systemer, er dette sandsynligvis en god ting. Linux-nybegyndere skal forberede sig på en stejl indlæringskurve. Efter at have læst lidt om Alpine Package Manager (APK) installerede jeg et minimalt sæt værktøjer til at komme i gang: Sudo, SSH og det webbaserede grafiske systemadministrationsværktøj, ACF.

Alpine Linux systemadministration

Mens de fleste Linux-systemer har et grafisk systemadministrationsværktøj, bruger Alpine shell-scripts til opsætning. Jeg brugte et paraply script, setup-alpine, til at konfigurere alle de grundlæggende som netværk, værtsnavn, diske, tidszone osv. Selvom setup-alpine er tilstrækkelig til at få et brugbart system, vil alt mere avanceret kræve redigering af systemkonfigurationsfiler direkte og ved hjælp af lbu at gemme dem i skrivbare medier. Bemærk, at setup-alpine også er installationsprogrammet, så der kan gives et disknavn, og det vil skrive operativsystemet til mediet og bede om en skrivbar partition til mapperne / etc og / var.

Udvikling og distribution af software er også anderledes på Alpine. Dels på grund af dets tilsigtede anvendelse i indlejrede systemer eller som et basisbillede for containere, men også fordi forfatterne følte, at eksisterende pakkehåndteringssystemer ikke ville fungere godt i et system, der normalt kører fra RAM. Alpine Package Manager (APK) opfylder alle disse krav med lave overhead og hurtige installationstider. Jeg ville dog ønske, at de havde lagdelt over en API, der var mere standard. Vi har allerede nok pakkehåndterings-API'er, og der er noget at sige for kompatibilitet. APK bruges til at konfigurere containere eller enkeltstående systemer.

Levering af pakker sker via et porte-træ, der minder mig om FreeBSD's portsamling. Men i stedet for at blive drevet af et sofistikeret makefile-system bruger det en anden Alpine Linux-opfindelse, abuild. Aports-arkivet spejler havnetræet rundt om i verden, og apk tilføj… er bestemt meget hurtigere end andre pakkehåndteringssystemer.

Den anden ting at bemærke om Alpine er brugen af ​​OpenRC til init-systemet. Et af et dusin init-systemer til Linux nu startede OpenRC i Gentoo (som Alpine gjorde). Intet mangler funktionelt, men vær forberedt på at lære et nyt system med kørselsniveauer og init-kommandoer.

Heldigvis kan meget af den daglige administration ske via det webbaserede Alpine Configuration Framework (ACF), selvom det ikke var helt problemfrit at arbejde med ACF. Det registrerede ikke den almindelige bruger, jeg tilføjede til mig selv via adduser, for eksempel. ACF GUI ligner meget webgrænsefladen til din typiske Linux-baserede router:

ACF tager også nogle grave for at finde og installere. En afslappet bruger ville ikke have opdaget systemet, medmindre det var opmærksomt, og selv da er der ingen installationsinstruktioner.

Alpine Linux-opbevaring og netværk

Alpine understøtter flere lagringsmuligheder ud over kun RAM, med konfiguration gemt på et medium og flash-kort. Dokumentationen, eller rettere manglen på den, gjorde det imidlertid vanskeligt at forstå opbevaring. For eksempel ville jeg brænde en brugerdefineret ISO med en applikation, der ikke er tilgængelig i rapporter, sandsynligvis en almindelig nok forekomst. Dokumentationen for dette var en blindgyde:

Fire og et halvt år virker lang tid at vente på. For at være retfærdig var opbevaring aldrig en stor del af Alpine-ligningen med fokus på indlejrede applikationer, så det er ingen overraskelse, at dette burde være et svagt område. Der er løbende arbejde på de fleste af de områder, der forventes fra en Linux-distro, såsom LVM, iSCSI og RAID, men forbered dig på at bruge en god del tid på at give mening om dokumentationen, eller læser kildekoden for at finde ud af det hele.  

Netværk med Alpine er en meget anden historie end opbevaring. Dokumentationen for netværk er bedre skrevet og mere komplet og indeholder ofte bedste praksis for oprettelse af effektive netværk. IP4, IP6, binding, VLAN, bridging og stort set enhver ønsket netværksopsætning understøttes. Du finder endda instruktioner til opsætning af satellit-internetforbindelser!

Konfiguration kan udføres med traditionelle værktøjer som ifconfig og rute eller nogle nyere pakker som iproute2. Værd at nævne er et interessant underprojekt kaldet Alpine Wall, et Linux-firewall-konfigurationsværktøj. Selv PPP over serielle linjer understøttes, hvilket er noget overraskende i dag og alder.

Jeg lærte meget at læse denne dokumentation og opdagede flere konfigurationstip, som jeg ikke kendte før, samt nogle hidtil ukendte netværksværktøjer. Denne del af dokumentationen er værd at bogmærke som en hurtig reference til netværksvejledning, selvom du ikke bruger Alpine Linux.

Alpine Linux opgraderinger og nedgraderinger

Alpine Linux release engineering er ikke nær så streng eller formel som modne systemer som FreeBSD, men det dækker det grundlæggende. Og det er velegnet til Alpines primære brugssager om Docker-hosting og apparater.

Der er i det væsentlige to vandløb, kantede og stabile. Edge er en gren med rullende frigivelse, et øjebliksbillede af hvor som helst udvikling sker hver sjette måned. Pakker bevæger sig gennem kanten, og når de er klar, forfremmes de til stald / samfund, hvor de understøttes i seks måneder af samfundet. Pakker, der overlever det og fortsætter med at udvikle sig, gør det til sidst til stabilt / main, hvor de understøttes i to år.

Der skal tages lidt omhu, når der opgraderes fra 2.x til 3.x-grenen på grund af ændringen i C-biblioteker (fra uClibc til musl). Hvis du ikke er forsigtig, kan systemet muligvis mislykkes halvvejs gennem en opgradering. Opgradering af pakker langs linjen 3.x er enklere, men stadig en manuel proces, der for det meste drives af scripts. Tricket til at forstå opgraderingsprocessen er at få det korrekte APK-lager (community, edge eller main), rydde cachen og derefter lade APK opgradere alle pakkerne med apk opgradering.

Opgradering af kernen er ligeledes ligetil og bruger det setup-bootbare script til at skrive den nye kerne og busybox til startmediet.

Samlet set er der ikke for mange bevægelige dele til et alpint system, så når arkitekturen er forstået, er det ikke svært at finde ud af opgraderingen.

Et overblik over Alpine Linux

Alpine Linux er et godt valg til ethvert system, der er netværksorienteret og et formål. Indtrængningsdetektion, netværksovervågning og IP-telefoni er eksempler på gode applikationer til Alpine Linux. Og det er et naturligt valg til containere. Programmer, der bruger tung disk, bør testes omhyggeligt. Brugere bør forberede sig på at bruge lidt tid på at blive involveret i samfundet og rulle ærmerne op for at få deres hænder beskidte. Trial and error er påkrævet.