-
Firefox Quantum pod CentOS 6, czyli zabaw z chroot ciąg dalszy
Postanowiłem założyć sobie nowego Firefox-a pod starym CentOS-em. Bo jakoś tak lubię CentOS-a 6, nie przekonuje mnie ani systemd ani nowy gnome, a jak mam kombinować z Centosem7 i robić z niego Centosa-6 (np. przez instalację Mate) to postanowiłem pomajstrować w drugą stronę.
Wykorzystałem patent opisany przy okazji instalacji php-7 w chroot https://centos.com.pl/2017/09/28/php7-obok-standardowego-php-dzieki-yumchroot/. No to jedziemy, tym razem popełniłem skrypt który załatwi mi czarną robotę. Oprócz tego skryptu musimy ręcznie pobrać pakiet centos-release-7-4.1708.el7.centos.x86_64.rpm z instalacji CentOS-a 7. Oczywiście numerek pakietu może się zmienić, ten który zamieściłem był aktualny w czasie gdy to robiłem.
#!/bin/bash
DIR=/opt/centos7/
mkdir -p $DIR
rpm --root=$DIR --initdb
rpm --root=$DIR -ivh centos-release-7-4.1708.el7.centos.x86_64.rpm rpm --root=$DIR --import $DIR/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
yum -y --installroot=$DIR install bash util-linux
mount --bind /tmp/ $DIR/tmp
mount --bind /proc/ $DIR/proc
mount --bind /dev $DIR/dev
mount --bind /dev/pts/ $DIR/dev/pts
mount --bind /dev/shm/ $DIR/dev/shm
mount --bind /home/ $DIR/home/
ln -f /etc/resolv.conf $DIR/etc/
ln -f /etc/passwd $DIR/etc/
ln -f /etc/shadow $DIR/etc/
ln -f /etc/group $DIR/etc/
yum -y --installroot=$DIR install gtk3 xorg-x11-xauth vi
W porównaniu z przypadkiem w którym opisywałem instalację php-7, tu nie chcę robić całkowicie izolowanego środowiska, wprost przeciwnie, chcę, żeby $HOME było wspólne. Dlatego zastosowałem mount -bind które to pozwoliło mi na współdzielenie „strategicznych” katalogów pomiędzy systemem bazowym a moim minimalistycznym CentOS-em 7 w chroocie. Dodatkowo tworzę hardlinki /etc/passd (i powiązanych) oraz „/etc/resolv.conf”
Operację tę trzeba powtarzać przy każdym boocie systemu, tak więc warto zrobić sobie drugi skrypt który będzie startował np. z rc.local. Taki oto:
#!/bin/bash
DIR=/opt/centos7
mount --bind /tmp/ $DIR/tmp
mount --bind /proc/ $DIR/proc
mount --bind /dev $DIR/dev
mount --bind /dev/pts/ $DIR/dev/pts
mount --bind /dev/shm/ $DIR/dev/shm
mount --bind /home/ $DIR/home/
ln -f /etc/resolv.conf $DIR/etc/
ln -f /etc/passwd $DIR/etc/
ln -f /etc/shadow $DIR/etc/
ln -f /etc/group $DIR/etc/
No dobra, mamy tego minimalistycznego CentOS-a 7, pora go wypróbować.
Ściągamy Firefoxa Quantum i rozpakowujemy go gdzieś w obrębie $DIR. Ja to robię w „/opt/centos7/opt/firefox”. Trochę dziwnie wyglądają te dwa razy /opt/ ale z punktu widzenia środowiska chrootowanego jest to po prostu /opt/firefox.
Dla wygody stworzyłem kolejny skrypt który nazwałem 7run. Służy do uruchamiania programów w naszym chroocie. Oto on:
#!/bin/bash
DIR=/opt/centos7
chroot $DIR su konrad $*
A żeby wykonać chroot trzeba być root-em, to tworzymy plik „/etc/sudoers.d/jail” z taką zawartością:
konrad ALL = NOPASSWD: /usr/local/bin/7run
Trochę to może pokrętne, ale dzięki temu możemy uruchomić naszego firefoxa przez
sudo /usr/local/bin/7run "-c /opt/firefox/firefox"
Oczywiście, konrad to ja, zmieńcie sobie na wasz login.
Jeśli wszystko poszło dobrze, powinniście zobaczyć pięknego nowego firefoxa. Aaaa, najpierw zamknijcie starego firefoxa, ba zamiast uruchomić nowego firefoxa, dostaniecie nowe okno starego. Na wszelki wypadek warto też zbackupować katalog .mozilla
Do pełni szczęścia potrzebujemy jeszcze pomajstrować z pulseuadio, bo nowy firefox jest póki co „niemy.
W pliku /etc/pulse/default.pa na końcu dopisujemy linijkęload-module module-native-protocol-tcp auth-ip-acl=127.0.0.1
a w katalogu domowym, w podkatalogu .pulse tworzymy plik „client.conf” w którym wpisujemy
default-server = 127.0.0.1
Oczywiście tego naszego niby-centosa-7 możemy wykorzystać nie tylko dla firefox-a. Możemy sobie „w srodku” instalować każdy program który nie chce działać na CentOS-ie 6 i uruchamiać przez 7run.