Как я могу создать пользовательский дистрибутив для выполнения простого веб-браузера?

Я лично предпочитаю view для статического содержания или tail -f для динамического контента.

Это не отвечает на Ваш вопрос, все же. Существует высказывание, "почему использование больше, если у Вас есть меньше" ;-)

Но существуют случаи, где я предпочитаю кошку меньше: Я обычно работаю с X11-окнами. Эти окна имеют буфер прокрутки, который может быть установлен на некоторую сотню строк.

Выполнение a cat для - скажем, 200 строк и затем использование мыши с полосой прокрутки более удобно для меня, чем использование less в этих случаях.

18
25.11.2018, 00:59
9 ответов

Много дистрибутивов имеют некоторое средство для минимальной установки; по существу, где Вы вручную выбираете только те пакеты, которые Вы явно хотите установить. Debian имеет эту способность и был бы лучшим выбором, в Вашей ситуации, чем другой очевидный минимальный соперник, Дуга Linux.

Состояние выпуска прокрутки дуги может обеспечить уровень продолжающейся сложности, которой Вы хотите сторониться. Debian обеспечил бы простую, минимальную основу, которую Вы ищете плюс устойчивость предложения. Существует сообщение в блоге при использовании Debian как киоск, который может предложить некоторые полезные подсказки.

Для браузера, поскольку предлагает beav_35, Uzbl является хорошим выбором. Моей рекомендацией был бы Vimprobable, браузер WebKit, который scriptable, управляемая клавиатура и может управляться эффективно по SSH.

Как менеджер окон, я рекомендовал бы dwm: меньше чем в 2 000 SLOC это чрезвычайно легко и может быть легко настроено для установки типа киоска.

12
27.01.2020, 19:46
  • 1
    dwm выглядит большим с этой целью, и я намного более знаком с находящимися в Debian системами так или иначе, таким образом, я буду, вероятно, использовать Debian. Как маленький Вы думаете, что я могу свалить ОС к? И как я могу создать распределение Debian? –  Naftuli Kay 01.08.2011, 20:56
  • 2
    В то время как Вы продолжаете двигаться через установку при достижении избранного шага пакетов, вместо Ноутбука, Стандарта, и т.д., выберите "Manual" и только выберите те пакеты (как X), Вам нужно для пустого minimium: запустите здесь Положительную сторону Steven debian.org/CD/netinst/#businesscard-stable –  jasonwryan 01.08.2011, 21:29

В первую очередь, Вы не могли бы хотеть изобретать велосипед... Существует несколько сфокусированных на киоске дистрибутивов. Один из тех мог бы сохранить Вас большая работа.

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

5
27.01.2020, 19:46
  • 1
    Debian/Ubuntu: FAI (Полностью Автоматическая установка) –  Gilles 'SO- stop being evil' 02.08.2011, 00:44

Запустите с минимального дистрибутива, такого как Дуга Linux, затем установите пакеты, в которых Вы нуждаетесь. Поскольку простой веб-браузер пробует Uzbl.

4
27.01.2020, 19:46

Это - симпатичный включенный вопрос, и так как Ваш проект не является совершенно четким, некоторые из этих предложений могут быть вне метки, но считать их вещами оценить.

  • Вам, возможно, не понадобится веб-браузер на никогда компьютере, который является частью массива дисплея. При попытке показать одну единственную страницу через многие экраны, возможности - Вы, собираются хотеть использовать некоторую массовую технологию дисплея. Существует несколько вариантов Xorg, которые специализируются на генерации одного большого дисплея из видеоустройств на нескольких машинах.

  • Даже при использовании отдельных X-серверов на каждой машине можно использовать X-передачу для отправки данных дисплея из одного или нескольких других компьютеров, таким образом, браузеры все еще не должны были бы работать локально.

  • Вы захотите или не использовать менеджер окон вообще и спецификации геометрии использования, чтобы запустить Ваш полный экран приложения или использовать настраиваемую мозаику или менеджер окон платформы (такой как awesome) управлять окнами на каждых X дисплеях. Они помогают отсортировать и управлять полноэкранными окнами и очень scriptable.

  • Что касается браузера, я думаю uzbl вероятно четкий выбор.

  • Это могло бы быть хорошим приложением для сетевой начальной загрузки. Можно установить сервер с ядром нетбука, доступным через TFTP и файловую систему, доступную через nfs. Все Ваши клиенты должны сделать, использовать netboot способный 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 если netboot
    • начальная загрузка.

Какой дистрибутив Вы используете, поскольку основа должна зависеть от того, чем Вы являетесь самыми довольными. Я использовал бы PLD-Linux для меня, но вероятно рекомендовал бы ArchLinux как подобная, но лучшая зарегистрированная система для новичка работать с. Нет никакой причины Debian, Fedora, или хинду не работал бы на это.

3
27.01.2020, 19:46
  • 1
    на сетевой начальной загрузке: это звучит ПОТРЯСАЮЩИМ и сделало бы вещи настолько легче поддержать. Однако каждая машина должна загрузить различный URL, поскольку они будут выбирать информацию, уникальную для машины. Это выполнимо? Все остальное якобы осталось бы таким же, хотя я мог бы настроить каждую машину для использования различного пользователя/пароля для Базовой аутентификации HTTP так же мало средства безопасности. –  Naftuli Kay 01.08.2011, 21:02
  • 2
    на "Вас, возможно, не понадобится веб-браузер на каждом компьютере, который является частью массива дисплея": Я думаю, что буду на самом деле. Каждая из этих машин будет в различном месте, управляя одним дисплеем по VGA или HDMI, отображая уникальную веб-страницу для той машины. (хотя мы могли служить единственному URL, который варьируется содержание на пользователе/пароле). –  Naftuli Kay 01.08.2011, 21:07
  • 3
    на менеджерах окон: я, вероятно, просто использовал бы действительно легкий как dwm или awesome. Как я могу сказать менеджеру окон запускать приложение без строки заголовка в полноэкранном режиме? –  Naftuli Kay 01.08.2011, 21:08
  • 4
    на том, из чего должен состоять дистрибутив: таким образом, все, в чем я действительно нуждался бы, должно создать мерзавца repo, сохранить список пакета и конфигурационные файлы, и затем создать ISO так или иначе. Как я получаю самый крошечный дистрибутив Debian и затем обрабатываю оттуда? Как я беру эти файлы конфигурации и делаю горючий ISO? Я использовал бы apt-get или aptitude на Debian. –  Naftuli Kay 01.08.2011, 21:11
  • 5
    на X-передаче: это не должно действительно быть необходимо, поскольку я буду управлять одним дисплеем на машину. Я должен буду, вероятно, найти, что способ иметь машину выпускает обратное соединение SSH, таким образом, мой компьютер смог бы соединиться с ним, но мог бы быть способ автоматизировать это. Существует ли способ иметь компьютер открытое соединение TCP к компьютеру B и затем иметь компьютер B подключение по тому соединению с компьютером через SSH? Иначе я должен был бы получить динамические названия DNS каждого маршрутизатора: не забавный/легкий. –  Naftuli Kay 01.08.2011, 21:14

Я записал немного сценария удара, после того как это берет Дугу Linux ISO и генерирует новый ISO с измененным корневым изображением, которое делает полностью автоматизированную установку. Это включает разделение, а также установку и конфигурирование системы с Xorg, FVWM и Хромом. Установленная система войдет в систему автоматически и запустит Хром. Просто поместите новый ISO на карту флэш-памяти с интерфейсом USB и откиньтесь назад.;-)

Отказ от ответственности: сценарий предоставлен как есть, никакая данная гарантия. Я не использовал его в некоторое время, таким образом, этому, возможно, понадобилась бы тонкая настройка здесь или там. Измените по мере необходимости.

#!/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"
1
27.01.2020, 19:46

Для системы как это я рекомендовал бы Щенка.

В то время как можно создать Вас дистрибутив с помощью любой версии Linux, Щенок делает очень легким создать пользовательские загружаемые образы, разработан, чтобы быть компактным и имеет большую поддержку файловой системы наложения.

Я должен просто смочь к dd жесткий диск

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

0
27.01.2020, 19:46
  • 1
    Вещь, я буду выполнять операционную систему на карте флэш-памяти. У меня даже потенциально не будет дисковода, с которым можно установить ОС. –  Naftuli Kay 01.08.2011, 21:35
  • Несколько человек упомянули uzbl, и я соглашаюсь, что это - хороший выбор - но Вы могли бы найти luakit еще лучше.

  • Как Caleb уже упомянул, Вам действительно не нужен никакой менеджер окон. Вот сценарий в качестве примера, который я создал для выполнения сервера Xorg WM-less с максимизируемым 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 запустился. Возможно, существует лучшее решение этого хотя...

  • Для основы такой системы я определенно рекомендовал бы хинду. Это - то, не только потому, что я знаю это лучше всего ;), но также и потому что это использует довольно уникальный подход глобального управления опциями времени изготовления всего установленного программного обеспечения. Я имею в виду флаги ИСПОЛЬЗОВАНИЯ. Используя тех, Вы определяете набор функций/библиотек/стандартов, которые используются всеми программами, которые поддерживают их - так, например, если Вы хотите, чтобы Ваши программы использовали ALSA и не были нужны в дополнительных аудио бэкендах как esd, разъем или pulseaudio, Вы помещаете alsa -jack -esd -pulseaudio среди Ваших флагов ИСПОЛЬЗОВАНИЯ. После этого каждая часть программного обеспечения, которое Вы создаете, который может использовать дополнительные аудио бэкенды кроме ALSA, будет создана без поддержки тех. Так как это происходит на уровне конфигурации/сборки, Вы заканчиваете со значительно более тонким программным обеспечением. Таким образом, это - философия создания (при уважении всех зависимостей) вместо того, чтобы разделить вниз (который может закончить тем, что был багги и очень трудно поддержал).

0
27.01.2020, 19:46

Я упомяну это, потому что я удивлен, что никто больше не имеет.

Linux с нуля является книгой (PDF), который обходит Вас посредством создания Вашего собственного дистрибутива Linux. Это могло бы быть излишество для того, что Вы пытаетесь выполнить (на самом деле, это видит, поскольку у Вас уже есть инструменты, Вам нужно), но это может оказаться неоценимым инструментом в понимании, как работает система. Это действительно не, что трудно и нет никакого включенного программирования.

0
27.01.2020, 19:46

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

How to generate that config file:

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

Чистим сборку, потому что мы изменили toolchain и собираем снова:

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

и из X11 GUI щелкаем окно xterm и запускаем:

midori

Результат:

enter image description here

Размер изображения: 220M! Сравните это с 28M голой системы X11 Как установить X11 на мою собственную систему Linux Buildroot? - Unix & Linux Stack Exchange . Вероятно, из-за зависимостей 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).

Так что вы, вероятно, сможете обойтись без изображения гораздо меньшего размера, чем у Midori.

В Buildroot 2016.05 есть пакет netsurf-buildsystem, который должен это обеспечить, но я не тестировал. Если кому-то удастся запустить его, пожалуйста, добавьте ссылку на .config, скриншот и размер изображения.

2
27.01.2020, 19:46

Теги

Похожие вопросы