Arch: установка с LVM

By | 11/28/2016
 

archlinux_logoАналогичный пост, но без LVMтут>>>.

Задача: разбить диск на три раздела (/boot, swap, и раздел под LVM), установить Arch и base систему.

Подготовка

Логинимся:

$ ssh root@10.11.100.56
The authenticity of host '10.11.100.56 (10.11.100.56)' can't be established.
ECDSA key fingerprint is 0c:e9:d2:d9:60:ef:2b:1f:1a:4e:52:82:9b:d7:d7:a8.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.11.100.56' (ECDSA) to the list of known hosts.
root@10.11.100.56's password: 
Last login: Mon Nov 28 11:22:28 2016
root@archiso ~ # bash
[root@archiso ~]# 

Загружаем device mapperdm-mod:

# modprobe dm-mod

Проверяем:

# cat /proc/modules | grep dm_mod
dm_mod 102400 0 - Live 0xffffffffa0422000

Разбивка диска – fdisk

Разбиваем диск на:

  • /dev/sda1: /boot
  • /dev/sda2: swap
  • /dev/sda3: LVM:
    • root: корневая система
    • home: раздел под /home

Подробнее о ручной разметке диска и создании разделов – в посте Debian: ручная разбивка диска с fdisk, создание разделов LVM и установка системы или в Arch Linux: установка:

# fdisk -l /dev/sda
Disk /dev/sda: 20 GiB, 21474836480 bytes, 41943040 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

Создаём три раздела:

# fdisk /dev/sda   
...
Command (m for help): n
...
Select (default p): p
Partition number (1-4, default 1): 
First sector (2048-41943039, default 2048): 
Last sector, +sectors or +size{K,M,G,T,P} (2048-41943039, default 41943039): +1G

Created a new partition 1 of type 'Linux' and of size 1 GiB.
...
Select (default p): p
Partition number (2-4, default 2): 
First sector (2099200-41943039, default 2099200): 
Last sector, +sectors or +size{K,M,G,T,P} (2099200-41943039, default 41943039): +1G
...
Command (m for help): p
Disk /dev/sda: 20 GiB, 21474836480 bytes, 41943040 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x0cf903ea

Device     Boot   Start     End Sectors Size Id Type
/dev/sda1          2048 2099199 2097152   1G 83 Linux
/dev/sda2       2099200 4196351 2097152   1G 83 Linux

Command (m for help): n
...
Select (default p): p
Partition number (3,4, default 3): 
First sector (4196352-41943039, default 4196352): 
Last sector, +sectors or +size{K,M,G,T,P} (4196352-41943039, default 41943039): 

Created a new partition 3 of type 'Linux' and of size 18 GiB.

Command (m for help): p
...
Device     Boot   Start      End  Sectors Size Id Type
/dev/sda1          2048  2099199  2097152   1G 83 Linux
/dev/sda2       2099200  4196351  2097152   1G 83 Linux
/dev/sda3       4196352 41943039 37746688  18G 83 Linux

Для sda1 – устанавливаем загрузочный флаг, для sda2 – устанавливаем тип раздела swap:

Command (m for help): a
Partition number (1-3, default 3): 1

The bootable flag on partition 1 is enabled now.

Command (m for help): t
Partition number (1-3, default 3): 2
Partition type (type L to list all types): 82

Changed type of partition 'Linux' to 'Linux swap / Solaris'.

Command (m for help): p
...
Device     Boot   Start      End  Sectors Size Id Type
/dev/sda1  *       2048  2099199  2097152   1G 83 Linux
/dev/sda2       2099200  4196351  2097152   1G 82 Linux swap / Solaris
/dev/sda3       4196352 41943039 37746688  18G 83 Linux

Записываем изменения:

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

Создание разделов LVM

Создаём Phisical Volume на /dev/sda3:

# pvcreate /dev/sda3
  Physical volume "/dev/sda3" successfully created.

Создаём Volume Group:

# vgcreate vg_arch /dev/sda3
  Volume group "vg_arch" successfully created

Создаём два Logical Volumeroot и home:

# lvcreate -L 10G -n root vg_arch
  Logical volume "root" created.
# lvcreate -l 100%FREE -n home vg_arch
  Logical volume "home" created.

Проверяем:

# pvdisplay 
  --- Physical volume ---
  PV Name               /dev/sda3
  VG Name               vg_arch
  PV Size               18.00 GiB / not usable 3.00 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              4607
  Free PE               0
  Allocated PE          4607
  PV UUID               Xsc1Ra-TGQe-U70N-tsSg-Mr5d-jgAK-onOaQZ

# vgdisplay 
  --- Volume group ---
  VG Name               vg_arch
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  3
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                2
  Open LV               0
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               18.00 GiB
  PE Size               4.00 MiB
  Total PE              4607
  Alloc PE / Size       4607 / 18.00 GiB
  Free  PE / Size       0 / 0   
  VG UUID               IPZpNr-VycH-ySEM-cOs0-n4YE-97RI-TanKnT

# lvdisplay 
  --- Logical volume ---
  LV Path                /dev/vg_arch/root
  LV Name                root
  VG Name                vg_arch
  LV UUID                ZYOg2A-H3kc-ZHSw-Sm3m-ZWbj-Bmc8-up5Js6
  LV Write Access        read/write
  LV Creation host, time archiso, 2016-11-28 11:41:47 +0000
  LV Status              available
  # open                 0
  LV Size                10.00 GiB
  Current LE             2560
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           254:0
   
  --- Logical volume ---
  LV Path                /dev/vg_arch/home
  LV Name                home
  VG Name                vg_arch
  LV UUID                cEarhy-9LUf-VYkw-n3rS-H8Xi-eRLD-FyZch3
  LV Write Access        read/write
  LV Creation host, time archiso, 2016-11-28 11:41:55 +0000
  LV Status              available
  # open                 0
  LV Size                8.00 GiB
  Current LE             2047
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           254:1

Создание файловых систем

Создаём файловые системы:

# mkfs.ext2 /dev/sda1
# mkfs.ext4 /dev/vg_arch/root
# mkfs.ext4 /dev/vg_arch/home
# mkswap /dev/sda2
# swapon /dev/sda2

Монтируем их:

# mount /dev/vg_arch/root /mnt/
# mkdir /mnt/home
# mount /dev/vg_arch/home /mnt/home/
# mkdir /mnt/boot
# mount /dev/sda1 /mnt/boot/

Проверяем:

# mount | tail -n 3
/dev/mapper/vg_arch-root on /mnt type ext4 (rw,relatime,data=ordered)
/dev/mapper/vg_arch-home on /mnt/home type ext4 (rw,relatime,data=ordered)
/dev/sda1 on /mnt/boot type ext2 (rw,relatime,block_validity,barrier,user_xattr,acl)

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

Установка базовой системы выполняется с помощью скрипта pacstrap, который устанавливает пакеты в новый корень системы.

Если pacstrap не переданы аргументы – будет установлен только пакет base.

Установку Xorg для Openbox выполним позднее:

# pacstrap /mnt base base-devel
==> Creating install root at /mnt
==> Installing packages to /mnt
:: Synchronizing package databases...
...
==> Creating gzip-compressed initcpio image: /boot/initramfs-linux-fallback.img
==> Image generation successful
(2/4) Updating the info directory file...
(3/4) Updating udev Hardware Database...
(4/4) Rebuilding certificate stores...

Создаём файл /etc/fstab:

# genfstab -U -p /mnt >> /mnt/etc/fstab

Проверяем:

# cat /mnt/etc/fstab
# 
# /etc/fstab: static file system information
#
# <file system> <dir>   <type>  <options>       <dump>  <pass>
# /dev/mapper/vg_arch-root
UUID=b07b76ec-a456-44ea-aa64-e1f6c904cadc       /               ext4            rw,relatime,data=ordered        0 1

# /dev/mapper/vg_arch-home
UUID=39d6507d-7f9b-476c-be01-a65a2340408d       /home           ext4            rw,relatime,data=ordered        0 2

# /dev/sda1
UUID=4cd2e5cb-31d9-46a0-abaf-803e8f44c313       /boot           ext2            rw,relatime,block_validity,barrier,user_xattr,acl       0 2

# /dev/sda2
UUID=404fc127-aa76-4373-b2e8-950d3e6b84e9       none            swap            defaults        0 0

Проверяем UUID:

# blkid /dev/sda*
/dev/sda: PTUUID="0cf903ea" PTTYPE="dos"
/dev/sda1: UUID="4cd2e5cb-31d9-46a0-abaf-803e8f44c313" TYPE="ext2" PARTUUID="0cf903ea-01"
/dev/sda2: UUID="404fc127-aa76-4373-b2e8-950d3e6b84e9" TYPE="swap" PARTUUID="0cf903ea-02"
/dev/sda3: UUID="Xsc1Ra-TGQe-U70N-tsSg-Mr5d-jgAK-onOaQZ" TYPE="LVM2_member" PARTUUID="0cf903ea-03"

Настройка системы

Переключаемся в новую систему:

# arch-chroot /mnt
sh-4.4# bash
[root@archiso /]# 

Имя хоста

Настраиваем имя хоста:

# echo "arch_1" > /etc/hostsname
# echo "127.0.0.1 arch_1" >> /etc/hosts

Локализация

Устанавливаем локализацию. Редактируем файл  /etc/locale.gen, раскомментируем строку:

 en_US.UTF-8 UTF-8

Генерируем локаль:

# locale-gen
Generating locales...
  en_US.UTF-8... done
Generation complete.

Создаём файл /etc/locale.conf, в который вписываем:

LANG=en_US.UTF-8

Временная зона

Устанавливаем временную зону (Киев, Украина):

# tzselect
Please identify a location so that time zone rules can be set correctly.
Please select a continent, ocean, "coord", or "TZ".
...
 7) Europe
...
#? 7
Please select a country whose clocks agree with yours.
 1) Åland Islands         18) Greece                35) Norway
...
15) France                32) Monaco                49) Ukraine
...
#? 49
Please select one of the following time zone regions.
1) Ukraine (most areas)
2) Ruthenia
3) Zaporozh'ye/Zaporizhia; Lugansk/Luhansk (east)
#? 1
...
Therefore TZ='Europe/Kiev' will be used.
Local time is now:      Mon Nov 28 14:05:26 EET 2016.
Universal Time is now:  Mon Nov 28 12:05:26 UTC 2016.
Is the above information OK?
1) Yes
2) No
#? 1

You can make this change permanent for yourself by appending the line
        TZ='Europe/Kiev'; export TZ
to the file '.profile' in your home directory; then log out and log in again.
...

Используя полученный файл зоны (Europe/Kiev) – cоздаём /etc/localtime:

# ln -s /usr/share/zoneinfo/Europe/Kiev /etc/localtime

Настройка initramfs

Настраиваем mkinitcpio – добавляем загрузку модуля lvm2, что бы ядро смогло определить LVM разделы во время загрузки.

Редактируем /etc/mkinitcpio.conf , и в HOOKS добавляем lvm2 – перед filesystem:

...
#    usr, fsck and shutdown hooks.
HOOKS="base udev autodetect modconf block lvm2 filesystems keyboard fsck"

И создаём загрузочный образ:

# mkinitcpio -p linux
==> Building image from preset: /etc/mkinitcpio.d/linux.preset: 'default'
  -> -k /boot/vmlinuz-linux -c /etc/mkinitcpio.conf -g /boot/initramfs-linux.img
==> Starting build: 4.8.10-1-ARCH
  -> Running build hook: [base]
  -> Running build hook: [udev]
  -> Running build hook: [autodetect]
  -> Running build hook: [modconf]
  -> Running build hook: [block]
  -> Running build hook: [lvm2]
  -> Running build hook: [filesystems]
  -> Running build hook: [keyboard]
  -> Running build hook: [fsck]
==> Generating module dependencies
==> Creating gzip-compressed initcpio image: /boot/initramfs-linux.img
==> Image generation successful
==> Building image from preset: /etc/mkinitcpio.d/linux.preset: 'fallback'
  -> -k /boot/vmlinuz-linux -c /etc/mkinitcpio.conf -g /boot/initramfs-linux-fallback.img -S autodetect
==> Starting build: 4.8.10-1-ARCH
  -> Running build hook: [base]
...
==> Creating gzip-compressed initcpio image: /boot/initramfs-linux-fallback.img
==> Image generation successful

GRUB2

Устанавливаем загрузчик:

# pacman -S grub-bios
# grub-install /dev/sda
# cp /usr/share/locale/en\@quot/LC_MESSAGES/grub.mo /boot/grub/locale/en.mo
# grub-mkconfig -o /boot/grub/grub.cfg
Generating grub configuration file ...
  WARNING: Failed to connect to lvmetad. Falling back to device scanning.
  ...
Found linux image: /boot/vmlinuz-linux
Found initrd image(s) in /boot: initramfs-linux.img
Found fallback initrd image(s) in /boot: initramfs-linux-fallback.img
  WARNING: Failed to connect to lvmetad. Falling back to device scanning.
  WARNING: Failed to connect to lvmetad. Falling back to device scanning.
done

При желании – можно посмотреть содержимое получившего диска так:

# cd /boot/
# ls -l | grep img
-rw-r--r-- 1 root root 27166913 Nov 28 14:18 initramfs-linux-fallback.img
-rw-r--r-- 1 root root 11490167 Nov 28 14:18 initramfs-linux.img
# gunzip -c initramfs-linux.img > /tmp/initramfs
# file /tmp/initramfs
/tmp/initramfs: ASCII cpio archive (SVR4 with no CRC)
# pacman -Sy cpio
# cpio -it < /tmp/initramfs | grep dm-mod
64204 blocks
usr/lib/modules/4.8.10-1-ARCH/kernel/dm-mod.ko

Модуль dm-mod.ko из этого initramfs-образа может быть использован ядром во время загрузки системы, что бы получить доступ к LVM-разделам.

Выходим,  отмонтируем разделы, перезагружаемся:

# exit
sh-4.4# exit
# umount /mnt/boot
# umount /mnt/home/
# umount /mnt/
# reboot

Выбираем при загрузке Boot existing OS – готово.

Послеустановочные настройки

OpenSSH

Задаём пароль root:

# passwd root

Запускаем sshd:

# systemctl start sshd.socket

Добавляем в автозагрузку:

# systemctl enable sshd.socket

Пользователь

Добавляем пользователя setevoy, указав создать домашнюю директорию (-m) и добавить его в группу wheel (-G):

# useradd -m -G wheel setevoy
# passwd setevoy

Разрешаем sudo без пароля – с помощью visudo редактируем /etc/sudoers.

Раскомментируем строку:

...
## Same thing without a password
%wheel ALL=(ALL) NOPASSWD: ALL
...

Проверяем:

$ ssh setevoy@10.11.100.58
setevoy@10.11.100.58's password: 
[setevoy@localhost ~]$ file /etc/sudoers
/etc/sudoers: regular file, no read permission
[setevoy@localhost ~]$ sudo -s
[root@localhost setevoy]#

Сеть

Сейчас сетевая карта называется enp0s3. Что бы переименовать её в eth0 – находим её MAC:

# cat /sys/class/net/enp0s3/address 
08:00:27:9d:9f:79

Либо:

# ip a s enp0s3 | grep link
    link/ether 08:00:27:9d:9f:79 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::eb46:eb96:8efd:f1a2/64 scope link

В каталоге /etc/udev/rules.d/ создаём файл 10-network.rules с содержимым:

SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="08:00:27:9d:9f:79", NAME="eth0"

Выключаем интерфейс:

# ip link set enp0s3 down

Находим файл устройства:

# find /sys/ -name "*enp*"
/sys/kernel/debug/pm_genpd
/sys/kernel/debug/pm_genpd/pm_genpd_summary
/sys/devices/pci0000:00/0000:00:03.0/net/enp0s3
/sys/class/net/enp0s3

Проверяем:

# udevadm --debug test /sys/devices/pci0000:00/0000:00:03.0/net/enp0s3

Настраиваем DHCP для eth0.

Копируем файл примера:

# cp /etc/netctl/examples/ethernet-dhcp /etc/netctl/eth0

Проверяем:

# cat /etc/netctl/eth0
Description='A basic dhcp ethernet connection'
Interface=eth0
Connection=ethernet
IP=dhcp
#DHCPClient=dhcpcd
#DHCPReleaseOnStop=no
## for DHCPv6
#IP6=dhcp
#DHCP6Client=dhclient
## for IPv6 autoconfiguration
#IP6=stateless

Ограничиваем доступ:

# chmod 600 /etc/netctl/eth0

Запускаем:

# netctl start eth0

Проверяем:

# netctl status eth0

arch_n_1

Добавляем eth0 в автозапуск:

# netctl enable eth0
ln -s '/etc/systemd/system/netctl@eth0.service' '/etc/systemd/system/multi-user.target.wants/netctl@eth0.service'

Перезагружаем машину – готово.

Ссылки по теме:

Arch Linux guide: the always up-to-date Arch Linux tutorial

ArchLinux – Using netctl to setup the network

Installing Arch Linux on LVM (2012 год)

Installing Arch Linux with LVM

ArchLinux: Install ArchLinux

The Kernel Newbie Corner: “initrd>” and “initramfs”–What’s Up With That?