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:
make menuconfig
mesa3d
Чистим сборку, потому что мы изменили 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
Результат:
Размер изображения: 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, скриншот и размер изображения.
С конфигурацией по умолчанию в Debian непривилегированный пользователь не будет иметь доступа ни к журналам systemd-journald, ни к журналам syslog. Если вы вошли в систему как обычный пользователь, вы получите этот ответ от journalctl:
$ journalctl
No journal files were found.
, что немного сбивает с толку.
Если вы вошли в систему как root, journalctl --unit=yourservice
должен предоставить вам информацию, которую вы ищете. После systemctl перезапуска bind9
на моем сервере я получаю это после journalctl --unit=bind9
:
Jun 03 18:20:24 ns systemd[1]: Stopping BIND Domain Name Server...
Jun 03 18:20:24 ns named[27605]: received control channel command 'stop'
Jun 03 18:20:24 ns systemd[1]: Starting BIND Domain Name Server...
Jun 03 18:20:24 ns systemd[1]: Started BIND Domain Name Server.
Если я убью bind9 явно с помощью kill -9
, journalctl --unit=bind9
дает:
Jun 03 18:46:25 ns systemd[1]: bind9.service: main process exited, code=killed, status=9/KILL
Jun 03 18:46:25 ns rndc[28028]: rndc: connect failed: 127.0.0.1#953: connection refused
Jun 03 18:46:25 ns systemd[1]: bind9.service: control process exited, code=exited status=1
Jun 03 18:46:25 ns systemd[1]: Unit bind9.service entered failed state.
Jun 03 18:46:25 ns systemd[1]: bind9.service holdoff time over, scheduling restart.
Jun 03 18:46:25 ns systemd[1]: Stopping BIND Domain Name Server...
Jun 03 18:46:25 ns systemd[1]: Starting BIND Domain Name Server...
Jun 03 18:46:25 ns systemd[1]: Started BIND Domain Name Server.
Первая строка указывает, что процесс умер, потому что он был убит.
systemd-journald также пересылает все сообщения журнала в syslog, поэтому вы также должны найти эти сообщения в /var/log/syslog
.
Systemd и systemd-journald имеют конфигурацию по умолчанию, скомпилированную в конфигурации, которую можно изменить в /etc/systemd/system.conf
и /etc/systemd/journald.conf
.
Может быть полезно знать, что по умолчанию systemd-journald хранит журналы в папке /run
, то есть tmpfs
, и поэтому исчезает после перезагрузки. Это означает, что для того, чтобы получить сообщения журнала старше последней загрузки, вам придется просмотреть файлы системного журнала. В этом случае journalctl не будет давать вам журналы старше последней загрузки. Это можно изменить в /etc/systemd/journald.conf
, установив Storage=persistent
.
Страницы руководства, которые документируют это:
man 8 systemd-journald
man 5 journald.conf
man 5 systemd-system.conf
man 5 systemd-user.conf
Также обратите внимание, что для автоматического перезапуска службы systemd это должно быть настроено в его файле .service
. От man 5 systemd.service
:
Restart=
Configures whether the service shall be
restarted when the service process exits, is
killed, or a timeout is reached. The service
process may be the main service process, but it
may also be one of the processes specified with
ExecStartPre=, ExecStartPost=, ExecStop=,
ExecStopPost=, or ExecReload=. When the death
of the process is a result of systemd operation
(e.g. service stop or restart), the service
will not be restarted. Timeouts include missing
the watchdog "keep-alive ping" deadline and a
service start, reload, and stop operation
timeouts.
Takes one of no, on-success, on-failure,
on-abnormal, on-watchdog, on-abort, or always.
If set to no (the default), the service will
not be restarted.
Вы можете увидеть время последнего запуска или перезапуска службы. Используйте service chatty status
или systemctl status chatty
. Вот примеры для службы apache2 или httpd:
# service apache2 status
● apache2.service - LSB: Apache2 web server
Loaded: loaded (/etc/init.d/apache2)
Drop-In: /lib/systemd/system/apache2.service.d
└─forking.conf
Active: active (running) since ven. 2017-06-02 15:53:01 CEST; 21min ago
Process: 14773 ExecStop=/etc/init.d/apache2 stop (code=exited, status=0/SUCCESS)
Process: 22912 ExecReload=/etc/init.d/apache2 reload (code=exited, status=0/SUCCESS)
Process: 14880 ExecStart=/etc/init.d/apache2 start (code=exited, status=0/SUCCESS)
CGroup: /system.slice/apache2.service
строка Active: активна (работает) с вл. 2017-06-02 15:53:01 CEST; 21 минута назад
покажите, как работает служба, но я не знаю, сможете ли вы отобразить как «список» именно то, что ищете.
# systemctl status httpd
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
Active: active (running) since Fri 2019-10-11 00:35:58 EEST; 1 weeks 3 days ago
Docs: man:httpd(8)
man:apachectl(8)
Process: 29728 ExecReload=/usr/sbin/httpd $OPTIONS -k graceful (code=exited, status=0/SUCCESS)
Main PID: 10722 (httpd)
Status: "Total requests: 0; Current requests/sec: 0; Current traffic: 0 B/sec"
Memory: 8.7M
Если вам нужно написать это в скрипте, вы должны использовать systemctl show
команда. Это полезнее для скриптов, чем пытаться разобрать что-нибудь из status
. Например, чтобы узнать, когда последний раз запускалась служба, вы можете использовать:
$ systemctl show systemd-journald --property=ActiveEnterTimestamp
ActiveEnterTimestamp=Wed 2017-11-08 05:55:17 UTC
Если вы хотите увидеть все доступные свойства, просто опустите флаг, и он выведет их все.
$ systemctl show <service_name>
Документацию по этим свойствам можно найти здесь .
Мы можем использовать опцию -f
для фильтрации сообщений из журнала(https://www.freedesktop.org/software/systemd/man/systemd.journal-fields.html).
journalctl -f _TRANSPORT=journal example