Portál AbcLinuxu, 1. května 2025 15:27
+1 Naprosto sdílím tvoje obavy a pochybnosti.
Osobně jdu radši „klasičtější“ cestou: debootstrap + LXC (libvirt) + Btrfs. Případně KVM + LVM. A k tomu oficiální obrazy stažené z důvěryhodných zdrojů.
Čeho? Používám víceméně standardní postupy + si občas na Internetu vyhledám řešení nějakého problému.
Přes debootstrap jsem si vytvořil základní obraz do Btrfs pododdílu, tenhle základ naklonoval a šablonu lehce upravil (přidal svoje SSH klíče rootovi, nainstaloval nějaké balíčky, nastavil síť…). A pak mám na pár řádek skript v Bashi, který tu šablonu naklonuje (btrfs subvolume snapshot
) a vytvoří v LXC virtuálku (nebo chceš-li: kontejner) a spustí. Skvělé na tom mj. je to, že jsou to všechno jen soubory, ne nějaká bloková zařízení, která by bylo potřeba připojovat – takže z hostitelského počítače můžeš procházet souborové systémy (i běžících) virtuálů a pracovat s jejich soubory, aniž bys musel používat nějaké speciální API nebo se přes SSH přihlašovat dovnitř virtuálu.
S KVM je to podobné, i když tam moc neklonuji obrazy, ale dělám normální instalaci, protože obvykle chci pokaždé trochu něco jiného (rozdělení disků, hraní si s různými distribucemi atd.), ale klonovat/kopírovat LVM oddíly se šablonou by tam šlo taky. Co virtuálka, to LVM oddíl. Stejně jako u LXC k tomu přistupuji přes libvirt (virsh na příkazové řádce a virt-manager v GUI), takže si člověk snadno naskriptuje, co potřebuje.
Následné využití je už dost individuální – např. můžeš po kompilaci vyvíjeného programu vytvořit virtuálku, nainstalovat do ní program, pustit testy a virtuálku zase smazat. V případě LXC jsou to řádově vteřiny nebo i méně. V případě KVM to je o něco málo pomalejší, ale zase máš plnou virtualizaci a prostředí lépe odpovídá reálnému hardwaru, kde se aplikace bude provozovat.
Čeho?
Toho kroku vytvoření LXC kontejneru ze souborů na disku.
Buď si přečteš dokumentaci nebo si první kontejner naklikáš ve virt-manageru, vyexportuješ si jeho XML (
virsh dumpxml
) a ten pak používáš jako šablonu pro další kontejery – má to pár řádek, stačí tam měnit jméno, UUID, MAC adresu a cestu k root adresáři (ten Btrfs pododdíl). Nový kontejner/virtuál vytvoříš pomocí virsh define
.
jsou ochotni zahodit šest pachů jen proto, že přišly z RedHatAle pár vteřin mi trvalo, než mi došlo co že to vlastně zahazují :))
Ono šlo spíš o tu formu než obsah.
Proč je mi Flattr sympatický jsem psal dříve. Bohužel se neujal, i když zájem o mikrotransakce by IMHO stále byl. :-/
Tlačítko jsem teď dal pryč, protože už jsem stejně před mnoha a mnoha měsíci ve svém Flattr účtu neodsouhlasil změnu jejich obchodních podmínek (a tudíž je asi nyní neaktivní), protože se Flattr nijak zvlášť neujal a neplánoval jsem ho tedy dále používat.
Ono šlo spíš o tu formu než obsah.
Forma byla naprosto adekvátní obsahu.
Proč je mi Flattr sympatický jsem psal dříve. Bohužel se neujal, i když zájem o mikrotransakce by IMHO stále byl. :-/
Flattr ať ti je klidně tisíckrát sympatický, ale proč kua musí při každém načtení tvého blogu jít požadavek na https://api.flattr.com/, chápeš? Pokud by sis uložil ten obrázek na abclinuxu / resp. někam na vlastní stránku a nechal ho stahovat odtam, tak neřeknu ani ň. Člověk by si myslel, že alespoň tady na abclinuxu tohle šílený špahování nebude, protože lidi narozdíl od BFU vědí, jak big-data fungují...
Tlačítko jsem teď dal pryč, protože už jsem stejně před mnoha a mnoha měsíci ve svém Flattr účtu neodsouhlasil změnu jejich obchodních podmínek (a tudíž je asi nyní neaktivní), protože se Flattr nijak zvlášť neujal a neplánoval jsem ho tedy dále používat.
V tom případě si tě zase odblokovávám. Ale jak píšu, samotný tlačítko mi nevadí, vadí, když se pokaždý načítá z Flattru...
Flattr ať ti je klidně tisíckrát sympatický, ale proč kua musí při každém načtení tvého blogu jít požadavek na https://api.flattr.com/, chápeš?
Tohle taky nemám rád. Tehdy jsem to řešil tak, že jsem nakopíroval jejich ikonu k sobě a nevkládal žádný JavaScript (ano, byl to jen obrázek s odkazem, ne aktivní tlačítko, které by ukazovalo počet kliknutí).
+1 , docker je pekna vec na vyvoj ... ale jinak.
presne sedi toto https://twitter.com/thegrugq/status/601974834138984448
To mi připomíná, jak někdo na jiné přednášce říkal zhruba toto: Když se na jedné konferenci přednášející ptal, kolik vývojářů používá Docker, tak šlo nahoru 90% rukou. Když pak chtěl vědět, kolik z těch lidí to používá na produkci, tak z nich šlo 90% zase dolů.
curl -sS https://getcomposer.org/installer | php
pochopitelně pod rootem.
Pokud srovnáváš pužívání náhodných imagů z Docker Hubu s příkazem výše, přijde mi to na srovnatelné úrovni, s tím, že Docker poskytuje nějaké výhody navíc. Na druhou stranu samotná firma Docker staví svou finanční budoucnost právě na řešení bezpečnosti (auditované trusted image) pro enterprise, takže si problém asi uvědomují. A myslím, že pro firmy typu RedHat tady vzniká velký prostor, jak to vyřešit líp v opensource prostředí.
curl|bash
potom nevnimaju ako nieco principialne zle - ono koniec koncov robia to iste s klasickymi instalatormi stiahnutymi od ktovie kadial. Osobne som ten trend spozoroval v dobe, ked zacalo byt ruby popularne, ludia proste sli cestou najmensieho odporu. Spustanie nahodnych docker imageov je v tomto este ako tak bezpecne, kedze vacsinou to vo vysledku bezi ako kontajner na boot2docker VM s minimom pristupu na samotny pocitac.
Problem je, ked si ludia tieto zlozvyky prenesu do produkcneho prostredia.
tak napíšme všetko from sratchKouzlo nechtěného? :)
Takze alternativa k hw virtualizaci s radou vyhod ale i radou nevyhod (o kterych se ale mlci - to je na tom to nejzajimavejsi).Můžeš pouštět docker ve virtuálce. :)
Btw. stejne prostredi to opravdu neni - pockej az budes hodiny/dny debugovat, proc ti neco, v nejake hrozne pofiderni situaci, pada a zjistis, ze zavislost zavislosti zavislosti gemu, ktery pouzivas, vyuziva nejake novejsi jaderne ABI, ktere na starsim jadre na produkci neni.To se ti asi jen tak nestane. A když, tak specifikuješ, na jaké verzi Atomic má docker jet (vím o tom málo, ale rámcovou představu jsem si udělal, s detailama holt nepomůžu), a máš konzistentní i kernel. :)
proc ti neco, v nejake hrozne pofiderni situaci, pada a zjistis, ze zavislost zavislosti zavislosti gemu, ktery pouzivas, vyuziva nejake novejsi jaderne ABI, ktere na starsim jadre na produkci neni.Neříkám, že jinde to nemůže být jinak, ale u nás je poměrně snadné (právě i díky Dockeru) zařídit, že všechny testovací i produkční stroje jedou na Ubuntu 14.04, takže jaderné ABI je stejné. Až budeme migrovat na novější verzi Ubuntu s jiným kernelem, otestujeme to v testovacím prostředí a šoupneme do produkce se stejnou verzí distribuce. Vzhledem k tomu, že veškeré aplikační závislosti jsou v Dockeru, na hostu zbývá jen pár věcí ohledně monitoringu, logování apod., které se mění podle potřeb operations, a není třeba udržovat nějaký server na starší verzi distribuce jen proto, že aplikace je zkompilovaná s nějakou verzí knihovny, apod.
Na tomto místě nemůžu nezmínit systemd-networkd. Je to zvláštní, ale linux, který na síti vyrostl a je tam jako doma nikdy neměl pořádné nastavení sítě. Různé distribuce to řešily různě, ale upřímně, málokterá z nich je připravená na to, že by server měl mít více síťovek a už vůbec ne na to, že by tam bylo více IP adres.To je nejaká prdel abo čo? Však Linux s Apache vďaka tejto feature porazil Windejsi pred rokmi na všetkých serveroch. Kurwa niekto mu hackol server
Heron sa zbláznil, inak si to neviem vysvetliť
Ještě ne
To je nejaká prdel abo čo?
No znáš nějaký systém na nastavení sítě, ve kterém se pohodlně dá nastavit 30 IP? Já ne. Staré network-scripts v rhelu nebo interfaces v Debianu to je prostě peklo. Při poslední instalaci CentOS 7 jsem se poctivě snažil sít nastavovat výhradně nástroji NetworkManageru (protože je to tam default) a při přidávání páté statické routy už to prostě přestalo fungovat (další routy se nepřidaly za běhu jako ty první - při bootu naštěstí jo).
networkd má (subjektivní názor) jednoduché, přehledné nastavení. Chápu, že se nemusí líbít všem.
Však Linux s Apache vďaka tejto feature porazil Windejsi pred rokmi na všetkých serveroch.
Jaké featuře? Určitě ne díky tomu, že admini nastavují síť pomocí serie příkazů ip a add; ip r add
v rc.local
apod.
No znáš nějaký systém na nastavení sítě, ve kterém se pohodlně dá nastavit 30 IP?
CentOS minimálně ve verzi 6? (Viz níže)
Gentoo?
Kromě Debianu už nic dalšího nepoužívám, takže jinak nemůžu sloužit...
Psal jsem pohodlně.V tom případě pardon, netušil jsem, že konfigurace typu
DEVICE=br0 TYPE=Bridge BOOTPROTO=static ONBOOT=yes MACADDR=00:9C:02:9F:63:E8 NM_CONTROLLED="no" DELAY=0 IPADDR=172.22.1.19 PREFIX=22 IPADDR2=192.168.1.64 PREFIX2=24je nepohodlná. Holt máme každý jiný vkus.
Mimochodem, stále ještě spoléhá na labely a pokud je tam nedáš, tak se ip sice nastaví (takže ifup funguje), to jo, ale potom ifdown eth0_30 nevyhodí pouze jednu ip (definovanou v souboru ifcfg-eth0_30), ale pro jistotu shodí celé eth0. S labely to funguje. Jenže kdo by je v době ip používal. Ty skripty zřejmě pocházejí z doby ifconfigu.Ať koukám, jak koukám, na počítači s výše uvedenou konfigurací nic s labely nevidím:
vzlf ~ # ifconfig br0 Link encap:Ethernet HWadr 00:9C:02:9F:63:E8 inet adr:172.22.1.19 Všesměr:172.22.3.255 Maska:255.255.252.0 AKTIVOVÁNO VŠESMĚROVÉ_VYSÍLÁNÍ BĚŽÍ MULTICAST MTU:1500 Metrika:1 RX packets:11919188 errors:0 dropped:0 overruns:0 frame:0 TX packets:8256128 errors:0 dropped:0 overruns:0 carrier:0 kolizí:0 délka odchozí fronty:0 RX bytes:2086288547 (1.9 GiB) TX bytes:2488852575 (2.3 GiB) eth0 Link encap:Ethernet HWadr 00:9C:02:9F:63:E8 AKTIVOVÁNO VŠESMĚROVÉ_VYSÍLÁNÍ BĚŽÍ MULTICAST MTU:1500 Metrika:1 RX packets:24962997 errors:0 dropped:0 overruns:0 frame:0 TX packets:21755739 errors:0 dropped:0 overruns:0 carrier:0 kolizí:0 délka odchozí fronty:1000 RX bytes:4105220936 (3.8 GiB) TX bytes:7823573802 (7.2 GiB) Přerušení:16 Paměť:fb9e0000-fba00000 lo Link encap:Místní smyčka inet adr:127.0.0.1 Maska:255.0.0.0 AKTIVOVÁNO SMYČKA BĚŽÍ MTU:65536 Metrika:1 RX packets:651 errors:0 dropped:0 overruns:0 frame:0 TX packets:651 errors:0 dropped:0 overruns:0 carrier:0 kolizí:0 délka odchozí fronty:0 RX bytes:55350 (54.0 KiB) TX bytes:55350 (54.0 KiB) vzlf ~ # ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:9c:02:9f:63:e8 brd ff:ff:ff:ff:ff:ff 3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000 link/ether 00:9c:02:9f:63:e9 brd ff:ff:ff:ff:ff:ff 4: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN link/ether 00:9c:02:9f:63:e8 brd ff:ff:ff:ff:ff:ff inet 172.22.1.19/22 brd 172.22.3.255 scope global br0 inet 192.168.1.64/24 brd 192.168.1.255 scope global br0Co dělám blbě? Nebo - píšeme oba o tom samém systému?
Ať koukám, jak koukám, na počítači s výše uvedenou konfigurací nic s labely nevidím:Ostatně ani nemohu, co tak koukám do ifup-eth, tak kód pro nastavení adresy je následující:
if ! ip addr add ${ipaddr[$idx]}/${prefix[$idx]} \ brd ${broadcast[$idx]:-+} dev ${REALDEVICE} ${SCOPE} label ${DEVICE}; then echo $"Error adding address ${ipaddr[$idx]} for ${DEVICE}." fi
label ${DEVICE}Pokud náš x souborů ifcfg-eth0:x, tak do každého z nich na řádek DEVICE musíš napsat eth0:x. Potom nastaví label jako eth0:0, eth0:1 atd.
[Match] Name=br0 [Network] Address=46.227.xx.xx/29 Gateway=46.227.xx.xx Address=192.168.42.17/24Ty labely, na CentOS 5 to vypadá takto:
inet 91.214.x.x/24 brd 91.214.192.255 scope global eth2 inet 91.214.x.x/24 brd 91.214.192.255 scope global secondary eth2:1 inet 91.214.x.x/24 brd 91.214.192.255 scope global secondary eth2:2 inet 91.214.x.x/24 brd 91.214.192.255 scope global secondary eth2:3Tam ifup ifdown funguje (ifdown eth2:3) skutečně shodí jen to co má, tedy odstraní IP k labelu eth2:3. Jak ve tvém případě vyhodíš IPADDR2? Odstraníš ji z konfigurace a restart? Což v případě network-scripts znamená vyhození všech adres a potom je tam postupně láduje a kontroluje kolize? Trvá to dost dlouho.
Nechci se pouštět do zbytečných rozepří. Pokud ti systém network-scripts vyhovuje, tak je vše v pořádku.Fajn.
Jak ve tvém případě vyhodíš IPADDR2? Odstraníš ji z konfigurace a restart? Což v případě network-scripts znamená vyhození všech adres a potom je tam postupně láduje a kontroluje kolize? Trvá to dost dlouho.Přiznám se, že takovouto operaci dělám opravdu hodně zřídka (navíc většinu věcí mám ve VPS, kde se stejně adresy upravují přes skripty OpenVZ), takže mi to prostě nevadí. Obvykle to řeším tak, že si upravím konfigurák, přes
ip addr
vyhodím co je potřeba a v noci si zkusím restart pro případ, že bych se někde uklepl. Chápu, že v jiném provozu to může být problém...
No zas zo skúseností môžem povedať, že keď niečo vychytáš v skripte, tak to ide roky, na čo by som so systemd nespoliehal.Ano. Můj vztah k systemd se nezměnil. To, že se mi konfigurace networkd líbí není ani tak dáno kvalitami systemd, jako spíš neutěšeným stavem v nastavení sítě v distribucích (můj osobní názor).
To samozrejme nič nemení na tom že ťa mám rádNejaký čas som ti neskenoval blog a budem ti tam asi musieť robiť cenzúru
Rád tě tam uvidím
.
Být lepší než Windows není až tak těžké
Ale k dokonalosti tomu ještě kus chybí. I když se mi vždycky hodně líbil způsob konfigurace sítě v Debianu, není to úplně 100% a něco jsou spíš dodatečné hacky než promyšlený návrh. Třeba těch víc adres na jednom rozhraní nebo konfigurace DNS. V Apachovi ty konfiguráky při složitějším uspořádání taky nedávají moc velký smysl a jsou tam různé rovnáky na ohýbáky. Celkem hezky má konfiguraci kolem rozhraní, virtuálů a aplikací řešenou GlassFish.
a už vůbec ne na to, že by tam bylo více IP adresDebian to řeší pomocí post-up, kde se pomocí "ip" další adresa přidá, CentOS 6 neuměl víc adres na interface vůbec (možná přes nějaký ekvivalent post-up) atd. Na druhou stranu mně se konfigurace pomocí "ip" líbí a vůbec by mi nevadilo, kdyby distribuce neměly konfiguraci sítě, ale jenom spouštěly skript, do kterého si "ip" a "dhclient" a "iptables" zadám. Sám to tak na notebooku mám, při přechodu mezi sítěmi spustím skript (pomocí párpísmenkového aliasu), který takto síť nastaví. Na tyhle nadstavby jsem nikdy nebyl a asi nebudu ani na networkd.
CentOS 6 neuměl víc adres na interface vůbec (možná přes nějaký ekvivalent post-up) atd.Nechci kverulovat, náčelníku, ale já v /etc/sysconfig/network-scripts/network-functions vidím tohle:
expand_config () { local i=0 val for idx in '' {0..255} ; do ipaddr[$i]=$(eval echo '$'IPADDR$idx) if [ -z "${ipaddr[$i]}" ]; then [ "$idx" ] && [ $idx -gt 2 ] && break continue fi prefix[$i]=$(eval echo '$'PREFIX$idx) netmask[$i]=$(eval echo '$'NETMASK$idx) broadcast[$i]=$(eval echo '$'BROADCAST$idx) arpcheck[$i]=$(eval echo '$'ARPCHECK$idx) if [ "${prefix[$i]}x" != "x" ]; then val=$(/bin/ipcalc --netmask "${ipaddr[$i]}/${prefix[$i]}") netmask[$i]=${val##NETMASK=} fi if [ "${netmask[$i]}x" = "x" ]; then val=$(/bin/ipcalc --netmask "${ipaddr[$i]}") netmask[$i]=${val##NETMASK=} fi if [ "${prefix[$i]}x" = "x" ]; then val=$(/bin/ipcalc --prefix ${ipaddr[$i]} ${netmask[$i]}) prefix[$i]=${val##PREFIX=} fi if [ "${broadcast[$i]}x" = "x" ]; then val=$(/bin/ipcalc --broadcast ${ipaddr[$i]} ${netmask[$i]}) broadcast[$i]=${val##BROADCAST=} fi if [ "${arpcheck[$i]}x" != "x" ]; then arpcheck[$i]=${arpcheck[$i]##ARPCHECK=} arpcheck[$i]=${arpcheck[$i],,*} fi i=$((i+1)) done if [ -z "${NETWORK}" ]; then eval $(/bin/ipcalc --network ${ipaddr[0]} ${netmask[0]}) fi }Čili by mělo jít nastavit až 255 adres pomocí direktivy typu
IPADRESS21=111.222.333.444
v /etc/sysconfig/network-scripts/ifcfg-ethX. Já teda mám ozkoušené maximálně dvě...
Na druhou stranu mně se konfigurace pomocí "ip" líbí a vůbec by mi nevadilo, kdyby distribuce neměly konfiguraci sítě, ale jenom spouštěly skript, do kterého si "ip" a "dhclient" a "iptables" zadám.+1 Bohužel situace je taková, že k vůli závislostem mezi init skripty tam ten start network být musí a někdy i dokonce i start konkrétní iface. Takže to potom vypadá tak, že první ip je nastavována přes distribuční systém správy sítě a zbytek v nějakém skriptu. Což přehlednosti konfigurace příliš nepomáhá.
[...] CentOS 6 neuměl víc adres na interface vůbec (možná přes nějaký ekvivalent post-up) atd. [...]
Tak o tom bych silně pochyboval, protože na jednom produkčním stroji s RHEL 6 (a nepředpokládám, že by to na CentOS 6 bylo jinak) na jedno rozhraní vesele používám tři IP adresy:
$ cat /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 TYPE=Ethernet UUID=abcdefgh-0123-4567-8901-abcdef012348 ONBOOT=yes NM_CONTROLLED=yes BOOTPROTO=none IPADDR=w.x.y.23 PREFIX=24 GATEWAY=w.x.y.1 IPADDR2=w.x.y.24 PREFIX2=24 GATEWAY2=w.x.y.1 IPADDR3=w.x.y.25 PREFIX3=24 GATEWAY3=w.x.y.1 DNS1=a.b.c.d DNS2=e.f.g.h DNS3=i.j.k.l DOMAIN=example.cz DEFROUTE=yes IPV4_FAILURE_FATAL=yes IPV6INIT=no NAME="System eth0" HWADDR=00:11:22:33:44:55
Elegance konfigurace je věc jiná, ale funguje to a stroj má na eth0 3 IP adresy w.x.y.23, w.x.y.24 a w.x.y.25.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.