Jak zbudować niestandardową dystrybucję do obsługi prostej przeglądarki internetowej?

18

Montujemy niektóre lekkie maszyny, których wyraźnym celem jest wyświetlenie jednej strony internetowej na dużym ekranie. Potrzebuję maszyny, aby uruchomiła się jak najprościej i tak szybko, jak to możliwe, i zasadniczo ma uruchomić przeglądarkę (WebKit?) Na pełnym ekranie, ładując jedną stronę, która będzie kontrolowana dynamicznie przez JavaScript. Będę używał dwurdzeniowego procesora Intel D525 ze zintegrowanym układem GPU, więc nie muszę konfigurować żadnych zastrzeżonych sterowników graficznych. Po prawidłowym skonfigurowaniu jednego z tych komputerów powinienem móc po prostu podłączyć dddysk twardy do mojego komputera, a następnie zrzucić go na każdą nową maszynę.

Mam następujące pytania:

  1. Jak mogę utworzyć „dystrybucję”, która zawiera tylko to, czego potrzebuję? Przypuszczam, że będę potrzebował jądra (;]), X i jakiejś przeglądarki internetowej, ale nie za bardzo. Czy mogę wziąć coś takiego jak Ubuntu Server i po prostu zainstalować X Server i znaleźć sposób, aby urządzenie automatycznie się zalogowało, uruchomiło X i uruchomiło przeglądarkę internetową, bez zadawania pytań? Czy jest książka, którą mogę przeczytać, artykuł lub coś takiego?

  2. Czego mogę użyć do ładnej, pozbawionej przeglądarki przeglądarki, która zasadniczo obsługuje „Chromium bez chromu”? Te maszyny w ogóle nie akceptują danych użytkownika. Jeśli będę musiał nimi zarządzać, skorzystam z SSH.

Naftuli Kay
źródło

Odpowiedzi:

12

Wiele dystrybucji ma pewne ułatwienia dla minimalnej instalacji; zasadniczo tam, gdzie ręcznie wybierasz tylko te pakiety, które wyraźnie chcesz zainstalować. Debian ma tę zdolność i byłby lepszym wyborem w twojej sytuacji niż inny oczywisty minimalny rywal, Arch Linux.

Ciągłe uwalnianie Arch może zapewnić poziom ciągłej złożoności, którego chcesz uniknąć. Debian zapewni prostą, minimalną bazę, której szukasz, i zapewni stabilność. Istnieje post na blogu na temat używania Debiana jako kiosku, który może zawierać przydatne wskazówki.

Za pomocą przeglądarki, jak beav_35 sugeruje, Uzbl to wybór dobry. Moja rekomendacja to Vimprobable , przeglądarka WebKit, która jest skryptowalna, sterowana klawiaturą i może być skutecznie kontrolowana przez SSH.

Jako menedżer okien polecam dwm : przy mniej niż 2000 SLOC jest wyjątkowo lekki i można go łatwo skonfigurować do konfiguracji typu kiosku.

jasonwryan
źródło
dwm wygląda świetnie do tego celu, a mimo to jestem znacznie bardziej zaznajomiony z systemami opartymi na Debianie, więc prawdopodobnie użyję Debiana. Jak myślisz, jak mały mogę sprowadzić system operacyjny? Jak mogę zbudować dystrybucję Debian?
Naftuli Kay
W trakcie instalacji, po przejściu do kroku wyboru pakietów, zamiast Laptopa, Standardu itp., Wybierz „Ręczny” i wybierz tylko te pakiety (jak X), których potrzebujesz tylko na minimalium: zacznij tutaj debian.org/CD / netinst / # businesscard-stable
jasonwryan
5

Po pierwsze, możesz nie chcieć odkrywać koła od nowa ... Istnieje kilka dystrybucji ukierunkowanych na kioski. Jeden z nich może zaoszczędzić ci dużo pracy.

Po drugie, jeśli znasz Kickstart na Fedorze i RHEL (lub CentOS lub Scientific Linux), możesz użyć narzędzi Fedory, aby stworzyć własny obrót dowolnej z tych dystrybucji. Dokumentacja jest nieco rozproszona, ale zacznij tutaj .

Steven Pritchard
źródło
Odpowiednik Debiana / Ubuntu: FAI (w pełni automatyczna instalacja)
Gilles „SO- przestań być zły”
4

Zacznij od minimalnej dystrybucji, takiej jak Arch Linux , a następnie zainstaluj potrzebne pakiety. W przypadku prostej przeglądarki internetowej wypróbuj Uzbl .

beav_35
źródło
uzbl jest niesamowity. +1
Naftuli Kay
3

To dość zaangażowane pytanie, a ponieważ twój projekt nie jest do końca jasny, niektóre z tych sugestii mogą być nie na miejscu, ale zastanów się nad nimi do oceny.

  • Przeglądarka internetowa może nie być potrzebna na żadnym komputerze, który jest częścią tablicy wyświetlacza. Jeśli próbujesz wyświetlić jedną stronę na wielu ekranach, prawdopodobnie będziesz chciał użyć jakiejś technologii wyświetlania masowego. Istnieje kilka wariantów Xorg, które specjalizują się w generowaniu jednego dużego wyświetlacza z urządzeń wideo na kilku komputerach.

  • Nawet jeśli używasz osobnych serwerów X na każdym komputerze, możesz użyć przekazywania X do wysyłania danych wyświetlanych z jednego lub więcej innych komputerów, aby przeglądarki nadal nie musiały działać lokalnie.

  • Będziesz chciał albo w ogóle nie używać menedżera okien i używać specyfikacji geometrii, aby uruchomić aplikację na pełnym ekranie, lub użyć konfigurowalnego menedżera okien lub kafelków ram (np. awesome) Do zarządzania oknami na każdym ekranie X. Ułatwiają one sortowanie i sterowanie oknami pełnoekranowymi i są wysoce skryptowalne.

  • Jeśli chodzi o przeglądarkę, myślę, że uzbljest to oczywisty wybór.

  • To może być dobra aplikacja do uruchamiania z sieci. Możesz skonfigurować serwer z jądrem netbooka dostępnym przez TFTP i systemem plików dostępnym przez nfs. Wszystko, co musisz zrobić, to użyć karty sieciowej obsługującej netboot, aby skontaktować się z tym serwerem, pobrać jądro i przejść. Nie dotyczy dysku twardego! I łatwa konserwacja. Wszystkie maszyny mogą potencjalnie uruchomić ten sam obraz.

  • Twoja „dystrybucja” powinna prawdopodobnie składać się z dwóch rzeczy. 1) Zestaw pakietów i 2) zestaw plików konfiguracyjnych. Zestaw pakietów to lista pakietów, które należy zainstalować. Zwykle można to złożyć w plik tekstowy, a następnie można użyć menedżerów pakietów większości dystrybucji, aby zainstalować tę listę pakietów w celu (dysku twardym lub katalogu, który będzie punktem montowania twojego nfs). Pliki konfiguracyjne powinny być prawdopodobnie przechowywane w gitinnym systemie kontroli źródła i zawierać kilka skryptów oraz wszelkie modyfikacje konfiguracji, które należy wprowadzić w systemie podstawowym zainstalowanym z zestawem pakietów. Zbudowanie nowego systemu staje się następnie:

    • Zamontuj dysk lub katalog docelowy
    • package_manager --install-distro --package-set=/path/packagelist.txt --target=/path
    • cd /target/path
    • git clone /path/to/repo (lub w inny sposób wyewidencjonuj swój kod konfiguracji do systemowego katalogu głównego)
    • Zainstaluj bootloader, jeśli dysk, lub dodaj konfigurację PXE, jeśli netboot
    • bagażnik.

To, czego użyjesz jako podstawy, powinno zależeć od tego, z czym czujesz się najlepiej. Chciałbym używać PLD Linux dla siebie, ale prawdopodobnie polecam ArchLinux jako podobny ale lepiej udokumentowanego systemu dla początkujących pracować. Nie ma powodu , dla którego Debian , Fedora lub Gentoo nie mogłyby na to działać.

Caleb
źródło
przy uruchamianiu z sieci: to brzmi NIESAMOWICIE i znacznie ułatwiłoby utrzymanie. Jednak każda maszyna musi załadować inny adres URL, ponieważ będą pobierać informacje unikatowe dla maszyny. Czy to wykonalne? Wszystko inne pozostanie pozornie takie samo, chociaż mogę skonfigurować każdą maszynę tak, aby używała innego użytkownika / hasła do uwierzytelniania HTTP-Basic jako małego środka bezpieczeństwa.
Naftuli Kay
na „Być może nie potrzebujesz przeglądarki internetowej na każdym komputerze, który jest częścią tablicy wyświetlającej”: Właściwie tak myślę. Każda z tych maszyn będzie w innym miejscu, prowadząc jeden ekran przez VGA lub HDMI, wyświetlając unikalną stronę internetową dla tej maszyny. (chociaż możemy podać jeden adres URL, który różni treść w zależności od użytkownika / hasła).
Naftuli Kay
na menedżerach okien: prawdopodobnie po prostu użyłbym naprawdę lekkiego, takiego jak dwmlub awesome. Jak mogę powiedzieć menedżerowi okien, aby uruchomił aplikację bez paska tytułu w trybie pełnoekranowym?
Naftuli Kay
na czym powinna składać się dystrybucja: tak naprawdę wszystko, czego naprawdę potrzebuję, to stworzyć repozytorium git, zachować listę pakietów i pliki konfiguracyjne, a następnie jakoś stworzyć ISO. Jak zdobyć najmniejszą dystrybucję Debiana, a następnie zacząć od tego miejsca? Jak wziąć te pliki konfiguracyjne i stworzyć możliwą do spalenia ISO? Używałbym apt-getlub aptitudena Debianie.
Naftuli Kay
na X-forwarding: to nie powinno być naprawdę konieczne, ponieważ będę napędzał jeden monitor na maszynę. Prawdopodobnie będę musiał znaleźć sposób, aby komputer wydał odwrotne połączenie SSH, aby mój komputer mógł się z nim połączyć, ale może istnieć sposób na zautomatyzowanie tego. Czy istnieje sposób, aby komputer A otworzył połączenie TCP z komputerem B, a następnie komputer B połączył się z tym połączeniem z komputerem A przez SSH? W przeciwnym razie musiałbym uzyskać dynamiczne nazwy DNS dla każdego routera: nie jest zabawne / łatwe.
Naftuli Kay
2

Buildroot 2016.05 + Midori

Buildroot to świetne narzędzie do budowania minimalnych dystrybucji:

  • dajesz mu .configplik
  • pobiera i kompiluje całe wymagane oprogramowanie i zależności oraz tworzy obraz

Midori to minimalistyczna przeglądarka oparta na WebKit , a Buildroot ma wbudowany pakiet Midori.

.configużyty plik: https://github.com/cirosantilli/buildroot-configs/blob/32d1174e0bf8d00b92323eebe8901af3f8c389d3/2016.05/qemu_x86_64_x11_midori_defconfig

Jak wygenerować ten plik konfiguracyjny:

  1. Wykonaj: Jak zainstalować X11 na własnym systemie Linux Buildroot? | Wymiana stosu w systemach Unix i Linux, aby utworzyć obraz za pomocą X11.
  2. make menuconfig
    1. Toolchain
      1. Biblioteka C.
        1. glibc (dla midori)
    2. Pakiety docelowe
      1. Biblioteki graficzne i aplikacje
        1. mesa3d
          1. wybierz wszystkie sterowniki Gallium i DRI, ponieważ nie rozumiem, który jest potrzebny (dla OpenGL EGL)
          2. OpenGL EGL (dla libgtk3)
      2. Biblioteki
        1. Grafika 1. libgtk3 (dla midori)

Wyczyść kompilację, ponieważ zmieniliśmy zestaw narzędzi i skompiluj ponownie:

rm -rf output
make BR2_JLEVEL=$(nproc)

Godziny oczekiwania. Następnie zwykłe:

qemu-system-x86_64 \
    -enable-kvm \
    -M pc \
    -m 512 \
    -kernel output/images/bzImage \
    -drive file=output/images/rootfs.ext2,if=virtio,format=raw \
    -append root=/dev/vda \
    -net nic,model=virtio \
    -net user

I od wewnątrz QEMU:

root
startx

i z GUI X11 kliknij xtermokno i uruchom:

midori

Wynik:

wprowadź opis zdjęcia tutaj

Rozmiar obrazu: 220 mln! Porównaj to z 28M samego systemu X11. Jak zainstalować X11 na własnym systemie Linux Buildroot? - Wymiana stosów Unix i Linux . Prawdopodobnie z powodu zależności WebKit + GTK3.

Testowany na hoście Ubuntu 16.04, QEMU 2.5.0.

NetSurf

Napisane w SDL, który obsługuje fbdev: http://www.netsurf-browser.org/about/screenshots/#framebuffer

fbdev to interfejs niższego poziomu oferowany przez moduł jądra Linuksa, który nie przechodzi przez X11 (myślę, że X11 może opcjonalnie używać go jako backendu). Zasadniczo po prostu piszesz do pamięci, która pokazuje się na ekranie.

Aby korzystać z fbdev na Ubuntu, musisz mieć TTY (np. Ctrl + Alt + F1).

Więc prawdopodobnie możesz uciec z obrazem znacznie mniejszym niż obraz Midori.

Buildroot 2016.05 ma pakiet, netsurf-buildsystemktóry powinien go dostarczyć, ale nie testowałem. Jeśli komuś uda się go uruchomić, edytuj link do pliku .config, zrzutu ekranu i rozmiaru obrazu.

Ciro Santilli
źródło
1

Napisałem kiedyś mały skrypt bash, który pobiera Arch Linux ISO i generuje nowy ISO ze zmodyfikowanym obrazem root, który wykonuje w pełni zautomatyzowaną instalację. Obejmuje to partycjonowanie, a także konfigurowanie i konfigurowanie systemu za pomocą Xorg, FVWM i Chromium. Zainstalowany system zaloguje się automatycznie i uruchomi Chromium. Wystarczy umieścić nowy ISO na dysku flash USB i odchylić się do tyłu. ;-)

Oświadczenie: skrypt jest dostarczany w stanie, w jakim się znajduje, bez gwarancji. Nie używałem go od dłuższego czasu, więc może potrzebować poprawki tutaj lub tam. Zmodyfikuj w razie potrzeby.

#!/bin/bash
# Helpful pages:
#
#   * [ArchWiki topic][1] that explains the options of an AIF configuration
#     file.
#
#   * [Status of automated installation][2], a topic in the Arch Linux Forums
#     that contains the original basic install script by *mhertz*.
#
# [1]: https://wiki.archlinux.org/index.php/AIF_Configuration_File
# [2]: https://bbs.archlinux.org/viewtopic.php?id=111925

TMP_DIR=/tmp/arch-install

# Read command line parameters for input and output ISO files.
if [ -z "$1" ]; then
    echo 'No input file specified, aborting.'
    exit 1
elif [ ! -f "$1" ]; then
    echo 'Input file "'$INPUT_ISO'" not found, aborting.'
    exit 1
elif [ -z "$2" ]; then
    echo 'No output file specified, aborting.'
    exit 1
elif [ -f "$2" ]; then
    echo 'Output file "'$OUTPUT_ISO'" already exists, aborting.'
    exit 1
fi

# Determine full paths to input and output ISO files.
INPUT_ISO=$(readlink -f "$1")
OUTPUT_ISO=$(readlink -f "$2")

# Set some variables for convenience.
SOURCE_DIR=$TMP_DIR/source
DEST_DIR=$TMP_DIR/dest
ROOT_DIR=$TMP_DIR/squashfs-root
BOOT_CFG=$DEST_DIR/boot/isolinux/isolinux.cfg

# Extract ISO image and root image.
mkdir -p $SOURCE_DIR
mount -o loop "$INPUT_ISO" $SOURCE_DIR
cp -a $SOURCE_DIR $DEST_DIR
umount $SOURCE_DIR
rmdir $SOURCE_DIR
unsquashfs -d $ROOT_DIR $DEST_DIR/root-image.sqfs
rm $DEST_DIR/root-image.sqfs

# Modify the root image as needed.
cat >> $ROOT_DIR/etc/aif.conf <<EOF
SOURCE=cd
FILE_URL=file:///src/core/pkg
SYNC_URL=http://ftp.tu-chemnitz.de/pub/linux/archlinux/\$repo/os/\$arch
HARDWARECLOCK=UpTC
TIMEZONE=Europe/Vienna
RUNTIME_REPOSITORIES=
RUNTIME_PACKAGES=
TARGET_GROUPS=base
TARGET_PACKAGES_EXCLUDE=
TARGET_PACKAGES='openssh xorg xcursor-vanilla-dmz-aa'

worker_runtime_network () {
    dhcpcd eth0
}

worker_configure_system () {
    prefill_configs
    sed -i '/^HOSTNAME/ s/"myhost"/"arch"/' \$var_TARGET_DIR/etc/rc.conf
    sed -i '/^password/ s/pam_permit\.so/pam_unix.so md5 shadow/' \$var_TARGET_DIR/etc/pam.d/chpasswd
    sed -i '\|Server = http://ftp\.tu-chemnitz\.de/| s/^#//' \$var_TARGET_DIR/etc/pacman.d/mirrorlist
    sed -i '/id:3:initdefault:/ s/^/#/' \$var_TARGET_DIR/etc/inittab
    sed -i '/id:5:initdefault:/ s/^#//' \$var_TARGET_DIR/etc/inittab
    sed -i '\|x:5:respawn:/usr/bin/xdm| s/^/#/' \$var_TARGET_DIR/etc/inittab
    echo "x:5:respawn:/bin/su -l -c '/usr/bin/startx </dev/null >/dev/null 2>&1' myuser" >> \$var_TARGET_DIR/etc/inittab
    sed -i 's/^timeout .*$/timeout 0/' \$var_TARGET_DIR/boot/grub/menu.lst
    cp /etc/rc.local.firstboot \$var_TARGET_DIR/etc/rc.local
}

# Mandatory variables.
GRUB_DEVICE=/dev/sda
PARTITIONS='/dev/sda 20:ext2:+ 512:swap 2500:xfs *:xfs'
BLOCKDATA='/dev/sda1 raw no_label ext2;yes;/boot;target;no_opts;no_label;no_params
/dev/sda2 raw no_label swap;yes;no_mountpoint;target;no_opts;no_label;no_params
/dev/sda3 raw no_label xfs;yes;/;target;no_opts;no_label;no_params
/dev/sda4 raw no_label xfs;yes;/home;target;no_opts;no_label;no_params'
EOF

cat >> $ROOT_DIR/etc/rc.local <<EOF
aif -p automatic -c /etc/aif.conf
reboot
EOF

cat >> $ROOT_DIR/etc/rc.local.firstboot <<EOF
echo root:rootpassword | chpasswd
useradd -m myuser
echo myuser:myuser | chpasswd
cat >> /home/myuser/.xinitrc <<EOT
#!/bin/sh
exec fvwm2
EOT
cat >> /home/myuser/.Xdefaults <<EOT
Xcursor.theme: Vanilla-DMZ-AA
EOT
mkdir -p /home/myuser/.fvwm
cat >> /home/myuser/.fvwm/config <<EOT
DeskTopSize 1x1
DesktopName 0 Main
DestroyFunc StartFunction
AddToFunc StartFunction
 + I Test (Init) Exec exec xsetroot -solid '#303030'
 + I Test (Init) Exec exec chromium 'http://www.stackoverflow.com'
DestroyMenu RootMenu
AddToMenu RootMenu "Menu" Title
 + "Terminal" Exec exec xterm
 + "Browser" Exec exec chromium 'https://www.stackoverflow.com'
 + "" Nop
 + "Log off" Quit
 + "Reboot" Exec exec sudo /sbin/reboot
 + "Shutdown" Exec exec sudo /sbin/halt
OpaqueMoveSize unlimited
Style * ClickToFocus, ResizeOpaque
Style chromium !Title, !Border, !Handles
CursorStyle root top_left_arrow
CursorStyle stroke hand2
IgnoreModifiers L25
Key Help R A -
Key F1 R A -
Key Tab A M -
Key Escape A MC -
Mouse 1 R A -
Mouse 1 T A Move
Mouse 1 FS A Resize
Mouse 1 I A Iconify Off
Mouse 2 FST A -
Mouse 3 R A Menu RootMenu Nop
EOT
mkdir -p /home/myuser/.config/chromium/Default
touch /home/myuser/.config/chromium/First\ Run
cat >> /home/myuser/.config/chromium/Default/Preferences <<EOT
{
   "alternate_error_pages": {
      "enabled": false
   },
   "autofill": {
      "enabled": false
   },
   "browser": {
      "custom_chrome_frame": true,
      "enable_spellchecking": false
   },
   "default_search_provider": {
       "enabled": true,
       "encodings": "UTF-8",
       "icon_url": "about:blank",
       "id": "2",
       "instant_url": "",
       "keyword": "google.com",
       "name": "Google",
       "prepopulate_id": "1",
       "search_url": "{google:baseURL}search?ie={inputEncoding}&q={searchTerms}",
       "suggest_url": ""
   },
   "devtools": {
      "disabled": true
   },
   "dns_prefetching": {
      "enabled": false
   },
   "download": {
      "directory_upgrade": true
   },
   "extensions": {
      "chrome_url_overrides": {
         "bookmarks": [ "chrome-extension://eemcgdkfndhakfknompkggombfjjjeno/main.html" ]
      }
   },
   "geolocation": {
      "default_content_setting": 2
   },
   "google": {
      "services": {
         "username": ""
      }
   },
   "homepage": "https://www.stackoverflow.com",
   "homepage_is_newtabpage": false,
   "intl": {
      "accept_languages": "en",
      "charset_default": "ISO-8859-1"
   },
   "ntp": {
      "pref_version": 3
   },
   "profile": {
      "clear_site_data_on_exit": true,
      "content_settings": {
         "pref_version": 1
      },
      "default_content_settings": {
         "plugins": 1
      },
      "exited_cleanly": true,
      "notifications_default_content_setting": 2,
      "password_manager_enabled": false
   },
   "safebrowsing": {
      "enabled": false
   },
   "search": {
      "suggest_enabled": false
   },
   "tabs": {
      "use_vertical_tabs": false
   },
   "translate": {
      "enabled": false
   }
}
EOT
chown -R myuser:myuser /home/myuser
pacman -Sy
pacman -S --noconfirm pacman
pacman -S --noconfirm fvwm-devel chromium sudo
echo 'myuser arch=NOPASSWD: /sbin/halt,/sbin/reboot' > /etc/sudoers.d/start_stop
chmod 0440 /etc/sudoers.d/start_stop
rm /etc/rc.local
EOF

# Create the new root image.
mksquashfs $TMP_DIR/squashfs-root $TMP_DIR/dest/root-image.sqfs
rm -rf $TMP_DIR/squashfs-root

# Configure the boot loader.
sed -i 's/TIMEOUT 3000/TIMEOUT 100/' $BOOT_CFG
sed -i '/APPEND hd0 0/d' $BOOT_CFG
sed -i 's/archisolabel=[^ ]*/archisolabel=ARCH/' $BOOT_CFG

# Create the new ISO image.
genisoimage -l -R -b boot/isolinux/isolinux.bin -c boot/isolinux/boot.cat \
    -no-emul-boot -boot-load-size 4 -boot-info-table -V ARCH \
    -o "$OUTPUT_ISO" $DEST_DIR
rm -rf $TMP_DIR
isohybrid "$OUTPUT_ISO"
Igor
źródło
0

Do takiego systemu polecam Puppy .

Chociaż możesz zbudować dystrybucję za pomocą dowolnej wersji Linuksa, Puppy ułatwia tworzenie niestandardowych obrazów rozruchowych, jest kompaktowy i ma doskonałą obsługę systemu plików nakładek.

Powinienem móc po prostu dodać dysk twardy

Nie - polecam zbudowanie obrazu rozruchowego, który można rozsądnie utrzymać - sugerowane podejście wróci i ugryzie.

symcbean
źródło
Chodzi o to, że będę działał system operacyjny na pendrivie. Nie będę nawet potencjalnie dysponował dyskiem, na którym można zainstalować system operacyjny.
Naftuli Kay
0
  • Kilka osób wspomniało o uzbl i zgadzam się, że to dobry wybór - ale możesz znaleźć luakit jeszcze lepiej.

  • Jak już wspomniano Caleb, tak naprawdę nie potrzebujesz żadnego menedżera okien. Oto przykładowy skrypt, który stworzyłem, aby uruchomić serwer Xorg bez WM z maksymalną przeglądarką luakit:

    #!/bin/sh
    XDCMD="xdotool search --class luakit windowsize %3 100% 100%"
    while [ 1 ]
    do
        ( sleep 0.5; $XDCMD || sleep 0.2 && $XDCMD || sleep 5 && $XDCMD ) &
        /usr/bin/luakit $@
    done
    

    Używa xdotool, aby zmaksymalizować okno zaraz po uruchomieniu luakit. Może jest na to lepsze rozwiązanie ...

  • Jako podstawę takiego systemu zdecydowanie polecam Gentoo. Nie tylko dlatego, że wiem to najlepiej;), ale także dlatego, że używa raczej unikalnego podejścia do globalnego zarządzania opcjami kompilacji całego zainstalowanego oprogramowania. Mam na myśli flagi USE . Korzystając z nich, określasz zestaw funkcji / bibliotek / standardów, które są używane przez wszystkie programy, które je obsługują - więc na przykład, jeśli chcesz, aby twoje programy korzystały z ALSA i nie potrzebowały dodatkowych backendów audio, takich jak esd, jack lub pulseaudio, umieść alsa -jack -esd -pulseaudiowśród swoich flag USE. Następnie każdy program, który zbudujesz, możeużycie dodatkowych backendów audio oprócz ALSA zostanie zbudowane bez ich obsługi. Ponieważ dzieje się tak na poziomie konfiguracji / kompilacji, powstaje znacznie cieńsze oprogramowanie. Jest to więc filozofia budowania (przy jednoczesnym poszanowaniu wszystkich zależności) zamiast rozbiórki (co może w końcu być błędne i bardzo trudne do utrzymania).

rozcietrzewiacz
źródło
0

Wspomnę o tym, bo jestem zaskoczony, że nikt inny tego nie ma.

Linux from Scratch to książka (pdf), która przeprowadzi cię przez proces tworzenia własnej dystrybucji Linuksa. Może to być przesada w stosunku do tego, co próbujesz osiągnąć (faktycznie widać, że masz już potrzebne narzędzia), ale może okazać się nieocenionym narzędziem w zrozumieniu, jak działa system. To naprawdę nie jest takie trudne i nie wymaga programowania.

n0pe
źródło