Programmering

Gjennomgang: Alpine Linux er laget for Docker

Alpine Linux er en minimal Linux-distribusjon, opprinnelig bygget med Gentoo, men nå uavhengig og egenhosting. I noen henseender er Alpine Linux konseptuelt lik NanoBSD, ved at tekniske brukere kan starte med Alpine Linux for å bygge et Linux-system med akkurat det som er behov for å utføre oppdraget, og ingenting mer.

Vanligvis sett innebygd i enheter eller apparater, fikk Alpine Linux et stort løft da det ble valgt å erstatte Ubuntu som grunnbilde for Docker. Sikkerhet, pålitelighet og solid utviklingspraksis var hovedårsakene.

Alpine Linux er i motsetning til alle Linux-distribusjoner som en typisk Linux-stasjonær bruker vil ha opplevd. La oss starte med å se på / bin-katalogen, der systemverktøyene oppbevares:

Legg merke til at nesten alle binære filer er lenker til / bin / busybox. Busybox er et sett med vanlige bruker- og systemverktøy pakket i en enkelt binær for raskere oppstart, lavere plassbehov og generelt bedre sikkerhet, på bekostning av redusert funksjonalitet. Mange av de ofte brukte alternativene til verktøyene er fjernet, men alle de vanlige alternativene gjenstår.

I tillegg til dette bruker Alpine musl libc, en minimal implementering av standard C / POSIX-biblioteket og utvidelser, designet for statisk sammenkobling og innebygde applikasjoner i sanntid, og unngår GNU-oppblåsthet av glibc. Statisk kobling betyr raskere oppstart, men tar mer plass, så det passer best til mindre systemer. Ved å kombinere alle systembinarier i en enkelt kjørbar fil og koble til musl, får Alpine et lite og raskt sett med systembinarier, som er det som kreves i et innebygd system.

Til slutt er det fokus på sikkerhet. Systemet inkluderer Grsec / PaX-kjernelapper, som gir en samling sikkerhetsfunksjoner til Linux-kjernen, inkludert beskyttelse av adresserom, forbedret revisjon og rollebasert tilgang og prosesskontroll. Med typiske Linux-distribusjoner måtte brukerne kompilere og kjøre sin egen kjerne for å få disse oppdateringene, noe selv de mest avanserte brukerne sannsynligvis ville unngå.

Alpine Linux installasjon og konfigurasjon

Det er mye som er uvanlig med å installere Alpine Linux. Dette er for det meste forankret i sin opprinnelige tiltenkte bruk i innebygde systemer, som rutere. Som sådan er Alpine designet for å starte og kjøre fra RAM, selv om hybridalternativer er tilgjengelige. I tråd med denne opprinnelsen bruker Alpine Linux extlinux, en Syslinux-variant, som bootloader. Syslinux brukes vanligvis ikke til å starte full Linux-installasjoner fordi Linux normalt ikke er installert på FAT-filsystemer. I stedet brukes Syslinux ofte til oppstart eller redning av disketter, live USB-er og andre lette oppstartssystemer. Alpine bruker deler av Syslinux-prosjektet for å tillate oppstart fra CD-ROM-er, og bruker extlinux for å starte fra Linux-filsystemer eller FAT-filsystemer for USB-enheter. FAT-filsystemer har noen begrensninger, for eksempel størrelsen på filene og lengden på filnavnene.

Alpine støtter tre installasjonsmodi: diskless, "data" og "sys." I en datainstallasjon er operativsystemet lastet inn i RAM fra skrivebeskyttede medier, men monterer lese / skrivepartisjoner for å lagre data. Dette kan for eksempel brukes hvis en ruter basert på Alpine lagret innbrudd eller tilgangslogger på en disk. Kopiering av logger til RAM vil være bortkastet en verdifull ressurs. Diskfri modus er lik, men lese / skrive-partisjonen er vanligvis mindre og brukes til å lagre OS-konfigurasjonsdetaljer. Sys er en tradisjonell diskbasert installasjonsmodus.

Når du installerer i diskløs eller datamodus, brukes Alpine Local Backup-systemet til å lagre konfigurasjonsfiler. Dette gjøres med lbu (lokal sikkerhetskopieringsverktøy), som sporer filer som er endret i / etc-katalogen og lagrer disse endringene i .apkovl "overlay" -filer (tar-gzip arkiver). Med lbu kan administratorer for eksempel sammenligne, slå sammen eller gå tilbake til tidligere konfigurasjoner.

Jeg begynte med å prøve en diskelløs installasjon fordi jeg ønsket å kjøre Alpine slik det opprinnelig var ment, som et operativsystem for apparater. Dessverre opplevde jeg en langvarig (2015) feil i en VMware-installasjon som ikke har blitt reparert, og dokumentasjonen er heller ikke oppdatert. Det ser ut til at det virtuelle diskettbildet ikke monteres ved oppstart. Dette betyr at konfigurasjonsendringene går tapt ved hver omstart.

Til slutt tok jeg til en sys-installasjon, som gikk helt fint. Det første du må legge merke til er at ingenting, ikke engang SSH, er installert som standard. Hvis du bygger innebygde systemer, er dette sannsynligvis en god ting. Nybegynnere i Linux bør forberede seg på en bratt læringskurve. Etter å ha lest litt om Alpine Package Manager (APK), installerte jeg et minimalt sett med verktøy for å komme i gang: Sudo, SSH og det nettbaserte grafiske systemadministrasjonsverktøyet, ACF.

Alpine Linux systemadministrasjon

Mens de fleste Linux-systemer har et grafisk systemadministrasjonsverktøy, bruker Alpine shell-skript for oppsett. Jeg brukte et paraplyskript, setup-alpine, for å konfigurere alt det grunnleggende som nettverk, vertsnavn, disker, tidssone osv. Selv om setup-alpine er tilstrekkelig for å få et brukbart system, vil alt mer avansert kreve redigering av systemkonfigurasjonsfiler direkte og bruke lbu for å redde dem i skrivbare medier. Merk at setup-alpine også er installasjonsprogrammet, så et disknavn kan oppgis, og det vil skrive operativsystemet til media og be om en skrivbar partisjon for katalogene / etc og / var.

Å utvikle og distribuere programvare er også annerledes på Alpine. Dels skyldes dette den tiltenkte bruken i innebygde systemer, eller som et grunnbilde for containere, men også fordi forfatterne mente at eksisterende pakkehåndteringssystemer ikke ville fungere bra i et system som vanligvis kjører fra RAM. Alpine Package Manager (APK) oppfyller alle disse kravene, med lave overhead og raske installasjonstider. Imidlertid skulle jeg ønske de hadde lagdelt over et API som var mer standard. Vi har nok API-pakker for administrasjon allerede, og det er noe å si for kompatibilitet. APK brukes til å konfigurere containere eller frittstående systemer.

Levering av pakker skjer via et porter-tre som minner meg om FreeBSDs portsamling. Imidlertid, i stedet for å bli drevet av et sofistikert makefile-system, bruker det en annen Alpine Linux-oppfinnelse, abuild. Aports-depotet speiler havnetreet rundt om i verden, og apk legg til ... er definitivt mye raskere enn andre pakkehåndteringssystemer.

Den andre tingen å legge merke til om Alpine er bruken av OpenRC til init-systemet. Ett av et dusin eller så init-systemer for Linux nå, startet OpenRC i Gentoo (som Alpine gjorde). Ingenting mangler funksjonelt, men vær forberedt på å lære et nytt system med løpsnivåer og init-kommandoer.

Heldigvis kan mye av den daglige administrasjonen gjøres via det nettbaserte Alpine Configuration Framework (ACF), selv om det ikke var helt jevnt å jobbe med ACF. Det oppdaget ikke den vanlige brukeren jeg la til for meg selv via adduser, for eksempel. ACF GUI ser mye ut som nettgrensesnittet til den typiske Linux-baserte ruteren:

ACF tar også litt graving for å finne og installere. En tilfeldig bruker ville ikke ha oppdaget systemet med mindre oppmerksomt, og selv da er det ingen installasjonsinstruksjoner.

Alpine Linux-lagring og nettverk

Alpine støtter flere lagringsalternativer utover bare RAM, med konfigurasjon lagret på et medium og flash-kort. Dokumentasjonen, eller rettere mangelen på den, gjorde imidlertid forståelsen av lagring vanskelig. For eksempel ønsket jeg å brenne en tilpasset ISO med et program som ikke er tilgjengelig i rapporter, sannsynligvis en vanlig nok forekomst. Dokumentasjonen for å gjøre dette var en blindvei:

Fire og et halvt år virker lang tid å vente på. For å være rettferdig var lagring aldri en stor del av Alpine-ligningen, med fokus på innebygde applikasjoner, så det er ingen overraskelse at dette burde være et svakt område. Det pågår kontinuerlig arbeid i de fleste områdene som forventes fra en Linux-distro, for eksempel LVM, iSCSI og RAID, men forbered deg på å bruke en god del tid på å forstå dokumentasjonen, eller lese kildekoden for å finne ut av det hele.  

Nettverk med Alpine er en helt annen historie enn lagring. Dokumentasjonen for nettverk er bedre skrevet og mer komplett, og inkluderer ofte beste fremgangsmåter for å sette opp effektive nettverk. IP4, IP6, bonding, VLAN, bridging og stort sett ethvert ønsket nettverksoppsett støttes. Du finner til og med instruksjoner for å sette opp satellitt-internettforbindelser!

Konfigurasjon kan gjøres med tradisjonelle verktøy som ifconfig og route, eller noen nyere pakker som iproute2. Verdt å nevne er et interessant underprosjekt kalt Alpine Wall, et Linux-brannmurkonfigurasjonsverktøy. Selv PPP over serielle linjer støttes, noe som er litt overraskende i vår tid.

Jeg lærte mye å lese denne dokumentasjonen, og oppdaget flere konfigurasjonstips jeg ikke kjente før, så vel som noen hittil ukjente nettverksverktøy. Denne delen av dokumentasjonen er verdt å legge til bokmerker som en rask referanse for hvordan du gjør nettverk, selv om du ikke bruker Alpine Linux.

Alpine Linux-oppgraderinger og nedgraderinger

Alpine Linux-utgivelsesteknikk er ikke så streng eller formell som modne systemer som FreeBSD, men dekker det grunnleggende. Og det er godt egnet for Alpines primære bruksområder med Docker-hosting og apparater.

Det er i hovedsak to bekker, kant og stabile. Edge er en rullende utgivelsesgren, et øyeblikksbilde av hvor utviklingen skjer hver sjette måned. Pakker beveger seg gjennom kanten, og når de er klare, blir de promotert til stall / fellesskap der de støttes i seks måneder av samfunnet. Pakker som overlever det og fortsetter å utvikle seg, gjør det til slutt til stabilt / main, der de støttes i to år.

Du må ta litt forsiktighet når du oppgraderer fra 2.x til 3.x-grenen på grunn av endringen i C-biblioteker (fra uClibc til musl). Hvis du ikke er forsiktig, kan systemet mislykkes halvveis gjennom en oppgradering. Oppgradering av pakker langs 3.x-linjen er enklere, men fortsatt en manuell prosess som for det meste drives av skript. Trikset for å forstå oppgraderingsprosessen er å få riktig APK-lager (fellesskap, kant eller hoved), tømme hurtigbufferen og deretter la APK oppgradere alle pakkene med apk oppgradering.

Oppgradering av kjernen er også grei, og bruker det oppsett-oppstartbare skriptet til å skrive den nye kjernen og opptattboksen til oppstartsmediet.

Samlet sett er det ikke for mange bevegelige deler til et Alpint system, så når arkitekturen er forstått, er det ikke vanskelig å finne ut oppgraderingen.

Et raskt blikk på Alpine Linux

Alpine Linux er et godt valg for ethvert system som er nettverksorientert og enkeltformål. Inntrengingsdeteksjon, nettverksovervåking og IP-telefoni er eksempler på gode applikasjoner for Alpine Linux. Og det er et naturlig valg for containere. Programmer som bruker hard disk hardt, bør testes nøye. Brukere bør forberede seg på å bruke litt tid på å bli involvert i samfunnet og brette opp ermene for å gjøre hendene skitne. Trial and error vil være påkrevd.

$config[zx-auto] not found$config[zx-overlay] not found