Я решил проблему с записью образа DD на USB-накопитель вместо образа ISO.
Таким образом, я могу получить полный набор шагов по установке.
При использовании инструмента Rufus в главном диалоговом окне такой опции нет, но после подтверждения форматирования в другом диалоговом окне можно выбрать, следует ли создавать образ ISO (по умолчанию )или образ DD.
На Raspberry Pi 4B с Buster у меня возникали разные ошибки при попытке запустить urserver
как службу systemd
. Может вообще не иметь отношения к вашим проблемам.
Мне помогло :Я думаю, что ключ был в том, чтобы выйти из стартового скрипта с выходом 0, чтобы systemd игнорировал ошибки, вызванные triggerhappy
.
urserver.service:
[Unit]
Description=Unified Remote Server
After=syslog.target network.target
[Service]
Type=forking
User=root
Group=root
ExecStart=/opt/urserver/urserver-start --no-notify
ExecStop=/opt/urserver/urserver-stop
SyslogIdentifier=urserver
[Install]
WantedBy=multi-user.target
урсервер -старт:
#!/bin/sh
#
# Path to installation directory
#
EXEC_PATH="/opt/urserver/urserver"
PID_PATH="$HOME/.urserver/urserver.pid"
ICON_PATH="/usr/share/icons/hicolor/96x96/apps/urserver.png"
REMOTES_PATH="$HOME/.urserver/remotes"
BACKUP_PATH="$HOME/.urserver/backup"
#
# Check arguments
#
NO_COPY=false
NO_MANAGER=false
NO_NOTIFY=false
for var in "$@"
do
if [ "$var" = "--no-copy" ]; then
NO_COPY=true
elif [ "$var" = "--no-manager" ]; then
NO_MANAGER=true
elif [ "$var" = "--no-notify" ]; then
NO_NOTIFY=true
fi
done
#
# Copy user files
#
if ! "$NO_COPY" = true; then
echo "copying user files"
mkdir -p "$HOME/.config/autostart/"
cp -uf /opt/urserver/urserver-autostart.desktop $HOME/.config/autostart/urserver.desktop
echo "backup remotes"
mkdir -p $BACKUP_PATH/
cp -af $REMOTES_PATH/. $BACKUP_PATH/
echo "create custom folder"
mkdir -p $REMOTES_PATH/custom/
echo "copying remotes"
rm -rf $REMOTES_PATH/remotes/
rm -rf $REMOTES_PATH/bundled/
mkdir -p $REMOTES_PATH/bundled/
cp -af /opt/urserver/remotes/. $REMOTES_PATH/bundled/
else
echo "skipping copy"
fi
#
# Start the server
#
echo "starting server"
mkdir -p "$HOME/.urserver"
$EXEC_PATH --remotes=$REMOTES_PATH --daemon
#
# Open the web manager
#
if ! "$NO_MANAGER" = true; then
echo "opening manager"
sleep 1
xdg-open http://localhost:9510/web 2> /dev/null
else
echo "skipping manager"
fi
exit 0
Я бы начал с удаления Environment=HOME=~
.
systemd
автоматически устанавливает $HOME
, поэтому вам не нужно указывать его, если только вы не хотите, чтобы он был отличным от -по умолчанию. Когда пользователь root
, я думаю, $HOME
, вероятно, будет установлен на /root
. Кроме того, ~
— это ярлык sh
для домашнего каталога, но вне вашей оболочки это ничего не значит. systemd
не является sh
и не поддерживает весь синтаксис sh
. Вы также заметите, что такие вещи, как &&
или |
, не будут работать в ExecStart=
.
Удаление строки Environment=
может решить все проблемы. Но если нет, вот еще кое-что, на что стоит обратить внимание:
User=root
Group=sudo
Это немного странно. User=root
уже подразумевается, когда он запускается на системной шине, поэтому он избыточен. Я мог видеть, что Group=sudo
полезен только тем, что новые файлы могут быть созданы, принадлежащие группе sudo
, хотя это, вероятно, интересно только в том случае, если root
на самом деле является членом sudo
, и ваш по умолчанию umask
создает новые файлы как группа -доступны для чтения/записи. Я думаю, вы можете удалить их, хотя это может не иметь большого значения.
Поскольку ваш сервис — Type=forking
, рассмотрите возможность добавления:
PIDFile=/root/.urserver/urserver.pid
это поможет systemd надежно идентифицировать основной процесс службы
Ошибки DSO_load
указывают на то, что ваше приложение не может динамически загружать модуль. Сообщение выглядит усеченным, но относится к ssl
.
Когда я ищу man openssl
, я вижу, что переменная OPENSSL_CONF
должна указывать на файл конфигурации, а не на каталог, содержащий файл конфигурации. Попробуйте удалить эту строку или использовать что-то вроде:
Environment=OPENSSL_CONF=/etc/ssl/openssl.cnf
Обратите внимание, что это, вероятно, расположение по умолчанию, поэтому переменную, вероятно, не нужно устанавливать.