Актуальная инструкция для Arch-based систем на примере SteamOS Holo на Steam Deck.
Недавно приобрёл Стимдек. А теперь представьте лицо avarage linux enjoyer'a, если я скажу, что эта шняга на SteamOS - лучший портативный ПК для работы с российскими ЭДО для тех, кто часто ездит по стране, и нужно постоянно держать связь с контрагентами и поставщиками в ЭДО.
Эта тема консолидирует дискуссию из предыдущей темы из старого форума
Здесь я не буду рассматривать процесс подготовки Стимдека, установки Рутокена, библиотек и зависимостей, а сразу перейду к установке СБИС Плагина, который необходим для работы в системе СБИС ЭДО (он же - Саби ЭДО).
ИНСТРУКЦИЯ:
Скачать deb-пакеты отсюда в папку Downloads.
Открыть терминал, ввести cd ~/Downloads и затем создать новую папку для установки
mkdir -p ~/saby_install_temp
Распаковать их командой
find ~/Downloads -maxdepth 1 -iname "*.deb" -exec dpkg -x {} ~/saby_install_temp/ \;
Эта команда найдет все файлы .deb в ~/Downloads (независимо от регистра букв) и распакует их в папку saby_install_temp.
Скопировать в систему с помощью команд
sudo cp -rn ~/saby_install_temp/opt/* /opt/
и
sudo cp -rn ~/saby_install_temp/usr/* /usr/
(если папки нет, cp просто её не создаст, но и не упадет с ошибкой).
Выполнить команды:
sudo chown -R root:root /opt/Tensor 2>/dev/null
sudo chmod -R 755 /opt/Tensor 2>/dev/null
sudo chown -R root:root /opt/nmh-transport 2>/dev/null
sudo chmod -R 755 /opt/nmh-transport 2>/dev/null
Проверить, есть ли конфиги во временной папке:
ls -la ~/saby_install_temp/usr/share/
Там должна быть папка Tensor, если она есть, то выполнить:
sudo mkdir -p /usr/share/Tensor
sudo cp -r ~/saby_install_temp/usr/share/Tensor/* /usr/share/Tensor/
Выдать права доступа:
sudo chown -R root:root /usr/share/Tensor
sudo chmod -R 755 /usr/share/Tensor
Запустить Saby Center как фоновый процесс:
nohup /opt/Tensor/Saby/temp_saby/26.1200.489/service/saby > /tmp/saby_log.txt 2>&1 &
Выполнить проверку, работает ли служба:
ps aux | grep saby
Проверить, появился ли в трее значок Саби (он может быть серым и виснуть в статусе "Загрузка" или "Loading", но он всё равно работает, не нужно его тыкать и пытаться перезапустить).
Известные проблемы:
После обновления системы вся установка Саби слетает, нужно будет делать её заново.
Для того, чтобы не делать это постоянно вручную, я написал однокнопочный скрипт-установщик:
#!/bin/bash
# =============================================================================
# SCRYPT: Автоматическая установка Saby на SteamOS
# Включает: Отключение RO, проверку dpkg, скачивание, распаковку, настройку systemd
# =============================================================================
# Цвета для вывода
GREEN='\033[0;32m'
RED='\033[0;31m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# Логирование
log_info() {
echo -e "${GREEN}[INFO]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
log_warn() {
echo -e "${YELLOW}[WARN]${NC} $1"
}
# Папка для временных файлов
INSTALL_DIR="$HOME/saby_auto_install"
mkdir -p "$INSTALL_DIR"
cd "$INSTALL_DIR" || exit 1
log_info "Начинаю установку Saby..."
# =============================================================================
# ЭТАП 1: Отключение защиты файловой системы
# =============================================================================
log_info "ЭТАП 1: Проверка и отключение Read-Only файловой системы..."
if steamos-readonly status | grep -q "readonly"; then
log_info "Система в режиме Read-Only. Отключаю..."
sudo steamos-readonly disable
if [ $? -eq 0 ]; then
log_info "Успешно отключено."
else
log_error "Не удалось отключить RO. Попробуйте вручную: sudo steamos-readonly disable"
exit 1
fi
else
log_info "Система уже в режиме Read-Write."
fi
# =============================================================================
# ЭТАП 2: Проверка и исправление dpkg
# =============================================================================
log_info "ЭТАП 2: Проверка утилиты dpkg..."
DPKG_OK=true
# Проверка наличия файла и его работоспособности
if [ ! -f "/usr/bin/dpkg" ]; then
DPKG_OK=false
elif ! dpkg --version &> /dev/null; then
DPKG_OK=false
fi
if [ "$DPKG_OK" = false ]; then
log_error "dpkg не найден или работает некорректно."
echo ""
# Текст, который вы просили вставить
cat << 'EOF'
Привет! Я расшифровал ваше сообщение (вероятно, вы забыли переключить раскладку):
> *«Пожалуйста, помогите сделать в правильном порядке для установки это приложение программу».*
Судя по логам, вы пытаетесь установить пакеты .deb (формата Debian/Ubuntu) на Steam Deck (который работает на Arch Linux) с помощью утилиты dpkg.
У вас возникли две ошибки:
1. **conflicting files**: Файл /usr/bin/dpkg уже существует в системе (вероятно, остался от неудачной установки или был скопирован вручную), поэтому pacman не может установить нормальную версию dpkg.
2. **Permission denied**: Когда вы пытаетесь запустить dpkg в цикле, система обращается к "сломанному" файлу, который не имеет прав на выполнение.
### Как исправить (пошагово)
Вам нужно удалить "битый" файл, установить dpkg правильно через пакетный менеджер, а потом распаковать ваши архивы.
Выполните следующие команды по очереди в терминале:
#### Шаг 1. Удалите конфликтующий файл
Эта команда удалит старый/битый файл, который мешает установке.
sudo rm /usr/bin/dpkg
#### Шаг 2. Установите dpkg корректно
Теперь pacman сможет установить программу без конфликтов.
sudo pacman -S dpkg
*(На вопрос "Proceed with installation?" нажмите Y и Enter).*
#### Шаг 3. Распакуйте ваши .deb файлы
Теперь, когда dpkg установлен и работает, ваша команда должна выполниться успешно. Убедитесь, что вы находитесь в нужной папке (где лежат .deb файлы).
cd ~/saby_install_temp
for file in debs/*.deb; do dpkg -x "$file" .; done
---
### Важное примечание про СБИС на Steam Deck
Просто распаковать файлы (как вы делаете командой dpkg -x) может быть недостаточно для запуска программы, так как СБИС — это сложное приложение с множеством зависимостей (библиотек).
На Steam Deck (Arch Linux) пакеты .deb обычно не устанавливаются напрямую.
1. **Если вам нужно просто запустить:** Попробуйте найти папку с исполняемым файлом после распаковки (часто это opt/СБИС/... или похожий путь) и запустить файл напрямую.
2. **Если нужно установить "как положено":** Для Arch Linux существует утилита **debtap**, которая конвертирует .deb пакеты в родной формат Arch (.pkg.tar.zst). Это более надежный способ, так как он проверит зависимости.
Если после распаковки программа не запускается, напишите, и я подскажу, как конвертировать пакеты или запустить их через Proton (Windows-версию), если Linux-версия СБИС капризная.
EOF
echo ""
read -p "Хотите, чтобы скрипт попытался исправить это автоматически? (y/n): " choice
if [[ "$choice" == "y" || "$choice" == "Y" ]]; then
log_info "Попытка удаления старого dpkg..."
sudo rm -f /usr/bin/dpkg
log_info "Установка dpkg через pacman..."
sudo pacman -S --noconfirm dpkg
if [ $? -eq 0 ]; then
log_info "dpkg успешно установлен."
else
log_error "Не удалось установить dpkg. Прерывание."
exit 1
fi
else
log_error "Установка прервана пользователем."
exit 1
fi
else
log_info "dpkg найден и работает корректно."
fi
# =============================================================================
# ЭТАП 3: Скачивание пакетов
# =============================================================================
log_info "ЭТАП 3: Скачивание необходимых .deb пакетов..."
# Массив ссылок
declare -A URLs=(
["saby.deb"]="https://update.saby.ru/SabyDesktop/master/linux/deb_repo/saby.deb"
["sabycenter.deb"]="https://update.saby.ru/SabyCenter/master/linux/sabycenter.deb"
["nmh-transport.deb"]="https://update.saby.ru/NmhTransport/master/linux/nmh-transport.deb"
["sbis-libstdc++12.deb"]="https://update.saby.ru/SabyDesktop/master/linux/deb_repo/sbis-libstdc++12.deb"
)
for filename in "${!URLs[@]}"; do
url="${URLs[$filename]}"
if [ -f "$filename" ]; then
log_warn "Файл $filename уже существует. Пропускаю скачивание."
else
log_info "Скачиваю $filename с $url ..."
wget -q --show-progress "$url" -O "$filename"
if [ $? -ne 0 ]; then
log_error "Не удалось скачать $filename."
fi
fi
done
log_info "Скачивание завершено."
# =============================================================================
# ЭТАП 4: Распаковка
# =============================================================================
log_info "ЭТАП 4: Распаковка пакетов..."
for file in *.deb; do
log_info "Распаковываю $file ..."
dpkg -x "$file" .
done
log_info "Распаковка завершена."
# =============================================================================
# ЭТАП 5: Копирование файлов в систему
# =============================================================================
log_info "ЭТАП 5: Установка файлов в системные директории..."
# Копируем opt (основные программы)
if [ -d "opt" ]; then
sudo cp -rn opt/* /opt/
log_info "/opt обновлен."
else
log_warn "Папка opt не найдена в распакованных файлах."
fi
# Копируем usr/share (иконки, конфиги)
if [ -d "usr/share" ]; then
sudo cp -rn usr/share/* /usr/share/
log_info "/usr/share обновлен."
else
log_warn "Папка usr/share не найдена."
fi
# Копируем библиотеки (важно для libstdc++)
if [ -d "usr/lib" ]; then
sudo cp -rn usr/lib/* /usr/lib/
log_info "/usr/lib обновлен."
fi
# =============================================================================
# ЭТАП 6: Настройка прав доступа
# =============================================================================
log_info "ЭТАП 6: Настройка прав доступа (chown/chmod)..."
# Tensor и Saby (с большой и маленькой буквы, на всякий случай)
for dir in "/opt/Tensor" "/opt/tensor"; do
if [ -d "$dir" ]; then
sudo chown -R root:root "$dir"
sudo chmod -R 755 "$dir"
log_info "Права настроены для $dir"
fi
done
# NmhTransport (с большой и маленькой буквы)
for dir in "/opt/NmhTransport" "/opt/nmh-transport"; do
if [ -d "$dir" ]; then
sudo chown -R root:root "$dir"
sudo chmod -R 755 "$dir"
log_info "Права настроены для $dir"
fi
done
# =============================================================================
# ЭТАП 7: Настройка автозагрузки (Systemd)
# =============================================================================
log_info "ЭТАП 7: Настройка автозагрузки через systemd..."
# Ищем исполняемый файл saby внутри папок версии
# Ищем путь вида .../service/saby
SABY_BIN=$(find /opt/Tensor/Saby -path "*/service/saby" -type f | head -n 1)
if [ -z "$SABY_BIN" ]; then
log_error "Не удалось найти исполняемый файл saby для настройки службы!"
log_error "Автозагрузка не настроена. Вам придется запускать вручную."
else
log_info "Найден бинарник: $SABY_BIN"
mkdir -p ~/.config/systemd/user/
cat > ~/.config/systemd/user/saby.service << EOF
[Unit]
Description=Saby Background Service
After=graphical-session.target
[Service]
ExecStart=$SABY_BIN
Restart=on-failure
RestartSec=5
[Install]
WantedBy=default.target
EOF
log_info "Файл службы создан."
# Перезагрузка и запуск демона
systemctl --user daemon-reload
systemctl --user enable saby.service
systemctl --user start saby.service
# Проверка статуса
sleep 2
if systemctl --user is-active --quiet saby.service; then
log_info "Служба Saby успешно запущена и добавлена в автозагрузку!"
else
log_error "Служба не запустилась. Проверьте логи: journalctl --user -u saby.service"
fi
fi
# =============================================================================
# ЭТАП 8: Финализация
# =============================================================================
log_info "ЭТАП 8: Очистка временных файлов..."
# Удаляем папку установки, но оставляем .deb файлы на всякий случай (можно раскомментировать rm для полной чистки)
# rm -rf "$INSTALL_DIR"
cd ~
log_warn "ВНИМАНИЕ: Сейчас скрипт включит защиту файловой системы (steamos-readonly enable)."
log_warn "Это может помешать автоматическим обновлениям Saby и записи логов."
log_warn "Если Saby будет работать некорректно, выполните: sudo steamos-readonly disable"
read -p "Включить защиту сейчас? (y/n): " ro_choice
if [[ "$ro_choice" == "y" || "$ro_choice" == "Y" ]]; then
sudo steamos-readonly enable
log_info "Защита включена."
else
log_warn "Защита осталась выключенной."
fi
echo ""
log_info "=================================================="
log_info "УСТАНОВКА ЗАВЕРШЕНА!"
log_info "=================================================="
log_info "Если служба запустилась, Saby уже работает в фоне."
log_info "Проверьте статус: systemctl --user status saby.service"
log_info "=================================================="
Засуньте его в install_saby.sh:
nano ~/install_saby.sh
Вставьте туда код выше. Сохраните (Ctrl+O, Enter) и выйдите (Ctrl+X).
Сделайте файл исполняемым:
chmod +x ~/install_saby.sh
Запустите:
~/install_saby.sh
Также можно сделать скрипт ручного запуска и скрипт автозапуска.
Создаём скрипт для запуска:
cat > ~/start_saby.sh << 'EOF'
#!/bin/bash
# Путь к исполняемому файлу Saby (содержит версию)
SABY_BIN="/opt/Tensor/Saby/temp_saby/26.1200.489/service/saby"
# Проверяем, не запущен ли уже процесс (чтобы не запускать дубликаты)
if pgrep -f "$SABY_BIN" > /dev/null; then
echo "Saby уже запущен."
exit 0
fi
echo "Запускаю Saby..."
# Запускаем в фоновом режиме
nohup "$SABY_BIN" > /tmp/saby_log.txt 2>&1 &
echo "Saby запущен. Логи: /tmp/saby_log.txt"
EOF
Делаем его исполняемым:
chmod +x ~/start_saby.sh
Теперь, когда вам нужно запустить Saby вручную, просто напишите в терминале:
~/start_saby.sh
Теперь сделаем автозапуск Саби как службы.
В терминал копируем и вставляем целиком:
mkdir -p ~/.config/systemd/user/
cat > ~/.config/systemd/user/saby.service << 'EOF'
[Unit]
Description=Saby Background Service
After=graphical-session.target
[Service]
# Указываем путь к бинарнику напрямую (systemd сам запустит его в фоне)
ExecStart=/opt/Tensor/Saby/temp_saby/26.1200.489/service/saby
Restart=on-failure
RestartSec=5
[Install]
WantedBy=default.target
EOF
Теперь нужно сказать системе, чтобы она загрузила этот файл и добавила в автозагрузку:
systemctl --user daemon-reload
systemctl --user enable saby.service
systemctl --user start saby.service
Убедимся, что служба активна:
systemctl --user status saby.service
Возможно это будет полезно новым пользователям Саби, у которых система на основе Arch Linux, типа SteamOS, CachyOS, Manjaro, Garuda, BlendOS и других.
Инструкции из этой темы подразумевают, что вы разобрались, как поставить Chromium-GOST, Рутокен/JaKarta и библиотеки зависимостей на свою машину под управлением Arch-based системы. Если нужна инструкция по полной интеграции всех этих ништяков в Arch-based Linux или инструкция для ДиаДок, то напишите мне в лс форума или здесь, в комментариях.