200 mount chroot-hoz

 ( plt | 2019. június 25., kedd - 12:05 )

Több mint 200 chroot környezetet szeretnék kialakítani PHP-FPM számára. Mivel a PHP használ mysql adatbázist, minden chroot környezetben elérhetővé kell tennem a /var/run/mysql mappát.
Jelenleg ezt a mount --bind paranccsal oldom meg, de ilyen mennyiségnél ez már eléggé időigényes a művelet, és nem is igazán tetszik.
Van bárkinek alternatív ötlete? Sajnos én nem találtam más megoldási lehetőséget. Jó lenne valamilyen mappa hardlink, bár direktben ilyet csinálni nem lehet.

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Az nem jo, ha a mysql-edet halozaton keresztul ered el? PG tudom, hogy tud ilyet, ha jol emlekszem, ez is.

--
When you tear out a man's tongue, you are not proving him a liar, you're only telling the world that you fear what he might say. -George R.R. Martin

Elérni lehetne így, de elvárás, hogy a jelenleg működő PHP kódok változtatás nélkül futhassanak, és ezek jó része socketen keresztül kapcsolódik.

socat-el tudsz socket=>tcp vagy tcp=>socket forwardot, de nem hangzik túl jól, ha fejlesztő/megrendelő képtelen átírni az sql connection stringet...

socat-tal tudsz unix-listen+unix-connect kapcsolatot csinalni, ez futhat a "hoston" is, igy nemkell tcp-vel szarakodni

--
A vegtelen ciklus is vegeter egyszer, csak kelloen eros hardver kell hozza!

Próbáltam utánaolvasni, de nem találtam meg, hogy a socat paranccsal hogyan érhetem el, hogy a /var/run/mysqld/mysqld.sock fájlt a 200 chrooton belül is el lehessen érni.

200 socat-ot kell futtatnod listen:/home/ittvan/var/run/mysqld/mysqld.sock, vagy irsz egy sajat tcp proxy progit, ami minden helyen listenel, es forwardolja a masikra

--
A vegtelen ciklus is vegeter egyszer, csak kelloen eros hardver kell hozza!

Köszönöm, tökéletes! Sokkal gyorsabb, mint a mount. Remélem összességében kevesebb erőforrást is eszik. Kezelni mindenképp könnyebb.
Mivel gyakorlatilag egyetlen olyan példát sem találtam a neten, ahol a chrootban futó mysql szerver eléréséhez a socat parancsot használták volna, álljon itt a csatlakoztató bash kód, hátha valakinek még szüksége lesz rá:

[ -e $CHROOT/var/run/mysqld/mysqld.sock ] || socat UNIX-LISTEN:$CHROOT/var/run/mysqld/mysqld.sock,fork,user=mysql,group=mysql,mode=777 UNIX-CONNECT:/var/run/mysqld/mysqld.sock &

Tetszőleges számú ilyen parancs egymás után megadható.
A kód többszöri futtatása nem okoz hibát.
Az összes forward pedig a

killall socat

paranccsal leállítható.
Egyszerű és nagyszerű. :)

Ilyet ne csinalj. Hasznalj tcp-t.
A chroot helyett kontenereket.

Amugy nem kell a full mappat.

Azt mondod, hogy hardlinkeljem be magát a socket fájlt?

Akar azt is csinalhatod, ha nincsenek kulon particion.
Egyebkent azt mondom, h a socket file-t magat is mountolhatod v. meginkabb azt a konyvtart, amiben a socket file van.
Az adatbazis file-okat felesleges.

De meg1x, ne csinald, magad fogod szopatni vele.
Amugymeg chroot...a 2000-es evek evekben meg elfogadhato volt, de most mar kontenerizalni javasolt.

Ide tök felesleges és php-fpm tud saját chroot-t, gondolom azt a featuret akarja használni.

Igen, a php-fpm chroot-ját használom. Jelenleg is a /var/run/mysqld mappákat mountolom csak, de ez is időigényes.
A konténer nem hiszem, hogy kevesebb erőforrást enne, mint a php-fpm chroot-ja, még mountokkal együtt sem.

attól többet fog kelleni mountolni :)

Jelenleg is a /var/run/mysqld mappákat mountolom csak, de ez is időigényes.

Nem tudom, nálam van 100-as nagyságrendben mount -o bind, és nem lassú. A docker is használja ezt a funkciót, nem tűnt fel, hogy pont ez lassú lenne.

A konténer nem hiszem, hogy kevesebb erőforrást enne, mint a php-fpm chroot-ja, még mountokkal együtt sem.

Kb. pont ugyanannyi erőforrást eszik. A lényeges különbség, hogy egy valag erőforrást/rendszerhívást is tud virtualizálni, amit a sima chroot nem tesz meg (pl. PID name space), illetve ezt az egészet szabványos leíróval teszi, ergó zéró energiával tudod vinni a konténert egyik gépről a másikra.