Вся суть харча™ (на самом деле все далеко не так...)
Выбираем Option --> Partition style --> GPT
как на скрине.
Качаем ISO-образ Arch Linux [ и копируем/перемещаем ] в корень на созданном разделе флешки.
Так же нужно выделить немного места под Arch Linux, если не предполагается использование отдельного диска.
Запускаем Explorer/Проводник и кливаем правой по иконке This PC/Этот Компьютер, выбираем Manage
(перед этим нужно выбрать Show more options
):
В Disk Managment
нужно сжать какой-нибудь раздел, выделив под Arch 80-100GB:
Во время включения компьютера при появлении логотипа жмем раза клавиши F2
/ F12
/ Del
(зависит от производителя).
Во вкладке Boot
отключаем Secure Boot
. Это виндовое изобретение, которое не позволяет запускать неподписанные сертификатами от Microsoft EFI. Оно появилось вместе с Windows 8, но по требованию Евросоюза производителей материнских плат, уличенных в сговоре с M$, обязали добавить возможность отключения этой настройки. Она не влияет на возможность использовать BitLocker или TPM. Можно еще включить Launch CSM
/ CMS Boot
/ CMS OS
/ Legacy OS
для возможности загрузки с устройств, содержащих метку MBR (может потребоваться, например, для установки Windows 7). В этой же вкладке меняем приоритет загрузки устройств, делая флешку первой. Сохраняем изменения и выходим.
Когда загрузится Ventoy, выбираем в меню Arch Linux
...
В качестве пароля указывайте фразу длинее 20 символов. Не используйте пароли, которые вами уже использовались на ресурсах, напрямую подключенных к СОРМ (Вконтакте, Одноклассники, Mail, Yandex, Rambler и тп), избегайте распространенных паролей, которые утекли в сеть, и, конечно, же не вздумайте проверять стойкость пароля через сайт Касперского (вы его просто добавите в базу для брута, которую используют правоохранительные органы). В качестве пароля можно использовать фразу на одном из вымирающих языков, например, абхазском или ады-гей-ском, набранную на английской раскладке. Взломостойкими являются бредовые фразы, так как такой пароль нельзя подобрать с помощью цепей Маркова (например, "краб катит листья яблок"). Так же можно намеренно допускать ошибки в словах. Помните Олбанский и «Онотоле, пыш-пыш»?
Касаемо, фраз, то их не советуют использовать, потому как с помощью цепей маркова в теории можно подобрать пароль. В документации советуют генерировать пароль с помощью pwgen
, а потом пытаться его запомнить придумывая слова, начинающиеся на эти буквы... Фактически этот же способ используется в xkcdpass, но только вместо ввода первых букв фразы, мы вводим случаные слова
SED — Self Encrypted Drives. Samsung EVO и PRO поддерживают аппаратное шифрование с использованием спецификации TCG OPAL 2.0. Фактически единственным вариантом программного шифрования в Linux является LUKS. Аппаратное и программное шифрование в общем и целом работают похожим образом и имеют свои достоинства и недостатки.
Почему Luks, а не аппаратное шифрование? — Диски с аппаратным шифрованием (SED) в 2018 году по заказу королевской полиции Нидерландов были взломаны, путем замены прошивки, в результате без пароля удалось получить доступ к данным. Этот трюк был проделан на старых SSD EVO 840 и EVO 850... Статья в журнале ксакеп. Новые диски вроде как избавлены от этих проблем, но это не точно и никто не гарантирует отсутствия аппаратных закладок, и никак не решается проблема с "быстрым переподключением" к другому устройству для считывания данных.
Другие недостатки аппаратного шифрования:
- UEFI от некоторых производителей, например, ASUS и Acer, "забывают" загрузочные записи после перехода устройства в залоченное состояние... Acer не найдя загрузочных записей, начинает искать загрузчики по захардокоженным путям и первой грузит Windows...
- sedutil не поддерживает спящий режим, поэтому потребуется пользоваться сторонней утилитой со всеми вытекающими рисками.
- Ну и, конечно, мы не можем выбрать какой-то другой алгоритм шифрования кроме AES.
К сожалению программное шифрование намного медленее (где-то в 1.5-2x), потому как шифрование в самошифрующихся дисках осуществляется отдельным AES чипом (без поддержки AES-NI все еще печальнее). Однако, скорости записи не особо критична, потому как при просмотре видео с Youtube, тот же iostat -d
показывает, что на диск пишется в среднем... 600кб/сек. При скачивании файлов из интернета мы ограничены скоростью соединения, которая явно меньше 3000Mb/s, а вот при копировании файлов скорость сначала будет высокой, а потом упадет из-за перенагрева чипа. Если для вас критична скорость записи...
Результаты моих тестов:
# Samsung SSD 980 500GB + Btrfs
$ dd if=/dev/zero of=testfile bs=64k count=128k conv=fdatasync oflag=direct
131072+0 records in
131072+0 records out
8589934592 bytes (8.6 GB, 8.0 GiB) copied, 7.26142 s, 1.2 GB/s
# WD Blue SN550 NVMe SSD, LUKS + Btrfs
$ dd if=/dev/zero of=testfile bs=64k count=128k conv=fdatasync oflag=direct
131072+0 records in
131072+0 records out
8589934592 bytes (8.6 GB, 8.0 GiB) copied, 16.6447 s, 516 MB/s
Стоит упомянуть, что значительная часть SATA SSD поддерживает «установку пароля через BIOS», но выглядит это как ворота на замке без забора посреди чистого поля, так как эти пароли часто хранятся в открытом виде (наглядно), либо есть сервисный мастер пароль (см. тут)... и в конце-концов можно тупо перепаять контроллер. К шифрованию это не имеет никакого отношения.
IN SOVIET RUSSIA ИСПОЛЬЗОВАТЬ ШИФРОВАНИЕ ДАННЫХ НА ДИСКАХ НУЖНО ВСЕГДА ЧТОБЫ НЕ СЕСТЬ НА 🍾!
Следует отметить, что данные на самошифоующихся данных шифруются всегда, но отключен запрос пароля. Пароли администратора и пароль от SID устанавливаются на заводе и нигде не указаны.
Сначала нужно скачать и записать на флешку live-образ.
Грузимся с live и далее все действия выполняем с него.
Установка пароля и запись PBA.
$ sedutil-cli --scan
Scanning for Opal compliant disks
/dev/nvme1 2 Samsung SSD 970 EVO 250GB 2B2QEXE7
# для того чтобы задать новый пароль (взамен заводского)
# нужно выполнить PSID Revert, так как будет сгенерирован новый ключ
# шифрования, но СТАРЫЕ ДАННЫЕ БУДУТ ФАКТИЧЕСКИ УТЕРЯНЫ
# PSID указан на наклейке SSD
$ sedutil-cli --PSIDrever <PSID> /dev/nvme1n1
# задаем временный пароль
$ sedutil-cli --initialSetup p /dev/nvme1n1
На live уже есть PBA, который нужно записать на диск.
$ gunzip /usr/sedutil/UEFI64-1.15.1.img.gz
$ sedutil-cli --loadPBAimage p /usr/sedutil/UEFI64-1.15.1.img /dev/nvme1n1
Включаем блокировку диска и запрос пароля после отключения питания:
$ sedutil-cli --enableLockingRange 0 p /dev/nvme1n1
$ sedutil-cli --setMBREnable on p /dev/nvme1n1
Теперь можно поставить настоящий пароль:
$ sedutil-cli --setsidpassword p <your-password> /dev/nvme1n1
$ sedutil-cli --setadmin1pwd p <your-password> /dev/nvme1n1
PS: пароль администратора может отличаться от SID пароля
Для разблокировки:
$ sedutil-cli --disableLockingRange 0 <your-password> /dev/nvme1n1
$ sedutil-cli --setMBREnable off <your-password> /dev/nvme1n1
Теперь можно вытащить флешку и выключить питание...
Примечание: в AUR есть sedutil-cli
, установить его после завершения установки Arch Linux.
Ссылки:
Есть стандартная утилита для установки Arch Linux. Достаточно просто вбить arch-install
в терминале, но лучше все слелать вручную, так как все нижеописанные действия предстоит проделывать не единожды.
Если вы подключены от провода, то ничего настраивать не надо.
Для Wi-Fi нужно выполнить ряд действий:
$ iwctl
# Получим список сетевых интерфейсов
[iwd]# device list
Devices
-------------------------------------------------------------
Name Address Powered Adapter Mode
-------------------------------------------------------------
wlan0 ... on ... ...
# Сначала просканируем сети
[iwd]# station <interface> scan
# А потом посмотрим все сети к которым можно подключиться
[iwd]# station <interface> get-networks
Available networks *
--------------------------------------------------------------------------------
Network name Security Signal
--------------------------------------------------------------------------------
...
<sid> psk ****
# Подключаемся
[iwd]# station wlan0 connect <sid>
Проверка:
$ ping -c5 ya.ru
Перед установкой желательно обновить базу пакетов и pgp-ключей для проверки подписи пакетов:
$ pacman -Sy archlinux-keyring
Для Btrfs лучше всего подходит SSD.
Смотрим список и разделов и устройств:
fdsik -l
Пусть нам нужно поставить систему на nvme0n1
.
Размечаем диск под систему, руководствуясь правилом от большего к меньшему:
cfdisk nvme0n1
Должно получиться что-то типа этого:
раздел | точка монтирования | тип файловой системы | размер | описание |
---|---|---|---|---|
nvme0n1p1 | / | btrfs | Весь объем минус размер efi/boot | arch linux |
nvme0n1p2 | /boot | vfat | 512 MiB-1 GiB | загрузочный раздел |
Размещая тот же boot в конце диска, мы сможем в последующем менять его размер, откусывая место от предыдущего.
Если у вас уже установлена Windows, пропускайте шаг с форматированием загрузочного раздела.
Форматируем загрузочный раздел:
mkfs.vfat -F32 -n ESP /dev/nvme0n1p2
Созданному разделу нужно выставить флаг boot, чтобы UEFI с него грузилось:
$ parted /dev/nvme0n1
GNU Parted 3.5
Using /dev/nvme0n1
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) p
...
2 499GB 500GB 1074MB fat32 Boot msftdata
(parted) set 2 boot on
(parted) q
Information: You may need to update /etc/fstab.
Если ваш диск не поддерживает аппаратное шифрование либо оно вам не подходит по каким-то причинам...
Создаем шифрованный раздел:
cryptsetup -q -i 15000 luksFormat /dev/nvme0n1p1
С помощью --cipher
можно указать алгоритм шифрования, если не устраивает дефолтный.
-i
, --iter-time
— это время в миллисекундах, которое требуется процессору на расшифровку ключа.
Производительность различных алгоритмов можно протестировать:
$ cryptsetup benchmark
# Tests are approximate using memory only (no storage IO).
PBKDF2-sha1 2475976 iterations per second for 256-bit key
PBKDF2-sha256 4665521 iterations per second for 256-bit key
PBKDF2-sha512 1859177 iterations per second for 256-bit key
PBKDF2-ripemd160 972705 iterations per second for 256-bit key
PBKDF2-whirlpool 752206 iterations per second for 256-bit key
argon2i 11 iterations, 1048576 memory, 4 parallel threads (CPUs) for 256-bit key (requested 2000 ms time)
argon2id 11 iterations, 1048576 memory, 4 parallel threads (CPUs) for 256-bit key (requested 2000 ms time)
# Algorithm | Key | Encryption | Decryption
aes-cbc 128b 1353.5 MiB/s 5450.8 MiB/s
serpent-cbc 128b 124.9 MiB/s 918.1 MiB/s
twofish-cbc 128b 247.8 MiB/s 468.1 MiB/s
aes-cbc 256b 1009.3 MiB/s 4422.6 MiB/s
serpent-cbc 256b 128.4 MiB/s 922.5 MiB/s
twofish-cbc 256b 252.1 MiB/s 468.0 MiB/s
aes-xts 256b 4542.7 MiB/s 4508.0 MiB/s
serpent-xts 256b 787.7 MiB/s 802.5 MiB/s
twofish-xts 256b 443.9 MiB/s 449.0 MiB/s
aes-xts 512b 3688.6 MiB/s 3750.5 MiB/s
serpent-xts 512b 826.0 MiB/s 812.8 MiB/s
twofish-xts 512b 449.7 MiB/s 449.1 MiB/s
И открываем шифрованный раздел:
cryptsetup luksOpen /dev/nvme0n1p1 crypt
Последний аргумент это имя под под которым блочное устройство будет доступно в /dev/mapper
.
Создаем на шифрованном разделе файловую систему Btrfs:
mkfs.btrfs -n 32k -L arch ARCH_DEVICE
-n
указываем размер узла дерева в котором хранятся данные. Чем он больше, тем лучше сжимается...
- Тут и далее вместо
ARCH_DEVICE
указываем/dev/mapper/crypt
при использовании LUKS либо просто/dev/nvme0n1p1
.
Btrfs ‒ это одна из самых продвинутых файловых систем в Linux. Многие считают ZFS достойной альтернативой, но она не включена в ядро. Btrfs поддерживает механизм CoW (copy-on-write), создание снапшотов и сжатие данных... Снапшоты — это снимки файловой системы, точки для восстановления. Сжатие данных позволяет экономить место на диске, отказаться от использования архивов, но различные форматы изображений и видео и так поддерживают сжатие, поэтому оно не всегда полезно. За 4 года использования Btrfs я не сталкивался с какими-то критическими багами, и она меня не раз спасали от утраты данных. Простой пример: sudo rm -rf /<тут закрался пробел>
.
В Btrfs нет привычных разделов, есть только подтома, которые можно сравнить с обычными каталогами. У них нет фиксированного размера, однако его можно ограничить с помощью quota. Снапшоты, если упускать некоторые детали, являются теми же самыми подтомами, те их можно монтировать и выполнять аналогичные операции.
Монтируем RootFS:
mount ARCH_DEVICE /mnt
Возможные сабвольюмы:
subvolume | mount | описание |
---|---|---|
@ |
/ |
Корневой каталог (системные файлы) |
@home |
/home |
Домашний каталог с пользовательскими данными. Нужен отдельный так как при откате системы к предыдущему состоянию очень важно сохранить существующий прогресс (куки браузера, конфиги, документы, файлы проектов и т.д.) |
@snapshots |
/.snapshots |
Содержит снапшоты корня, которые создает snapper |
@home.snapshots |
/home/.snapshots |
Содержит снапшоты хомяка, которые создает snapper |
@machines |
/var/lib/machines |
Если не существует, то создаст systemd |
@portables |
/var/lib/portables |
Если не существует, то создаст systemd |
@docker |
/var/lib/docker |
Рекомендации самого Docker с их сайта |
@docker_btrfs |
/var/lib/docker/btrfs |
Docker создает саьвольюмы по этому пути |
@var_lib |
/var/lib |
Вместо создания @machines , @portables , @docker можно создать только этот, если в /var/lib не будет храниться чего-то важного (предполагается, что будут делаться снапшоты только корня и/или хомяка) |
@var |
/var |
Аналогично выше описанному |
@var_log или просто @log |
/var/log |
Логи как правило не представляют интереса, но в снапшотах занимают дополнительное место |
@swap |
/swap или /var/swap , или /var/lib/swap |
Хранит файл подкачки. Должен монтироваться с nodatacow |
Подтома @machines
, @portables
, @.snapshots
, @home.snapshots
и @docker
(опционально при использовании docker) нужны чтобы не заморачиваться с переносом вложенных подтомов при замене старого подтома на снапшот. Однако, вся эта плоская структура подтомов скорее нужна на серверах. Чтобы не заморачиваться я словетую использовать Btrfs Asssistant.
Создаем нужные подтома:
btrfs sub create /mnt/@
btrfs sub create /mnt/@home
Отмонтируем RootFS:
umount /mnt
Монтируем подтома и загрузочный раздел:
mount -o compress=zstd:9,@ ARCH_DEVICE /mnt
# Примонтируем остальное
# x-mount.mkdir создает несуществующую директорию
# mount -o x-mount.mkdir /dev/nvme0n1p2 /mnt/boot
# Используем более закрытые права на каталог с
mkdir -m 700 /mnt/boot
mount BOOT_DEVICE /mnt/boot
mount -o x-mount.mkdir,compress=zstd:9,subvol=@home ARCH_DEVICE /mnt/home
Через двоеточие указывается уровень сжатия. Для десктопа лучшим является 9, обеспечивающий 15x максимальное сжатие. При нем скорость записи падает до 100 MiB/s, но при скачивании файлов из сети у нас скорость ~12 MiB/s (100 MBit/s)... Нам важна только скорость чтения, а она не падает меньше 2 GiB/s, те примерно равна скорость записи SSD (и не должна быть меньше нее в идеале). Протестировать уровни сжатия можно так:
$ zstd -T0 -b1 -e19
1#Synthetic 50% : 10000000 -> 3152996 (x3.172), 2539.0 MB/s, 2642.0 MB/s
2#Synthetic 50% : 10000000 -> 3129011 (x3.196), 1169.9 MB/s, 2647.2 MB/s
3#Synthetic 50% : 10000000 -> 3230491 (x3.096), 344.1 MB/s, 2115.2 MB/s
4#Synthetic 50% : 10000000 -> 3339961 (x2.994), 283.0 MB/s, 1899.2 MB/s
5#Synthetic 50% : 10000000 -> 3290137 (x3.039), 162.8 MB/s, 1788.2 MB/s
6#Synthetic 50% : 10000000 -> 3278503 (x3.050), 142.8 MB/s, 1823.8 MB/s
7#Synthetic 50% : 10000000 -> 3321448 (x3.011), 133.6 MB/s, 1696.6 MB/s
8#Synthetic 50% : 10000000 -> 3315141 (x3.016), 118.1 MB/s, 1696.1 MB/s
9#Synthetic 50% : 10000000 -> 3355994 (x2.980), 94.3 MB/s, 1573.8 MB/s
10#Synthetic 50% : 10000000 -> 3363166 (x2.973), 68.0 MB/s, 1593.6 MB/s
11#Synthetic 50% : 10000000 -> 3363170 (x2.973), 43.5 MB/s, 1590.3 MB/s
12#Synthetic 50% : 10000000 -> 3362882 (x2.974), 36.2 MB/s, 1577.1 MB/s
13#Synthetic 50% : 10000000 -> 3354692 (x2.981), 14.2 MB/s, 1610.2 MB/s
14#Synthetic 50% : 10000000 -> 3354678 (x2.981), 15.0 MB/s, 1605.5 MB/s
15#Synthetic 50% : 10000000 -> 3353801 (x2.982), 11.5 MB/s, 1597.6 MB/s
16#Synthetic 50% : 10000000 -> 3080678 (x3.246), 10.3 MB/s, 2535.2 MB/s
17#Synthetic 50% : 10000000 -> 3136878 (x3.188), 3.63 MB/s, 2184.5 MB/s
18#Synthetic 50% : 10000000 -> 3145664 (x3.179), 3.73 MB/s, 2066.9 MB/s
19#Synthetic 50% : 10000000 -> 3140424 (x3.184), 3.04 MB/s, 2101.9 MB/s
Установим ядро, драйвера и базовый набор пакетов:
pacstrap /mnt base base-devel linux linux-headers linux-api-headers linux-firmware btrfs-progs cryptsetup efibootmgr ntfs-3g exfat-utils git micro terminus-font wget xorg zsh
Добавьте к этому списку xf86-video-amdgpu
для видеокарт AMD или nvidia
. А так же патчи безопасности для процессоров: amd-ucode
или intel-ucode
.
А теперь сгенерируем fstab, файл который содержит указания системы что и куда монтировать при загрузке:
genfstab -U /mnt | sed 's/,relatime/,noatime,commit=300,discard=async/' >> /mnt/etc/fstab
Тут мы изменили с целью оптимизации некоторые параметры монтирования:
- Каждый раз когда мы открываем файл, записывается время его изменения,
noatime
запрещает запись времени модификации файла. - Btrfs хранит кеш в оперативной памяти и сбрасывает его на диск через интервал указанный в секундах в параметре
commit
. discard=async
предотвращает микрофризы при выполнении TRIM.
Первые два параметра продлевают ресурс SSD.
Делаем chroot и "грузимся" в систему:
arch-chroot /mnt
Редактируем /etc/locale.gen
:
$ micro /etc/locale.gen
Нужно найти и расскоментировать (убрать в начале #
) сл строки:
en_US.UTF-8 UTF-8
ru_RU.UTF-8 UTF-8
Генерируем локали:
$ locale-gen
Generating locales...
ru_RU.UTF-8... done
en_US.UTF-8... done
Generation complete.
Задаем локаль по-умолчанию:
localectl set-locale LANG=en_US.UTF-8
# системная локаль
echo LANG=en_US.UTF-8 > /etc/locale.conf
# или
locale > /etc/locale.conf
Смотрим список раскладок клавиатуры для консоли Linux (та в которую можно попасть, нажав Ctrl + Alt + F1-6):
localectl list-keymaps | grep ru
Загружаем раскладку:
loadkeys ruwin_ct_sh-UTF-8
Теперь мы можем по ctrl+shift переключать раскладку с английской на русскую.
Посмотрим шрифты для консоли:
ls /usr/share/kbd/consolefonts | less
Загрузим какой-нибудь шрифт с поддержкой кириллицы:
# 1080p
setfont ter-v14n
# 4k
setfont ter-v18b
Эти настройки нужно сохранить:
echo 'KEYMAP="ruwin_ct_sh-UTF-8"' >> /etc/vconsole.conf
# либо так
localectl set-keymap --no-convert ruwin_ct_sh-UTF-8
# И сохраняем шрифт
echo 'FONT="ter-v18n"' >> /etc/vconsole.conf
Ищем нужную временную зону:
$ timedatectl list-timezones | grep Mosc
Europe/Moscow
Задаем временную зону:
timedatectl set-timezone 'Europe/Moscow'
Включаем синхронизацию времени с NTP-сервером:
timedatectl set-ntp true
Опционально устанавливаем часы компьютера:
hwclock --systohc
В имени хоста можно использовать латинские символы, цифры, -
, _
, .
...
В качестве имени хоста можно указать:
- если у вас сервер, то доменное имя;
- username-laptop или username-pc username-LaptopModel, username-archlinux или username-arch;
- фамилию, кличку, звезду, планету... случайны набор символов;
- не указывать его, оставив по умолчанию archlinux.
Имя хоcта нужно для вашей идентификации в локальной сети. Это имя можно использовать вместо локального ip-адреса, который может измениться. Например, вы можете через VPN подключиться к локальной сети в офисе, а далее через ssh your_hostname
к своей машине...
hostnamectl set-hostname YOURHOSTNAME
Редактируем хосты:
micro /etc/hosts
Содержимое должно быть примерно таким:
127.0.0.1 localhost
::1 localhost
127.0.1.1 <YOUR_HOSTNAME>.localdomain <YOUR_HOSTNAME>
# строки ниже опциональны и приведены в примере из man
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
Linux грузится с помощью образа initramfs: сначала файловая система монтируется в оперативную память (Initial-RAM-File-System), загружаются драйвера, монтируется реальная файловая система, и наконец мы получаем возможность войти в систему.
Редактируем настройки образа в файле /etc/mkinitcpio.conf
:
micro /etc/mkinitcpio.conf
Добавьте драйвера видеокарт в образ:
# AMD
MODULES=(amdgpu)
# или NVIDIA
MODULES=(nvidia nvidia_modeset nvidia_uvm nvidia_drm)
# или встройка AMD + дискретка NVIDIA
MODULES=(amdgpu nvidia nvidia_modeset nvidia_uvm nvidia_drm)
Добавление видеодрайверов позволяет решить проблем с редактированием конфигов при подключении мониторов, запуске игр игр на дискретке...
ВАЖНО!!!!!! В хуки добавляем btrfs
и encrypt
(при исп LUKS) до filesystems:
HOOKS=(... encrypt btrfs filesystems ...)
Хуки — это скрипты с функцией run_hook
, которые выполняются последовательно при загрузке initrmafs.
Изменим дефолтный уровень сжатия для zstd:
# COMPRESSION_OPTIONS
# Additional options for the compressor
COMPRESSION_OPTIONS=(-T0 -15)
Теперь сгенериреум образ:
mkinitcpio -P
Создаем пользователя:
useradd -m -G users -s /bin/zsh <YOUR_USERNAME>
-m
‒ создать каталог пользователя в/home
;-G
‒ дополнительные группы, передаваемые через запятую. Добавив себя в группуsystemd-journal
, вы сможете без sudo просматривать логи с помощьюjournalctl
...
Устанавливаем для него пароль:
$ passwd <YOUR_USERNAME>
New password:
Retype new password:
passwd: password updated successfully
В целях безопасности лочим пользователя root, чтобы из под него нельзя было авторизоваться:
$ passwd -l root
passwd: password changed.
Разрешаем sudo для себя (одноименной группы, создаваемой по умолчанию):
echo '%<YOUR_USERNAME> ALL=(ALL:ALL) ALL' > /etc/sudoers.d/<YOUR_USERNAME>
Так же можем отредактировать sudoers, разрешив пользователям в группе wheel доступ к sudo:
$ micro /etc/sudoers
# Нужно найти раскомментировать строку:
%wheel ALL=(ALL:ALL) ALL
Часто в инструкциях пользователя добавдяют в группу sudo. Группы wheel и sudo делают одно и то же: дают доступ к выполнению команды sudo. Так уж исторически сложилось, что в debian-based дистрибутивах используют группу sudo, а в RHEL ‒ wheel.
Загружаться мы будем через systemd-boot. Для этого установим EFI:
bootctl install
Создаем загрузочную запись. Для начала сохраним PARTUUID шифрованного раздела в конфиг, так как его запомнить проблематично:
blkid -o value -s PARTUUID /dev/nvme0n1p2 > /boot/loader/entries/arch.conf
Отредактируем конфиг:
micro /boot/loader/entries/arch.conf
Он должен выглядеть примерно так:
title Arch Linux
initrd /amd-ucode.img
initrd /initramfs-linux.img
linux /vmlinuz-linux
options cryptdevice=PARTUUID=fa65a43e-eb75-48f0-aee1-975a50c2e00d:cryptroot:allow-discards root=/dev/mapper/cryptroot rootflags=subvol=/@ rw nvme_core.default_ps_max_latency_us=0
Последняя строчка, если не используется LUKS будет выглядеть так:
options root=PARTUUID=fa65a43e-eb75-48f0-aee1-975a50c2e00d rootflags=subvol=/@ rw nvme_core.default_ps_max_latency_us=0
- Параметр
nvme_core.default_ps_max_latency_us=0
нужен для некоторых моделей SSD M.2. Без него файловая система через неопределенное время переходит вread only
. initrd /amd-ucode.img
- это подгрузка микрокодов процессора для исправления различных уязвимостей./amd-ucode.img
заменяем на/intel-ucode.img
.
Установите микрокоды проца (в зависимости от производителя):
pacman -Sy amd-ucode
# либо
pacman -Sy intel-ucode
Настроим загрузчик:
micro /boot/loader/loader.conf
timeout 4
default arch.conf
console-mode max
editor no
/etc/environment
— это лучшее место для задания переменных, которые будут установлены глобально для всех пользователей...
Сделаем редактором по-умолчанию micro для всех взамен старперского vim (мы его даже не стали устанавливать) из которого не могут выйти 95% пользователей Linux (<ESC>
, :qa!
, <Enter>
).
echo 'EDITOR=micro' >> /etc/environment
Переменные окружения, которые должны быть доступны только для вас и приложений, запускаемых от вашего пользователя, в дальнейшем можно добавлять в ~/.zshenv
, ~/.zlogin
, ~/.xprofile
, ~/.profile
как export KEY=VALUE
. Общие для всех переменные можно установить в сценариях /etc/profiles.d/<filename>.sh
.
Если система стартует через systemd (со startx
не будет работать), то пользовательские переменные окружения в виде KEY=VALUE
можно установить в ~/.config/environments.d/<filename>.conf
либо в /etc/environment.d/<filename>.conf
(общие для всех).
pacman -Sy xfce4 xfce4-goodies network-manager-applet lightdm lightdm-gtk-greeter
systemctl enable lightdm
Плюсы:
- Выглядит минималистично... как Gnome 2, форком которого он и стал, но Gnome за это время уже сменил кучу версий Gtk.
- Легковесность — пакеты занимают мало места, и система потребляет мало ресурсов. В xfce по умолчанию менее 900 пакетов в то время как для KDE или Gnome их нужно на треть больше...
- Стабильность: разработчики что-то ломают нечасто.
Минусы:
- Вытекают из стабильности: баги не исправляют годами. Например, тот же gnome-keyring, будет у вас упорно запрашивать пароль даже если для связки ключей вы установите тот же пароль, что и для пользователя (эта проблема решается именно так в Gnome).
- Многие простые вещи, например, создание ярлыка на рабочем столе, требуют кучу дополнительных телодвижений (нужно создать Launcher, указать имя, выбрать исполняемый файл и иконку для него).
- Трудность настройки.
- Ограниченная поддержка HDPi.
- Не поддерживает Wayland (тут сомнительный минус, так как последний скорее всего так никогда и не победит иксы).
- Нет расширений как в Gnome, есть убогий аналог Plasmoid'ов.
Заключение: все так себе, но жить можно. Некоторые делают из Xfce конфетку, выбрасывая стандартные панели и пр.
pacman -S gnome gnome-extra
systemctl enable gdm
Плюсы:
- Закос под MacOS с довольно таки минималистичным интерфейсом;
- Лучшая поддержка Wayland;
- Сам Gnome ломается редко в отличии от расширений...
Минусы:
- Без расширений не очень удобен в использовании.
- Расширения ломаются после каждого обновления.
- Нужно отдельно настраивать внешний вид для приложений под Qt, например, ч/з Kvantum.
- Потребляет ресурсов не меньше чем Windows.
Заключение: не с проста во многих дистрибутивах является DE по умолчанию, например, в Ubuntu, Fedora, что говорит о доверии со стороны разработчиков дистрибутивов, подтверждает тезис о стабильной работе самой системы, но не сторонних расширений...
pacman -S plasma kde-applications
systemctl enable sddm
Плюсы:
- Похож на Windows 10.
- Темы можно устанавливать глобально для Qt и Gtk приложений.
- Настройка почти всего без ковыряния текстовых конфигов! Огромное количество настроек.
Минусы:
- Постоянные баги.
- С поддержкой Wayland проблемы.
- Потребляет много ресурсов примерно как Gnome.
Заключение: поддержка Wayland обычным пользователям не нужна, а с большинством багов можно смириться + Steam Deck работает на KDE Plasma, а значит есть надежда, что баги будут исправляться быстрее, как и появляться новые фичи, так как Габен занесет денег...
Включим менеджер сети:
systemctl enable NetworkManager
Можно не выходить, а выполнить что-то типа:
startx
systemctl start gdm
systemctl start sddm
Но если хочется проверить загрузку...
Выходим из chroot:
exit
Теперь можно перегрузиться и вытащить флешку:
reboot
Для управления пакетами я советую использовать yay (yet another yaourt).
Главное преимущество Arch Linux в AUR, а поэтому нам нужен пакетный менеджер с его поддержкой. Раньше для этих целей использовали yaourt, но за прошедшие годы последний уступил пальму первенства.
$ cd /tmp
$ git clone https://aur.archlinux.org/yay-bin
$ cd yay-bin
$ makepkg -si
Ядру Linux, независимо от размера оперативной памяти, нужно периодически сбрасывать страницы памяти в SWAP.
Для экономии ресурса SSD SWAP можно размещать в сжатом виде в оперативной памяти (ZRAM).
Установка:
$ yay -S zram-generator-git zram-generator-defaults
Включение ZRAM:
$ sudo systemctl restart systemd-zram-setup@zram0
Рекомендованные настройки SWAP для SSD:
/etc/sysctl.d/99-swappiness.conf
vm.swappiness=100
vm.vfs_cache_pressure=10
Применяем настройки:
$ sudo sysctl --system
Очень удобная вещь для разворачивания приложений. Требует минимум настройки и система не засирается хвостами.
$ yay -S docker docker-compose
# Добавим пользователя в группу docker, чтобы использовать команду docker без sudo
$ sudo usermod -aG docker $USER
# Перегрузимся
$ reboot
Юсаге:
# (Пере)собрать и запустить контейнеры
$ docker-compose up -d
# Остановить контейнеры
$ docker-compose stop
# Запустить остановленные ранее контейнеры
$ docker-compose start
# Остановить и удалить контейнеры
$ docker-compose down
docker-compose.yml
:
version: '3.9'
services:
postgres:
container_name: postgres
image: postgres:alpine
env_file: .env
networks:
- internal
ports:
- '54320:5432'
restart: unless-stopped
volumes:
- ./data/postgres:/var/lib/postgresql/data:rw
pgadmin:
container_name: pgadmin
image: dpage/pgadmin4
depends_on:
- postgres
env_file: .env
networks:
- internal
ports:
- "5050:80"
restart: unless-stopped
volumes:
- ./data/pgadmin:/var/lib/pgadmin:rw
redis:
container_name: redis
image: redis:alpine
networks:
- internal
ports:
- "63790:6379"
restart: unless-stopped
volumes:
- ./data/redis:/var/lib/redis:rw
networks:
internal:
.env
:
POSTGRES_USER=docker
POSTGRES_PASSWORD=password
POSTGRES_DB=db
[email protected]
PGADMIN_DEFAULT_PASSWORD=admin
В pgadmin заходим через localhost:5050
, в качестве имени хоста базы указываем имя сервиса, те postgres
вместо традиционного localhost
и порт 54320
,
Snapper ‒ это менеджер снапшотов (снимков состояния файловой системы) для Btrfs. Он может их создавать/удалять по таймеру, а так же позволяет восстанавливать отдельные файлы.
$ yay -Sy snapper
Установим так же хук, который будет делать снапшоты после каждого обновления пакетов:
$ yay -S snap-pac
Снапшоты делаются каждый час, если не переопределить это поведение:
$ systemctl edit snapper-timeline.timer
[Timer]
OnCalendar=<period>
Настройки по-умолчанию предполагают слишком длительное хранение снапшотов, что может привести к постоянной проблеме нехватки места, если у вас SSD маленького объема.
Создаем новый шаблон файла конфигураций, чтобы не редактировать дефолтный:
$ cd /usr/share/snapper/config-templates
$ cp default config
$ micro config
Где значения TIMELINE_LIMIT_<PRERIOD>
указывают сколько хранить N последних снапшотов за час (HOURLY)/день (DAILY)/неделю (WEEKLY)/месяц (MONTHLY)/год (YEARLY).
Пример конфига:
...
TIMELINE_LIMIT_HOURLY="10"
TIMELINE_LIMIT_DAILY="7"
TIMELINE_LIMIT_WEEKLY="0"
TIMELINE_LIMIT_MONTHLY="0"
TIMELINE_LIMIT_YEARLY="0"
...
Храним 10 последних за час и 7 ежедневных (хранится самый первый за день).
snapper -c root create-config -t config /
snapper -c home create-config -t config /home
systemctl enable snapper-timeline.timer
systemctl enable snapper-cleanup.timer
# Смотрим номер последнего снапшота
sudo snapper -c <config> list -a
# Восстанавливаем файл
sudo snapper -c <config> undochange 0..<number> /path/to/file
Если не планируете пользоватся GUI, то может пригодиться...
В более сложных случаях может потребоваться восстановление системы:
$ sudo su
$ mount /dev/mapper/root /mnt
$ ls /mnt
@ @home @.snapshots ...
$ cd /mnt
# Смотрим снапшоты
$ ls @.snaphosts
... 42 ...
# Переименовываем старый корневой сабвольюм
$ mv @ @old
# Помним, что snapshot и subvolume это одно и тоже, считай, а значит мы монтировать снапшот
# Делаем снимок снапшота, по-сути копирем его, так как снапшоты, создаваемые snapper readonly
$ btrfs sub snap @.snaphots/42/snapshot @
# Редактируем fstab, если он содержит subvolid
# Ищем `subvol=/@` и удаляем `subvolid=N,`
$ micro @/etc/fstab
# Или же можно прописать subvolid
$ sudo btrfs sub show @ | grep 'Subvolume ID'
Subvolume ID: XXX
# Монтируем сабвольюм
$ mount -o remount /
# Теперь можно удалить @old
$ btrfs su de @old
Это стандартная утилита для дистрибутива Garuda Linux (основан на Arch'е как Manjaro и пр. суррогаты). Графический менеджер для управления снапшотами и восстановления из них.
yay -S btrfs-assistant btrfsmaintenance
Для использования Btrfs Assistant не подходит плоская схема, при которой подтома со снапшотами (@snapshots
, @home.snapshots
и тп) монтируются в /.snapshots
или /home/.snapshots
. При восстановлении из снапшота, делает снапшот савольюма, а затем заменяет его на выбранный снапшот, все дочерние сабвольюмы и снапшоты перемещаются.
Все пакеты стараемся ставить через yay. Flatpak используем только в крайних случаях: а) если пакета нет в репозитории, б) он сломался и не работает. Идея, конечно, хороша, но VS Code из Flatpak не юзабелен, а в каком-нибудь Brave не возможно подключиться к Tor. Бинарники из pip/npm можно ставить с помощью pipx/npx.
Графические приложения можно устанавливать через Flatpak. Приложения запускаются в изолированной среде, и они не имеют права на запись в системные каталоги хоста. Принцип работы схож с Docker. Если кратко: мы запускаем приложение в виртуалке на основе LXC(прим. контейнерезация — это разновидность виртуализации). По идее оно не может повредить систему, так как внутри Flatpak контейнера нельзя использовать sudo
, но украсть данные это не помешает личные данные из хомяка...
yay -S flatpak
flatpak install -y Krita
Плюсы:
- Безопасность: приложения запускаются в контейнерах и имеют ограниченный доступ к файловой системе. Так же можно, например, ограничить доступ к сети.
- Частичные, так называемые дельта-обновление - не нужно скачивать пакет целиком, так как исп.
ostree
, работающий по тому же принципу, что иgit
, те при обновлении скачиваются только различия между версиями. - Не нужна настройка, например, шрифтов как в Telegram и тд.
- Зависимости идут в виде отдельных рантаймов, общих для других приложений в отличие от
AppImage
, где все-все зависимости идут с приложением. - Решает проблему с устаревшими зависимостями после обновления системы.
Минусы:
- Приложения запускаются дольше (не мгновенно).
- Занимают дополнительное место за счет рантаймов. Например одновременно могу стоять две версии
org.gnome.Platform
и триorg.kde.Platform
. - Нельзя доставить зависимости, например, те которые видим в выводе
yay -Qi
. Проблема со шрифтами. - Не работает интеграция с Gnome, KDE у того же Chromium.
- Невозможно полноценно использовать IDE, установленные через
Flatpak
из-за его ограничений. В качестве решения этой проблемы авторы советуют использоватьSdk.Extension
. Например,flatpak install flathub org.freedesktop.Sdk.Extension.golang
и запуск среды разработкиFLATPAK_ENABLE_SDK_EXT=golang flatpak run com.visualstudio.code
. - В Telegram нельзя перетащить файл для отправки, если он где-то в
/mnt
. - Приложения в репозитории часто требуют больше прав чем им необходимо для работы.
Обновляет все подряд: пакеты pacman, AUR, Flatpak... образы Docker, плагины для ZSH и тд
$ yay -S topgrade
$ topgrade
# Загрузочный раздел: /dev/nvme0n1p4
# EFI не удалено
efibootmgr -c -d /dev/nvme0n1 -p 4 -L "Linux Boot Manager" -l '\efi\boot\bootx64.efi'
# Удаление записи
efibootmgr -b 000X -B
# Список записей, порядок загрузки и тп
efibootmgr -v
# Смена порядка. См вывод предыдущей команды
efibootmgr -o 0002,0001,...
Проблема: после установки/обновления Windows пропадает загрузочная запись Linux.
Запускаем терминал (Windows Terminal) от имени администратора (Win
+X
, Alt
+A
) и выполняем:
PS C:\Users\yourname> bcdedit /copy '{bootmgr}' /d "Arch Linux Boot"
The entry was successfully copied to {6c4580c1-e401-11ec-b643-089798e96d74}.
PS C:\Users\yourname> bcdedit /set '{6c4580c1-e401-11ec-b643-089798e96d74}' path \efi\boot\bootx64.efi
The operation completed successfully.
PS C:\Users\yourname> bcdedit /set '{fwbootmgr}' displayorder '{6c4580c1-e401-11ec-b643-089798e96d74}' /addfirst
The operation completed successfully.
PS C:\Users\yourname>
Скачайте образ Windows с сайта Microsoft.
Если у вас есть флешка с Ventoi и Windows, то пропускаем запись загрузочной флешки.
Установите утилиту для создания загрузочных флешек для Windows:
$ yay -S woeusb
Записываем образ:
$ sudo woeusb --device ~/Downloads/Windows...iso /dev/sdX
Теперь нам нужно загрузиться с флешки с Windows, проделав операции по смене приоритетов...
Либо можно почитать man efibootmgr
.
Грузимся с флешки, ожидаем пока закончится загрузка Windows и нажимаем Shift
+ F10
. Откроется консоль.
В консоли выполняем следующее:
> diskpart
DISKPART> list volume
:: Смотрим, где у нас установлена Windows
:: Если вы установили, Arch Linux на другой диск, то удалите загрузочный раздел винды (но не сам раздел с Windows! см. `help`)
DISKPART> exit
:: Устанавливаем Windows EFI на загрузочный раздел
> bcdboot c:\windows
SSD не живут вечно, у них есть ресурс перезаписи, который в зависимости от типа памяти (SLC, MLC, TLC или QLC, где первая буква количтсво бит на ячейку 1-4) может составлять от 10000 до 2500 перезаписей ячеек. Но очень часто SDD умирают, даже не выработав его. К этому приводит неожиданная смерть контроллера. Смерть контроллера означает невозможность восстановлкения данных! Поэтому, если на вашем диске хранится что-то важное, что нельзя беекапить в облако, то лучше докупить диск и запихнуть его в зеркальный RAID.
# Создаем raid
# Используем flag --metadata=1.0, чтобы супер-блок располагался в конце диска
mdadm -v --create --metadata=1.0 /dev/md0 -l 1 -n 2 missing /dev/nvme1n1p1
# Создаем файловую систему на /dev/md0 и тп
# Монтируем созданный raid
mount ... /dev/md0 /mnt
# Копируем данные с раздела /dev/nvme0n1p1 помощью rsync'a
rsync -avh ... /mnt
# Добавляем его в массив
mdadm --add /dev/md0 /dev/nvme0n1p1
# Ждем пока данные синхронизируются
watch -n 1 /proc/mdstat
# Сохраняем конфиг
mdadm --verbose --detail --scan >> /etc/mdadm.conf
Хуки /etc/mkinitcpio.conf
:
HOOKS=(base systemd autodetect modconf kms keyboard sd-vconsole block mdadm_udev sd-encrypt filesystems fsck)
mdadm_udev
У меня используется RAID-1 > LUKS > Btrfs.
options md=0,/dev/nvme0n1p1,/dev/nvme1n1p1 rd.luks.name=f2233ed8-fbe6-4199-890a-d416c7a2a62b=root root=/dev/mapper/root rootflags=rw,subvol=@
sudo mdadm --misc --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Wed Oct 25 00:17:13 2023
Raid Level : raid1
Array Size : 487455744 (464.87 GiB 499.15 GB)
Used Dev Size : 487455744 (464.87 GiB 499.15 GB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent
Intent Bitmap : Internal
Update Time : Fri Oct 27 04:30:48 2023
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
Consistency Policy : bitmap
Name : sergey-arch:0 (local to host sergey-arch)
UUID : 17332b2d:1685f236:6e28b36e:277f39cf
Events : 20482
Number Major Minor RaidDevice State
0 259 3 0 active sync /dev/nvme1n1p1
1 259 6 1 active sync /dev/nvme0n1p1
Заменяем GDM на Lightdm
Edit
/etc/lightdm/lightdm.conf
:Настроить lightdm можно через графический интерфейс либо путем редактирования
/etc/lightdm/lightdm-gtk-greeter.conf
.$ sudo systemctl disable gdm $ sudo systemctl enable lightdm
Так как блокировка экрана работает через gdm, то нужно поставить пакет `gnome-screensaver` и добавить его в автозагрузку:
Вешаем
dm-tool lock
на сочетание клавишSuper + L
.Обои лучше копировать в
/usr/share/pixmaps/
, так как у lightdm нет прав на чтение домашнего каталога:# лучше использовать универсальное имя wallpaper.jpg чтобы каждый раз не править настройки $ sudo cp /path/to/image.jpg /usr/share/pixmaps/wallpaper.jpg
TODO: написать про настройки языка ввода при lockscreen.