LINUX.ORG.RU

Экспертная установка openSUSE Tumbleweed

 , ,


0

1

вместо приветствия..

Давно знаю ваш форум. Решил вместо вопросов и просьб делиться информацией. Надеюсь это кому нибудь пригодится. И вероятно продолжу публикации.

статья несколько сырая. но вполне рабочий вариант. предполагается, что пользователь линуксом владеет на уровне - «arch инвалид» «arch пользователь».

на момент публикации. версия - 06.08.2025

ps

если чего-то не хватает или есть ошибки - дайте знать. дополню/улучшу.


Экспертная установка openSUSE Tumbleweed 🦎

Ниже — пошаговая инструкция по установке openSUSE Tumbleweed «с нуля» без YaST, с учётом UEFI-загрузки и GPT-разметки.

Скачивание и подготовка Live-образа

Сначала скачайте последнюю Live-ISO openSUSE Tumbleweed и запишите её на флешку. Нам нужен именно любой openSUSE live ISO, так как нам потребуется zypper.

# любым способом скачайте openSUSE live-ISO...
sudo dd if=./openSUSE-Tumbleweed*.iso of=/dev/sdX bs=4M status=progress oflag=sync

Разметка диска (GPT + UEFI/BIOS)

Загрузившись выполним разметку диска. Здесь и далее предполагается, что целевой диск — /dev/sda.

ps

если вы хотите зашифрованный системный LUKS диск. пожалуйста спуститесь чуть ниже и выполните то, что там предлагается.

parted /dev/sda

# UEFI -------------------------------
(parted) mklabel gpt

# (По желанию) отдельный /boot:
parted /dev/sda mkpart ESP fat32 1MiB 301MiB
parted /dev/sda set 1 boot on
parted /dev/sda set 1 esp on

parted /dev/sda mkpart primary ext4 320MiB 100%


# BIOS -------------------------------

parted /dev/sda mklabel gpt
# Зарезервируйте область для GRUB:
parted /dev/sda mkpart primary 1MiB 2MiB
parted /dev/sda set 1 bios_grub on
# (По желанию) отдельный /boot:
parted /dev/sda mkpart primary ext4 2MiB 320MiB
# и в таком случае boot у вас именно /dev/sda2
parted /dev/sda set 2 boot on
parted /dev/sda mkpart primary ext4 320MiB 100%

немного про flag Boot on

Флаг boot on в parted делает следующее: • На MBR-дисках он включает так называемый “bootable” (или “active”) бит в таблице разделов. BIOS при старте проверяет, что на разделе установлен этот бит, и пытается с него загрузиться.
• На GPT-дисках в разных версиях parted этот флаг может переводиться либо в BIOS-совместимый “bios_grub”-флаг (для загрузки через GRUB-bios), либо просто дублировать “legacy boot”-атрибут, но никак не заменяет “esp”-флаг под EFI.

Если вам нужна именно загрузка по UEFI, то основное — это тип раздела EFI System Partition (GUID EF00) и флаг esp (или “boot” в сочетании со “esp”, в parted он часто только дублирует атрибут “ESP”).

Делаем swap-файл

# новомодная утилита для создания файл-дисков (loop devices)
fallocate -l 2G /swapfile
# или
dd if=/dev/zero of=/swapfile bs=1M count=2048

chmod 600 /swapfile

mkswap /swapfile
swapon /swapfile

# ---> на этапе fstab добавьте это
# ---> 
# /swapfile   none   swap   defaults   0 0

Форматируем разделы

mkfs.vfat -F32 -n EFI    /dev/sda1
  mkfs.ext4 -L boot /dev/sda2  # если gpt+bios
mkfs.ext4 -L root        /dev/sdX3

Монтируем

mkdir -p /mnt/os
mount /dev/sdX3 /mnt/os
mkdir -p /mnt/os/boot/efi
mount /dev/sdX1 /mnt/os/boot/efi

LUKS зашифрованный диск

# чтож нам нужен cryptSetup внутри live среды...
zypper in cryptsetup

# Инициализируйте LUKS-контейнер на разделе
cryptsetup luksFormat /dev/sda3

# Откройте (раскройте) контейнер и привяжите его к виртуальному устройству
cryptsetup open /dev/sda3 cryptroot

mkfs.ext4 /dev/mapper/cryptroot

# --> во время установки вы должны установить cryptsetup внутрь новой системы
# --> то, что сказано ниже в этом разделе выполните после этапов установки opensuse, но еще до перезагрузки в новую систему

# Добавьте запись в /etc/crypttab для автоматического открытия при загрузке.
cryptroot   /dev/sda3   none   luks

# - **cryptroot** — имя маппера,
# - **/dev/sda3** — устройство,
# - **none** — ключ из stdin (пароль),
# - **luks** — тип.


# Обновите fstab, чтобы монтировать корневой раздел из /dev/mapper/cryptroot. Например:
/dev/mapper/cryptroot   /   ext4   defaults   0 1


# поправьте grub `/etc/default/grub`)
GRUB_CMDLINE_LINUX="cryptdevice=/dev/sda3:cryptroot root=/dev/mapper/cryptroot rw"

# обнови grub2
grub-mkconfig -o /boot/grub/grub.cfg

# По умолчанию dracut автоматически подхватит модуль шифрования. Если вы хотите явно задать параметры, создайте файл /etc/dracut.conf.d/crypt.conf
install_items+="/etc/crypttab"
add_dracutmodules+=" crypt"

# Или можно указать команду для открытия:
dracutmodules+="crypt"
kernel_cmdline="cryptdevice=/dev/sda3:cryptroot"


Установка базовой системы

# Добавляем репозиторий и импортируем ключи:
zypper --root /mnt/os ar --refresh \
  https://download.opensuse.org/tumbleweed/repo/oss/ oss
zypper --root /mnt/os --gpg-auto-import-keys ref
# минимальная установка
zypper --root /mnt/os in --no-recommends \
  kernel-default \
  grub2 \
  zypper bash shadow util-linux \
  vim man \
  NetworkManager \
  wpa_supplicant kernel-firmware-atheros wireless-tools iw \
  ca-certificates-mozilla openssl gnutls-utils \
  iproute2 curl wget nano procps \
  systemd-resolved \
  kernel-firmware-sound \
  dracut \
  sudo \
  nftables \
  #cryptsetup  
# Подключаем системные pseudo-FS для chroot
for d in proc sys dev run; do
  mount --bind /$d /mnt/os/$d
done

Chroot

cp /etc/resolv.conf etc/
chroot /mnt/os /bin/bash
export PS1="(chroot) $PS1"
passwd # про пароль не забываем

firmware

прежде мы сразу установим некоторые firmware так как вероятно вы не сможете выйти в интернет особенно если у вас wifi карта.

расшифровка
kernel-firmware-i915Микрокод и прошивки для встроенных видеоядeр Intel (семейства i915): UHD, Iris, HD Graphics.
kernel-firmware-amdgpuПрошивки для новых видеокарт AMD на основе драйвера amdgpu (RX 400/500, Vega, Navi и т.д.).
kernel-firmware-radeonПрошивки для старых и некоторых промежуточных видеокарт AMD/ATI, использующих драйвер radeon.
kernel-firmware-soundПрошивки для звуковых чипов разных производителей (Realtek, Conexant, Intel SST, Cirrus Logic и др.).
kernel-firmware-atherosБазовые прошивки для старых Wi-Fi-адаптеров Atheros.
kernel-firmware-ath10kПрошивки для беспроводных чипов Atheros ath10k (Qualcomm QCA988x, QCA6174 и др.).
kernel-firmware-ath11kПрошивки для новых беспроводных чипов Atheros/Qualcomm семейства ath11k.
kernel-firmware-ath12kПрошивки для самых свежих беспроводных SoC Qualcomm семейства ath12k.
kernel-firmware-brcmПрошивки для некоторых беспроводных устройств Broadcom (не входит в ваш список, но часто встречается).
kernel-firmware-intelПрошивки Intel для встроенного Wi-Fi/Bluetooth (семейства Intel Wireless, Bluetooth LE и т.д.).
Мета-пакет firmware
  • объединяет большинство отдельных kernel-firmware-* пакетов.
  • Обеспечивает максимальную совместимость с устройствами «из коробки», но требует несколько сотен мегабайт дискового пространства.
lspci | grep -i network # узнать модельку сетевой карты
lspci # узнать остальные железки
zypper in --no-recommends kernel-firmware-i915
.. 
kernel-firmware-sound
kernel-firmware-atheros
kernel-firmware-ath10k, kernel-firmware-ath11k, kernel-firmware-ath12k
kernel-firmware-amdgpu
kernel-firmware-radeon
# есть мета пакет firmware - может установить его, но скушает места на диске оно знатно.

Настраиваем fstab

UEFI

# Раздел под корень
LABEL=root    /          ext4    noatime,discard               0 1

# Swap-файл или раздел
/swapfile    none       swap    sw                            0 0

# EFI System Partition
LABEL=EFI     /boot/efi  vfat    umask=0077,shortname=winnt     0 2


# [?]
#    LABEL=… — метка, заданная через parted name X <метка>.
#    Параметр discard позволяет SSD работать эффективнее, но может замедлить 
#    некоторые файловые операции.


GPT+BIOS

# Отдельный /boot (если он есть)
LABEL=boot    /boot      ext4    defaults,noatime              0 2

# Корневой раздел
LABEL=root    /          ext4    noatime                       0 1

# SWAP
/swapfile    none       swap    sw                            0 0

есть привычнее UUID

# Узнайте UUID раздела:
blkid /dev/sda1
    
# далее в fstab вместо LABEL, подставляет примерно так:
UUID=1122-3344-5566-7788-99AABBCCDDEEFF  /     ext4    defaults,noatime   0 

BoolLoader

efi-gpt

dracut -f
# Эта команда создаст новый образ initramfs для текущего ядра и перезапишет существующий, если он есть.

mkdir /boot/EFI
mount /dev/sda1 /boot/EFI  #Mount FAT32 EFI partition

sudo zypper install --no-recommends grub2-x86_64-efi shim efibootmgr dosfstools mtools os-prober ntfs-3g

# -----------
    grub2-x86_64-efi – GRUB для UEFI-систем на 64-битных платформах.
    shim – промежуточный загрузчик для поддержки Secure Boot.
    efibootmgr – инструмент для управления записями в UEFI Boot Manager.
    dosfstools и mtools – для работы с FAT-разметкой (EFI).
    os-prober – автоматическое обнаружение других ОС при генерации конфига GRUB.
    ntfs-3g – драйвер для чтения/записи NTFS.
# ----------

grub2-install \
  --target=x86_64-efi \
  --efi-directory=/boot/efi \
  --bootloader-id=opensuse \
  --recheck
grub2-mkconfig -o /boot/grub2/grub.cfg

# - `--target=x86_64-efi` — архитектура платформы (64-бит UEFI).
# - `--efi-directory=/boot/efi` — точка монтирования ESP.
# - `--bootloader-id=opensuse` — название, под которым запись появится в меню UEFI.
# - `--recheck` — повторное сканирование устройств, даже если уже установлено.

bios-gpt

dracut -f
# Эта команда создаст новый образ initramfs для текущего ядра и перезапишет существующий, если он есть.

grub2-install /dev/vda
grub2-mkconfig -o /boot/grub2/grub.cfg

прежде чем…

пожалуйста спустить ниже до раздела Firmware и установите необходимые firmware для вашей сетевой карты так как могут возникнуть проблемы с выходом в интернет.

remount

passwd  # если забыли пароль установить..

exit
for d in dev sys proc run; do
  umount -l /mnt/os/$d
done
umount /mnt/os/boot/efi
umount /mnt/os
reboot

post-Install

network

# запускаем заветный NetworkManager
systemctl enable NetworkManager
systemctl enable wpa_supplicant
systemctl status NetworkManager

будет рассмотрена настройка сети для Ethernet так и для WiFi.

turn on

# включаем карточку
nmcli device connect eth0  # для Ethernet достаточно
nmcli device radio wifi on # для WIFI нужно сначать активировать wifi

в случае с Ethernet по DHCP автоматически подтянется ip адрес, соотвествующая маска, шлюз по умолчанию. Если это не так, то вероятно вам следует долистать чуть ниже части про WiFi и вручную задать настройки.

Diagnostics

nmcli connection show             # все сохранённые connections
nmcli connection show --active    # активные connections
nmcli device show eth0            # подробный статус интерфейса
ip addr show eth0                 # ip адресс
ip route                          # табличка маршрутизации

если у Вас wifi то придётся в начале подключиться к соотвествующей сети. в случае NetworkManager backend-ом выступает wpa_supplicant (хотя есть аналог - iwd).

WIFi

systemctl status NetworkManager

iw dev              # ищем свою карточку


# делаем scan сетей
nmcli device wifi rescan ifname wlp8s0
nmcli device wifi list


# -------------------------------------
# подключаемся
# -------------------------------------

# проще всего так
nmcli device wifi connect "SSID" password "password" ifname wlan0
# если точка доступа hidden
sudo nmcli device wifi connect "SSID" password "password" ifname wlan0 hidden yes

#  прописывание ручками wifi подключение
nmcli connection add type wifi con-name "mywifi" ifname wlan0 ssid "SSID"

# -- if hidden SSID
nmcli connection add type wifi ifname wlan0 con-name mywifi ssid SSID wifi.hidden yes

nmcli connection modify "mywifi" wifi-sec.key-mgmt wpa-psk
nmcli connection modify "mywifi" wifi-sec.psk "password"

manual IP

nmcli connection modify mywifi ipv4.method manual ipv4.addresses "192.168.1.50/24" ipv4.gateway "192.168.1.1" ipv4.dns ""
nmcli connection modify mywifi ipv6.method disable
nmcli connection modify mywifi autoconnection no

nmcli connection up "mywifi"
nmcli connection show --active

DNS

рекомендуется настроить stub resolver systemd-resolved, который легко настроить и уже поддерживает DoH (DNS over HTTPS).

# конечно стоит убрать старые параметры (только если у вас resolver не на роутере висит или если вручную указали обычный DNS сервер к примеру 1.1.1.1 / 8.8.8.8)
rm /etc/resolv.conf

# собственно настройка
ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf

nano -w /etc/systemd/resolved.conf
[Resolve]
DNS=1.1.1.1#cloudflare-dns.com

# перезапускаем и проверяем
systemctl restart systemd-resolved
systemctl status systemd-resolved
resolveconf
curl gnu.org # пропубуем..

добавляем пользователя

# добавляем пользователя
useradd -m -G users,audio,video youruser
visudo # добавь пользователя в sudo
passwd youruser

минимизация зависимостей

# Минимизируйте зависимости при установки zypper-ом
sed -i 's/^solver.onlyRequires.*/solver.onlyRequires = true/' \
  /etc/zypp/zypp.conf

репозитории

# 1. Удалим старые репозитории (чтобы не дублировать):
zypper rr $(zypper lr | awk '/^ [0-9]+/ {print $1}')

# 2. Добавим официальные репозитории openSUSE Tumbleweed:
zypper ar -f https://download.opensuse.org/tumbleweed/repo/oss/          repo-oss
zypper ar -f https://download.opensuse.org/tumbleweed/repo/non-oss/      repo-non-oss
zypper ar -f https://download.opensuse.org/update/tumbleweed/oss/        repo-update-oss
zypper ar -f https://download.opensuse.org/update/tumbleweed/non-oss/    repo-update-non-oss

# 3. Добавим Packman (медиа, проприетарные firmware, кодеки):
zypper ar -f https://ftp.gwdg.de/pub/linux/packman/suse/openSUSE_Tumbleweed/  packman

# 4. (Опционально) Добавим ещё пару популярных репозиториев:
# – KDE:                         # для последних KDE-пакетов
zypper ar -f https://download.opensuse.org/repositories/KDE:/Frameworks5/openSUSE_Tumbleweed/  kde-frameworks
# – Graphics:                    # для графических библиотек
zypper ar -f https://download.opensuse.org/repositories/Graphics/openSUSE_Tumbleweed/        graphics

# 5. Обновим метаданные и систему:
zypper refresh
zypper dup --from repo-update-oss --from repo-update-non-oss

# Теперь можно ставить пакеты из Packman и других репозиториев.

Xorg + i3wm

вместо wm можете установить вначале xinit, xterm и укажите в .xinitrc лишь xterm, чтобы убедиться что xorg у вас заработал.

# Добавляем необходимые репозитории (если ещё не сделано)
# — OSS и Packman уже должны быть подключены.

# Устанавливаем X-сервер, видео- и ввод-драйверы, утилиты и шрифты:
zypper in \
  xorg-x11-server \
  xorg-x11-driver-video \
  xorg-x11-driver-input \
  xinit \
  xterm \
  xorg-x11-fonts \
  xorg-x11-utils \
  ttf-dejavu \
  noto-fonts


# Устанавливаем сам i3 и пару сопутствующих пакетов:
zypper in i3 i3status dmenu

# Апплеты и обои:
zypper in feh           # для установки обоев
zypper in lxappearance  # для управления темами GTK/QT

# Настраиваем ~/.xinitrc
  #!/bin/bash
  feh --bg-scale ~/Pictures/wallpaper.jpg &
  exec i3

startx

#   (Опционально) Авто-логин и лайтдм
#    Если хочется графический экран входа, можно поставить
#      zypper in lightdm lightdm-gtk
#    и включить:
#      systemctl enable lightdm
#
#    Тогда вместо startx вы получите привычный GUI-логин.

Wayland + Sway

OSS и Packman должны быть подключены заранее.

Устанавливаем Wayland-сервер, compositor и утилиты

zypper in \
  wayland \
  sway \
  wlroots \
  swayidle \
  swaylock \
  foot \           # терминал для Wayland
  wlogout \        # утилита выхода/перезагрузки
  grim \           # скриншоты
  slurp \          # выбор области для скриншота
  mako \           # уведомления
  xdg-desktop-portal-wlr \
  xdg-utils \
  wl-clipboard     # буфер обмена между Wayland и X11

Шрифты и фоны

zypper in \
  ttf-dejavu \
  noto-fonts \
  feh              # для установки обоев (можно оставить, даже под Wayland)

Настройка конфигурации sway mkdir -p ~/.config/sway cp /etc/sway/config ~/.config/sway/config

Запуск среды

sway

Через графический дисплейный менеджер

zypper in gdm systemctl enable gdm

pipewire

# 1. Устанавливаем PipeWire и сопутствующие пакеты
zypper in \
  pipewire \
  pipewire-alsa \
  pipewire-pulseaudio \
  wireplumber \

# не забудьте перезагрузиться. так как сразу звук не появится.


# 2. Включаем PipeWire и WirePlumber
systemctl --user enable --now pipewire.socket pipewire.service
systemctl --user enable --now wireplumber.service


# 3. Проверяем, что PipeWire работает вместо PulseAudio
pactl info | grep "Server Name"
# Должно быть что-то вроде: Server Name: PulseAudio (on PipeWire x.y.z)

Selinux

По умолчанию в openSUSE (в том числе в Tumbleweed) защищающая подсистема — это AppArmor, и она установлена и активирована «из коробки». При «экспертной» инсталляции через zypper in AppArmor тоже подтягивается автоматически как зависимость ядра и утилит безопасности:

• Пакет apparmor (включая систему профилей)
• Модули ядра kernel-default компилируются с поддержкой AppArmor
• Автоматически создаётся сервис apparmor.service

Если вы хотите вместо AppArmor использовать SELinux, придётся вручную установить и настроить SELinux-пакеты, отключив AppArmor. Примерный список шагов:

# 1. Отключить AppArmor (до chroot или в chroot-среде):
systemctl disable --now apparmor.service
# Удаляем или маскируем модуль ядра AppArmor
echo "install apparmor /bin/true" > /etc/modprobe.d/apparmor.conf

# 2. Установка пакетов SELinux
zypper refresh
zypper in \
  selinux-policy-default \
  selinux-tools \
  libselinux1 \
  libsemanage1 \
  libselinux-utils \
  setroubleshoot-server

# -> selinux-policy-default – базовая политика
# -> selinux-tools – утилиты управления (getenforce, setenforce)
# -> setroubleshoot-server – анализ и отчёты о нарушениях


# nano etc/selinux/config:
SELINUX=enforcing
SELINUXTYPE=default


# Инициализируйте контексты файлов:
fixfiles onboot  

# Это создаст системный скрипт, который при первом перезапуске автоматически выполнит restorecon -R /.


# Обновление параметров загрузчика
# Добавьте в параметр ядра selinux=1 security=selinux и отключите AppArmor через grub.
# Откройте /etc/default/grub и найдите строку
GRUB_CMDLINE_LINUX_DEFAULT="…"
# Измените её на:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash selinux=1 security=selinux apparmor=0"



# Перегенерируйте конфигурацию GRUB и обновите загрузчик:
grub2-mkconfig -o /boot/grub2/grub.cfg


# ну и...
reboot
getenforce

Firewall!

минильная конфигурация с использованием чистого nftables. Firewalld это замечательно, но вероятно в нашей минимальной установке это будет несколько лишним тянуть server-like firewall.

# /etc/nftables/rules/main.nft
table inet filter {
  chain input {
    type filter hook input priority 0;
    policy drop;

    # Разрешить loopback
    iif "lo" accept

    # Разрешить уже установленное соединение
    ct state established,related accept

    # Разрешить ssh с подсети 192.168.1.0/24
    ip saddr 192.168.1.0/24 tcp dport ssh accept
  }
}
После сохранения:
systemctl reload nftables
systemctl status nftables

# применить
nft -f file.nft

шпаргалки

Zypper

небольшая шпаргалка как пользоваться zypper

zypper refresh
zypper lr # список репозиториев
zypper update
zypper search <ключевое_слово>
zypper info <имя_пакета>
zypper verify # поиск зависимостей
zypper dup # обновление системы
zypper list-updates # доступные обновления
zypper se --installed-only # то что установлено
zypper ps # информация о системе
zypper clean # очистка кеша


Последнее исправление: isild00r (всего исправлений: 4)

Флаг boot on в parted делает следующее: • На MBR-дисках он включает так называемый “bootable” (или “active”) бит в таблице разделов. BIOS при старте проверяет, что на разделе установлен этот бит, и пытается с него загрузиться.

Неверно. BIOS и GRUB абсолютно пофиг на флаги.

ALiEN175
()

Это не экспертная установка, а сделанная через задницу. Там все просто, потому что есть установщик. Забавляет то что тут указан wget, но люди могут пользоваться браузером на винде и сделать все то же самое, только проще. Настройка системы вообще не установка. Что это за попытка понтоваться? Лучше бы свежий скрипт установки гентушникам подкинул - там это нужно. Тот же арч ставится через манджаро без особого ковыряния в консоли с выбрасыванием 80% того что тут упомянуто. Это проще и не уводит в какие-то дебри. Xorg, серьезно? Это нужно только для игр в 4К, если в вейланде 4К разрешение недоступно в игре. Да ну на фиг такие пляски с бубнами.

anonymous
()

если

пользователь линуксом владеет на уровне - «arch инвалид»

то зачем ему какие то сомнительные гайды, тем более про opensuse?

зачем вообще в ней так страдать, если у нее есть прекрасный установщик.

ну и для статьи можно было бы и осилить заглавные буквы. все же это не простая тема на форуме, или не комменты.

usi_svobodi
()

Прочитал по диагонали. Ну штош.

Если система ставится на ext4, то почему не создаётся отдельный /home? Если требуется шифрование всей системы целиком, ИМХО тут можно корень и хоум поместить в lvm, а его уже в luks-контейнер

Для более модных решений можно бы и опционально показать инструкцию для установки на Btrfs.

cryptroot /dev/sda3 none luks

Сомнительно. systemd иногда брыкается и может перемешивать номера дисков (например, поменять местами sda и sdb после перезагрузки), так что лучше использовать UUID.

zypper ps # информация о системе

Оно немножко не для этого. И вообще, zypper ps -s выглядит более оптимально

DoomFoxxy
()
Ответ на: комментарий от anonymous

Едва ли в OpenSUSe есть pacman ????


#!/bin/bash
OS=`hostnamectl | grep "Operating System" | awk -F" " {'print $5'}`

read -p "Сделать Upgrade media codecs?  ( Y/y, N/n ) :" yn
case $yn in
    [Yy]* )
sudo zypper addrepo -cfp 90 'https://ftp.gwdg.de/pub/linux/packman/suse/openSUSE_Leap_$releasever/' packman
sudo zypper dist-upgrade --from packman --allow-vendor-change
sudo zypper -n install --from packman ffmpeg gstreamer-plugins-{good,bad,ugly,libav} libavcodec vlc-codecs

    ;;
       [Nn]* )
         echo "OK!"
         echo " exit"
      ;;

esac

demo13
()
Последнее исправление: demo13 (всего исправлений: 1)