Як я можу створити спеціальний дистрибутив для запуску простого веб-браузера?


18

Ми збираємо кілька легких машин із чіткою метою відображення однієї веб-сторінки на великому екрані. Мені потрібна машина, щоб по суті завантажувати її якнайлегше і якомога швидше, і по суті, щоб вона запустила браузер (WebKit?) У повноекранному режимі, завантаживши одну сторінку, яка буде динамічно керуватися JavaScript. Я буду використовувати двоядерний процесор Intel D525 з вбудованим графічним процесором, тому мені не потрібно встановлювати будь-які фірмові драйвери графіки. Після того, як я встановив одну з цих машин належним чином, я повинен просто мати можливість ddжорсткого диска на своєму комп’ютері, а потім скидати його на кожну нову машину.

У мене є такі питання:

  1. Як я можу створити "розподіл", який включає лише те, що мені потрібно? Я думаю, мені знадобляться ядро ​​(;]), X та веб-браузер, але не дуже багато іншого. Чи можу я взяти щось на зразок Ubuntu Server і просто встановити X Server і знайти спосіб автоматичного входу машини, запуску X та запуску веб-браузера, без запитань? Чи є книга, яку я можу прочитати, або стаття чи щось таке?

  2. Що я можу використовувати для приємного веб-переглядача, який працює в режимі "без хрому"? Ці машини взагалі не прийматимуть користувачів. Якщо мені потрібно керувати ними, я буду використовувати SSH.

Відповіді:


12

У багатьох дистрибутивах є можливість мінімальної установки; по суті, де ви вручну вибираєте лише ті пакунки, які ви явно хочете встановити. Debian має цю здатність і був би кращим вибором у вашій ситуації, ніж інший очевидний мінімальний суперник, Arch Linux.

Статус випуску Arch може надавати рівень постійної складності, який ви бажаєте уникнути. Debian забезпечив би просту мінімальну базу, яку ви шукаєте, плюс стабільність пропозиції. Є повідомлення в блозі про використання Debian як кіоску, який може запропонувати корисні поради.

Для браузера, а beav_35 передбачає, Uzbl вибір хороший. Моєю рекомендацією буде Vimprobable , браузер WebKit, який може бути написаний на скриптах , керований клавіатурою і який може ефективно контролюватися через SSH.

Як менеджер вікон, я рекомендував би dwm : менше 2000 SLOC, він надзвичайно легкий і може бути легко налаштований для налаштування типу кіоску.


dwm виглядає чудово для цієї мети, і я набагато більше знайомий з системами на базі Debian, так що я, мабуть, буду використовувати Debian. Як ви думаєте, наскільки малим я можу змусити ОС? І як я можу побудувати дистрибутив Debian?
Naftuli Kay

Під час встановлення, коли ви досягнете кроку вибору пакунків, замість ноутбука, стандарту тощо виберіть "Вручну" і виберіть лише ті пакунки (як X), які вам потрібні для чистого мінімуму: почніть тут debian.org/CD / netinst / # візитна
картка

5

Перш за все, ви, можливо, не захочете винаходити колесо ... Є кілька дистрибуцій, орієнтованих на кіоск. Один із них може заощадити багато роботи.

По-друге, якщо ви знайомі з Kickstart на Fedora та RHEL (або CentOS або Scientific Linux), ви можете використовувати інструменти Fedora, щоб зробити власний спін будь-якого з цих дистрибутивів. Документація трохи розсіяна, але почніть тут .


Еквівалент Debian / Ubuntu: FAI (повністю автоматична установка)
Жил "SO- перестань бути злим"

4

Почніть з мінімального дистрибутива, такого як Arch Linux , а потім встановіть необхідні пакети. Для простого веб-браузера спробуйте Uzbl .


uzbl є дивним. +1
Naftuli Kay

3

Це досить пов’язане питання, і оскільки ваш проект не зовсім зрозумілий, деякі з цих пропозицій можуть бути непомітними, але врахуйте їх, які слід оцінити.

  • Можливо, вам не потрібен веб-браузер на будь-якому комп’ютері, який є частиною дисплейного масиву. Якщо ви намагаєтеся показати одну сторінку на багатьох екранах, швидше за все, ви захочете використовувати якусь технологію масового відображення. Існує кілька варіантів Xorg, які спеціалізуються на створенні одного великого дисплея з відеопристроїв на декількох машинах.

  • Навіть якщо ви використовуєте окремі X-сервери на кожній машині, ви можете використовувати X-переадресацію для надсилання відображуваних даних з одного або декількох інших комп'ютерів, тому браузерам все одно не доведеться запускати локально.

  • Вам потрібно буде або взагалі не використовувати менеджера вікон і використовувати специфікації геометрії для запуску програми на весь екран, або використовувати налаштовану плитку або менеджер вікон рамки (наприклад awesome) для управління вікнами на кожному X-дисплеї. Це дозволяє легко сортувати та керувати повноекранними вікнами та відрізняються високим сценарієм.

  • Що стосується браузера, я думаю, uzblце, швидше за все, зрозумілий вибір.

  • Це може бути гарним додатком для завантаження мережі. Ви можете налаштувати сервер за допомогою ядра нетбука, доступного через TFTP, та файлової системи, доступної через nfs. Все, що потрібно зробити вашим клієнтам, - це використовувати NIC, здатний до роботи з мережевою завантаженням, щоб зв’язатися з цим сервером, завантажити своє ядро ​​та перейти. Жоден жорсткий диск не бере участь! І просте обслуговування. Усі машини можуть потенційно завантажувати одне і те ж зображення.

  • Ваш "дистрибутив", мабуть, повинен складатися з двох речей. 1) Набір пакунків і 2) набір файлів конфігурації. Набір пакетів - це список пакетів, які потрібно встановити. Зазвичай це може бути зібрано у текстовому файлі, і тоді ви можете використовувати більшість диспетчерів пакетів дистрибутива для встановлення цього списку пакунків до цільового (на жорсткому диску чи в каталозі, який буде вашою точкою монтажу nfs). Файли конфігурації, ймовірно, повинні зберігатися в gitіншій системі управління джерелом і містити кілька сценаріїв і будь-яких модифікацій конфігурації, які потрібно зробити базовій системі, встановленій за допомогою набору пакетів. Потім будується нова система:

    • Змонтувати диск або цільовий каталог
    • package_manager --install-distro --package-set=/path/packagelist.txt --target=/path
    • cd /target/path
    • git clone /path/to/repo (або іншим чином поверніть свій конфігураційний код до кореня системи)
    • Якщо встановити завантажувач, встановіть завантажувач або додайте конфігурацію PXE
    • завантаження.

Який дистрибутив ви використовуєте в якості основи, повинен залежати від того, що вам найбільше комфортно. Я б використовував PLD-Linux для себе, але, ймовірно, рекомендую ArchLinux як подібну, але краще документовану систему для новачка, з яким можна працювати. Немає причин, щоб Debian , Fedora чи Gentoo не працювали на це.


при завантаженні в Інтернеті: це звучить ДУЖЕ і зробить такі речі набагато простішими в обслуговуванні. Однак кожній машині потрібно завантажити іншу URL-адресу, оскільки вони будуть отримувати інформацію, унікальну для машини. Є чи, що здійснимо? Все інше нібито залишатиметься незмінним, хоча я можу налаштувати кожну машину для використання іншого користувача / пароля для автентифікації HTTP-Basic як невеликий засіб безпеки.
Naftuli Kay

на "Можливо, вам не потрібен веб-браузер на кожному комп’ютері, який є частиною дисплейного масиву". Кожна з цих машин буде знаходитися в іншому місці, ведучи один дисплей через VGA або HDMI, показуючи унікальну веб-сторінку для цієї машини. (хоча ми можемо подати єдину URL-адресу, яка змінює вміст залежно від користувача / пароля).
Naftuli Kay

для менеджерів вікон: я, мабуть, просто використовував би дійсно легкий, як-от dwmабо awesome. Як я можу сказати менеджеру вікон запустити програму без заголовка в повноекранному режимі?
Naftuli Kay

про те, з чого повинен складатися дистрибутив: тому мені справді потрібно створити git repo, зберегти список пакунків та файли конфігурації, а потім якось створити ISO. Як мені отримати найдрібніший дистриб'ютор Debian і потім працювати звідти? Як я можу взяти ці конфігураційні файли та зробити ISO-файл, що можна записати? Я б використовував apt-getабо aptitudeна Debian.
Naftuli Kay

на X-переадресації: це насправді не повинно бути необхідним, оскільки я буду керувати одним дисплеєм на машині. Можливо, мені доведеться знайти спосіб, щоб машина випустила зворотне з'єднання SSH, щоб мій комп'ютер міг підключитися до нього, але може бути спосіб автоматизувати це. Чи є спосіб мати комп’ютер? Відкрити TCP-з'єднання з комп'ютером B, а потім підключити комп'ютер B через це з'єднання з комп'ютером A через SSH? Інакше мені доведеться отримати динамічні імена DNS для кожного маршрутизатора: не весело / просто.
Naftuli Kay

2

Buildroot 2016.05 + Midori

Buildroot - чудовий інструмент для побудови мінімальних дистрибутивів:

  • ви даєте йому .configфайл
  • він завантажує та компілює все необхідне програмне забезпечення та залежності та створює зображення

Midori - мінімалістичний браузер на базі WebKit , а Buildroot має вбудований пакет Midori.

.configвикористаний файл: https://github.com/cirosantilli/buildroot-configs/blob/32d1174e0bf8d00b92323eebe8901af3f8c389d3/2016.05/qemu_x86_64_x11_midori_defconfig

Як створити цей конфігураційний файл:

  1. Дотримуйтесь: Як встановити X11 в моїй власній системі Linux Buildroot? | Unix & Linux Stack Exchange для створення зображення з X11.
  2. make menuconfig
    1. Інструментальна ланцюг
      1. C бібліотека
        1. glibc (для midori)
    2. Цільові пакети
      1. Графічні бібліотеки та програми
        1. mesa3d
          1. виберіть усі драйвери Gallium та DRI, оскільки я не розумію, який потрібен (для OpenGL EGL)
          2. OpenGL EGL (для libgtk3)
      2. Бібліотеки
        1. Графіка 1. libgtk3 (для midori)

Очистіть збірку, тому що ми змінили ланцюжок інструментів і знову створили:

rm -rf output
make BR2_JLEVEL=$(nproc)

Зачекайте години. Тоді звичайне:

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

І зсередини QEMU:

root
startx

і натисніть на xtermвікно інтерфейсу X11 і запустіть:

midori

Результат:

введіть тут опис зображення

Розмір зображення: 220М! Порівняйте це з 28M голою системою X11 Як встановити X11 в моїй власній системі Linux Buildroot? - Обмін стеками Unix та Linux . Ймовірно, через залежності WebKit + GTK3.

Тестовано на хості Ubuntu 16.04, QEMU 2.5.0.

NetSurf

Написано в SDL, який підтримує fbdev: http://www.netsurf-browser.org/about/screenshots/#framebuffer

fbdev - це інтерфейс нижчого рівня, пропонований модулем ядра Linux, який не проходить X11 (я думаю, що X11 необов'язково може використовувати його як бекенд). Ви в основному просто записуєте в пам'ять, і це відображається на екрані.

Щоб використовувати fbdev в Ubuntu, ви повинні бути на TTY (наприклад, Ctrl + Alt + F1).

Таким чином , ви , ймовірно , можете піти з зображенням , як менше , ніж у Мідорі.

У Buildroot 2016.05 є пакет, netsurf-buildsystemякий повинен надавати його, але я не пройшов тестування. Якщо комусь вдалося запустити його, відредагуйте посилання на .config, скріншот та розмір зображення.


1

Я колись написав невеликий скрипт bash, який бере ISO Linux Arch Linux і генерує новий ISO із зміненим кореневим зображенням, що робить повністю автоматизовану установку. Сюди входить розділ, а також налаштування та налаштування системи за допомогою Xorg, FVWM та Chromium. Встановлена ​​система автоматично ввійде в систему і запустить Chromium. Просто поставте новий ISO на флешку та відкиньтесь назад. ;-)

Відмова від відповідальності: сценарій надається як є, гарантія не надається. Я не використовував його деякий час, тому це може знадобитися налаштування тут чи там. Змініть за потребою.

#!/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"

0

Для такої системи я рекомендую Щеня .

У той час як ви можете побудувати дистрибутив за допомогою будь-якої версії Linux, Puppy дуже легко створює власні завантажувальні зображення, розроблений для компактності та має чудову підтримку файлової системи.

Я повинен просто мати можливість отримати жорсткий диск

Ні - я б порекомендував створити завантажувальний образ, який ви можете з розумом підтримувати - запропонований вами підхід повернеться і вкусить вас.


Справа в тому, що я буду запускати операційну систему на палець. Я навіть не матиму дискового накопичувача, з яким би встановити ОС.
Naftuli Kay

0
  • Кілька людей згадали про узбла, і я погоджуюся, що це приємний вибір - але ви можете знайти luakit ще краще.

  • Як вже говорив Калеб, вам не дуже потрібен жоден менеджер вікон. Ось приклад сценарію, який я створив для запуску сервера Xorg без WM з максимально можливим браузером 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
    

    Він використовує xdotool для максимізації вікна відразу після запуску luakit. Можливо, є краще рішення для цього, хоча ...

  • Для основи такої системи я б точно рекомендував Gentoo. Це не тільки тому, що я це найкраще знаю;), але й тому, що він використовує досить унікальний підхід глобального управління параметрами збирання всього встановленого програмного забезпечення. Я маю на увазі прапори USE . Використовуючи ці, ви визначаєте набір функцій / бібліотек / стандартів, які використовуються всіма програмами, які їх підтримують - так, наприклад, якщо ви хочете, щоб ваші програми використовували ALSA та не потребували додаткових аудіозаписів, таких як esd, jack або pulseaudio, помістити alsa -jack -esd -pulseaudioсеред ваших прапорів USE. Після цього кожен фрагмент програмного забезпечення, яке ви будуєте, можевикористовувати додаткові аудіозаписи, крім ALSA буде створено без підтримки. Оскільки це відбувається на рівні конфігурації / збірки, ви закінчуєте значно тонше програмне забезпечення. Отже, це філософія нарощування (при дотриманні всіх залежностей), а не збивання (що в кінцевому підсумку може бути помилковим і дуже важким в обслуговуванні).


0

Я згадаю про це, бо дивуюсь, що більше нікого немає.

Linux від Scratch - це книга (pdf), яка допоможе вам створити власний дистрибутив Linux. Це може бути непосильним для того, що ви намагаєтеся досягти (насправді, це бачить, як у вас вже є необхідні інструменти), але це може виявитися безцінним інструментом для розуміння того, як працює система. Це насправді не так складно і програмування не бере участь.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.