Shahzeb Ihsan
«The reasonable man adapts himself to the world; the unreasonable man persists in trying to adapt the world to himself. Therefore, all progress depends on the unreasonable man.» — George Bernard Shaw
Blog | Archive | About Me | Projects
Installing Arch Linux on VirtualBox
Arch Linux has to be installed manually since the official Arch Linux ISO doesn’t contain an installer, additionally, no packages are included in the ISO, so a working internet connection is required during installation. If you’d rather just download a pre-configured Arch Linux VM, go here.
Most of the information below can be found in the official installation guide but some other information requires some Googling and a little bit of digging around on the Arch Linux wiki and forums.
Virtual Machine Configuration
Create a new virtual machine in VirtualBox for Arch Linux (sample configuration shown below). Once the VM is created, add the Arch Linux ISO to the CD/DVD drive.

Configuration of the highlighted settings in the screenshot below are important and the rest are optional. Arch Linux can run on a pretty low memory configuration so you can set the size of the display and base memories according to your preference.
For storage, I configured a “dynamically allocated” 8.0 GB hard drive image since I wanted to upload the resulting VMs to Dropbox, but I would recommend using a “fixed size” hard drive if you have space to spare on your host machine.
Network settings are important: at a minimum, you need to bridge your host machine’s network interface (which is connected to the internet) with your VM as shown in the following image:

In case you would like any folders from your host machine to be accessible in your VM, the simplest way is to add them to the “Machine Folders” section under “Shared Folders” but do not select the “Auto-mount” option otherwise they will only be accessible as root (I’ve since moved to using sshfs for mounting my Windows host machine folders).
Installing Arch Linux
Now that the VM has been created with the ISO already inserted, start the virtual machine and login with user ID and password “root” .
Partitioning the VM’s Hard Drive
You can partition the hard drive using either a single root partition or discrete partitions. I’ve chosen a mixture of the 2 partitioning schemes: 200MB as /boot for installing GRUB, 1024MB swap file and the rest allocated as a single root partition.
- Let’s use the lsblk command to take a look at all the available storage devices:
- In the example above, “sda” is the VM’s hard drive image. We can find out a bit more about “sda” using parted /dev/sda print :
- The following set of parted commands will create the desired partitions (200MB as /boot for installing GRUB, 1024MB swap file and the rest allocated as a single root partition):
- Using lsblk again, we can see the new partition table, note that “sda” now has 3 subentries: “sda1” (/boot), “sda2” (swap) and “sda3” (root partition).
- Let’s format the boot and root partitions to Ext4. For this we will use the mkfs.ext4 command:
- Now we’ll format and activate the swap partition. mkswap will format “/dev/sda2” as swap and swapon will tell the kernel that this is our swap partition.
Mount the root and boot partitions:
Install the base system using pacstrap :
And finally, generate “fstab”:
Chroot into Your Newly Installed Base System
- Since our Arch Linux system is now installed, we can chroot into and configure it…
- Set the root password…
- If you want, you can now create a user (recommended):
I would also recommend adding the user you created above to the SUDOers list by using the visudo command to open sudo’s configuration file. First we’ll have to install Vim using pacman -S vim . Once Vim is installed, search for “## User privilege specification” and below the configuration for root add your username: <username> ALL = (ALL) ALL
Download, install and configure grub…
- Almost, done — exit from chroot, unmount the mounted partitions and reboot (or shutdown). You can also remove the Arch Linux ISO from the VM’s CD/DVD drive…
Network Configuration
After you restart your VM (you can now login as the new user you created above) and boot into your shiny new Arch Linux installation, you’ll realize that the network doesn’t work. Even though the network worked out-of-the-box in the ISO, for some reason, it has to be configured from scratch now . I find this feature very strange extremely annoying. I’ve seen this in other distros as well, even in some with fancy Live CDs. I wonder why the network configuration is not copied during installation (did I miss something during installation?).
- The following network configuration is based on the VM’s network configuration shown above. enp0s3 is the bridged network adapter and ensp0s8 is the host only network. You need to create network files for both interfaces, e.g. sudo nano /etc/systemd/network/enp0s3.network and sudo nano /etc/systemd/network/enp0s8.network . The contents of these files for my installation are shown below:
- I manually specified public DNS for the interface which connects to the internet, you only need to do this if you have internet connectivity but are unable to resolve host names. In case you add public DNS to your network configuration, you might still need to update resolv.conf. The contents of my resolv.conf:
- Now enable DHCP for both network configurations and restart your network service.
- Now that our network is all configured, lets update the system:
Installing VirtualBox Guest Additions
This is required if you want to auto-resize the guest display, mount shared folders using vboxsf or would like to share your VM’s clipboard with your host machine or vice-versa.
Installing LXQT
This step is only required if you want to install LXQT (which I prefer over XFCE). In case you would like to use XFCE, you can move on to the next section which lists the steps for installing XFCE.
- Let’s download and install the LXQT program group, OpenBox (LXQT’s default window manager), OpenBox Configuration Utility and SDDM (LXQT’s preferred display manager)
- We still need to install a couple of more packages before we can start LXQT. XFCE4 terminal and LXTerminal are optional (you can install another terminal of your choice).
Now add exec startlxqt to the start of /etc/X11/xinit/xinitrc and cp /etc/X11/xinit/xinitrc
Generate the configuration for the display manager (we need root to do this) and enable the display manager service.
- Now you can start LXQT by executing startx . Next time you restart your VM, you should see a graphical login manager and once you log in, LXQT should start automatically.
Installing XFCE
Since Arch Linux’s preferred desktop manager is XFCE, it is really easy to install. Just install the XFCE program group, XORG and LXDM (Arch Linux’s recommend display manager for XFCE). Afterwards, enable the display manager service and then you can start XFCE. Next time you restart your VM, you should see a graphical login manager and once you log in, XFCE should start automatically.
VirtualBox/Install Arch Linux as a guest
This article is about installing Arch Linux in VirtualBox.
Boot the Arch installation media through one of the virtual machine’s virtual drives. Then, complete the installation of a basic Arch system as explained in the Installation guide.
Installation
Installation in EFI mode (optional)
Enabling EFI for Arch as guest is optional. If you want to install Arch Linux in EFI mode inside VirtualBox, you must change the firmware mode for the virtual machine. This must be done before installing Arch as guest, changing the option afterwards will result in unbootable machine unless the setting is reverted.
To enable EFI for a virtual machine using the graphical interface, open the settings of the virtual machine, choose System item from the panel on the left and Motherboard tab from the right panel, and check the checkbox Enable EFI (special OSes only).
Alternatively the same can be accomplished from the command line using VBoxManage:
efi will set the firmware for the virtual machine to EFI with the bitness matching the virtual machine’s CPU. To get a specific EFI bitness, set the firmware to efi64 for x86_64 EFI or efi32 for IA32 EFI.
After selecting the kernel from the Arch Linux installation media’s menu, the media will hang for a minute or two and will continue to boot the kernel normally afterwards. Be patient.
Install the Guest Additions
VirtualBox Guest Additions provides drivers and applications that optimize the guest operating system including improved image resolution and better control of the mouse. Within the installed guest system, install:
- virtualbox-guest-utils for VirtualBox Guest utilities with X support
- virtualbox-guest-utils-nox for VirtualBox Guest utilities without X support
- You can alternatively install the Guest Additions with the ISO from the virtualbox-guest-iso package, provided you installed this on the host system. To do this, go to the device menu click Insert Guest Additions CD Image.
- To recompile the vbox kernel modules, run rcvboxadd setup as root.
The guest additions running on your guest, and the VirtualBox application running on your host must have matching versions, otherwise the guest additions (like shared clipboard) may stop working. If you upgrade your guest (e.g. pacman -Syu ), make sure your VirtualBox application on this host is also the latest version. «Check for updates» in the VirtualBox GUI is sometimes not sufficient; check the VirtualBox.org website.
Configuration
Set optimal framebuffer resolution
alt=»Merge-arrows-2.png» width=»48″ height=»48″ />This article or section is a candidate for merging with VirtualBox/Tips and tricks#Set guest starting resolution. alt=»Merge-arrows-2.png» width=»48″ height=»48″ />
Typically after installing Guest Additions, a fullscreen Arch guest running X will be set to the optimal resolution for your display; however, the virtual console’s framebuffer will be set to a standard, often smaller, resolution detected from VirtualBox’s custom VESA driver.
To use the virtual consoles at optimal resolution, Arch needs to recognize that resolution as valid, which in turn requires VirtualBox to pass this information along to the guest OS.
First, check if your desired resolution is not already recognized by running the command ( hwinfo need to be installed):
If the optimal resolution does not show up, then you will need to run the VBoxManage tool on the host machine and add «extra resolutions» to your virtual machine (on a Windows host, go to the VirtualBox installation directory to find VBoxManage.exe ). For example:
The parameters «Arch Linux» and «1360x768x24» in the example above should be replaced with your VM name and the desired framebuffer resolution. Incidentally, this command allows for defining up to 16 extra resolutions («CustomVideoMode1» through «CustomVideoMode16»).
Afterwards, restart the virtual machine and run hwinfo —framebuffer once more to verify that the new resolutions have been recognized by your guest system (which does not guarantee they will all work, depending on your hardware limitations).
Finally, add a video=resolution kernel parameter to set the framebuffer to the new resolution, for example:
Additionally you may want to configure your bootloader to use the same resolution. If you use GRUB, see GRUB/Tips and tricks#Setting the framebuffer resolution.
Load the VirtualBox kernel modules
To load the modules automatically, enable vboxservice.service which loads the modules and synchronizes the guest’s system time with the host.
To load the modules manually, type:
Launch the VirtualBox guest services
After the rather big installation step dealing with VirtualBox kernel modules, now you need to start the guest services. The guest services are actually just a binary executable called VBoxClient which will interact with your X Window System. VBoxClient manages the following features:
- shared clipboard and drag and drop between the host and the guest;
- seamless window mode;
- the guest display is automatically resized according to the size of the guest window;
- checking the VirtualBox host version
All of these features can be enabled independently with their dedicated flags:
Notice that VBoxClient can only be called with one flag at a time, each call spawning a dedicated service process. As a shortcut, the VBoxClient-all bash script enables all of these features.
virtualbox-guest-utils installs /etc/xdg/autostart/vboxclient.desktop that launches VBoxClient-all on logon. If your desktop environment or window manager does not support XDG Autostart, you will need to set up autostarting yourself, see Autostarting#On desktop environment startup and Autostarting#On window manager startup for more details.
VirtualBox can also synchronize the time between the host and the guest, to do this, start/enable the vboxservice.service .
Now, you should have a working Arch Linux guest. Note that features like clipboard sharing are disabled by default in VirtualBox, and you will need to turn them on in the per-VM settings if you actually want to use them (e.g. Settings > General > Advanced > Shared Clipboard).
Auto-resize Guest Display
This option will automatically change the resolution of the Arch guest, whenever the window of the virtual machine is resized. This option is enabled by default, and in graphical interface is located at View -> Auto-resize Guest Display. When using KDE Plasma, on GUI login screen (Session) select Plasma (X11) instead of the default session Plasma (Wayland), which does not work with auto-resize.
Hardware acceleration
Hardware acceleration can be activated in the VirtualBox options. The GDM display manager 3.16+ is known to break hardware acceleration support. [1] So if you get issues with hardware acceleration, try out another display manager (lightdm seems to work fine). [2] [3]
If the hardware acceleration does not work as expected, try changing the Graphics Controller option found under the Screen tab in the Display options of the settings GUI. It seems that depending on the host GPU type, not all emulated controllers work equally well.
Enable shared folders
Shared folders are managed on the host, in the settings of the Virtual Machine accessible via the GUI of VirtualBox, in the Shared Folders tab. There, Folder Path, the name of the mount point identified by Folder name, and options like Read-only, Auto-mount and Make permanent can be specified. These parameters can be defined with the VBoxManage command line utility. See there for more details.
No matter which method you will use to mount your folder, all methods require some steps first.
To avoid this issue /sbin/mount.vboxsf: mounting failed with the error: No such device , make sure the vboxsf kernel module is properly loaded. It should be, since we enabled all guest kernel modules previously.
Two additional steps are needed in order for the mount point to be accessible from users other than root:
- the virtualbox-guest-utils package created a group vboxsf (done in a previous step);
- your user must be in vboxsf user group.
Manual mounting
Use the following command to mount your folder in your Arch Linux guest:
where shared_folder_name is the Folder name assigned by the hypervisor when the share was created.
If the user is not in the vboxsf group, to give them access to our mountpoint we can specify the mount(8) options uid= and gid= with the corresponding values of the user. These values can obtained from the id command run against this user. For example:
Automounting
In order for the automounting feature to work you must have checked the auto-mount checkbox in the GUI or used the optional —automount argument with the command VBoxManage sharedfolder .
The shared folder should now appear as /media/sf_shared_folder_name . If users cannot access the shared folders, check that /media has permissions 755 or is owned by the vboxsf group if using permissions 750 . This is currently not the default if the /media directory is created by vboxservice.service .
You can use symlinks if you want to have a more convenient access and avoid to browse in that directory, e.g.:
Mount at boot
You can mount your directory with fstab. However, to prevent startup problems with systemd, noauto,x-systemd.automount should be added to /etc/fstab . This way, the shared folders are mounted only when those mount points are accessed and not during startup. This can avoid some problems, especially if the guest additions are not loaded yet when systemd reads fstab and mounts the partitions.
- sharedFolderName : the value from the VirtualMachine’s Settings > SharedFolders > Edit > FolderName menu. This value can be different from the name of the real folder name on the host machine. To see the VirtualMachine’s Settings go to the host OS VirtualBox application, select the corresponding virtual machine and click on Settings.
- /path/to/mntPtOnGuestMachine : if not existing, this directory should be created manually (for example by using mkdir).
- dmode / fmode are directory/file permissions for directories/files inside /path/to/mntPtOnGuestMachine .
As of 2012-08-02, mount.vboxsf does not support the nofail option:
Troubleshooting
Access serial port from guest
TTY text too small during installation
From the host, VirtualBox Manager, set the Display Scale-factor to 2.00 or 3.00.
Guest freezes after starting Xorg
Faulty or missing drivers may cause the guest to freeze after starting Xorg, see for example [4] and [5]. Try disabling 3D acceleration in Settings > Display, and check if all Xorg drivers are installed.
Fullscreen mode shows blank screen
On some window managers (i3, awesome), VirtualBox has issues with fullscreen mode properly due to the overlay bar. To work around this issue, disable Show in Full-screen/Seamless option in Guest Settings > User Interface > Mini ToolBar. See the upstream bug report for more information.
If the guest’s screen goes black above a certain size (e.g. above 2048 pixels wide), increasing the Settings > Display > Screen > Video Memory can help.
Linux guests have slow/distorted audio
The AC97 audio driver within the Linux kernel occasionally guesses the wrong clock settings when running inside VirtualBox, leading to audio that is either too slow or too fast. To fix this, create a file in /etc/modprobe.d/ with the following line:
Linux guests have slow/laggy audio
In some cases, audio can have laggy performance (for example lag behind video when streaming video online). A possible workaround can be to use the Intel HD Audio controller in VirtualBox and disable its power saving by adding the following line in a file in /etc/modprobe.d/ in the guest OS:
Arch: pacstrap script fails
If you used pacstrap to also #Install the Guest Additions before performing a first boot into the new guest, you will need to umount -l /mnt/dev as root before using pacstrap again; a failure to do this will render it unusable.
Windows host: VERR_ACCESS_DENIED
To access the raw VMDK image on a Windows host, run the VirtualBox GUI as administrator.
No hardware 3D acceleration in Arch Linux guest
virtualbox-guest-utils package as of version 5.2.16-2 does not contain the file VBoxEGL.so . This causes the Arch Linux guest to not have proper 3D acceleration. See FS#49752.
To deal with this problem, apply the patch set at FS#49752#comment152254. Some fix to the patch set is required to make it work for version 5.2.16-2.
Plasma resets guest’s resolution to 800×600
Black screen with Plasma-X11 minimal install
If you used plasma-desktop minimal install instead of plasma (which includes Wayland support), then probably you will have black screen with cursor after starting Plasma-X11 session.
To fix this set resize vm window several times, then set resolution manually in VirtualBox window itself by:
View -> Virtual Screen 1 -> Resize to 1024×768 (or other resolution you like)
Open in KDE launcher System Settings -> Startup and Shutdown -> Background Services, stop and unselect KScreen2 and save settings. Issue should go away forever
VirtualBox (Русский)
VirtualBox — гипервизор, предназначенный для запуска операционных систем в специальной среде, называемой виртуальной машиной, поверх существующей операционной системы. VirtualBox постоянно развивается и внедряет новые возможности. Взаимодействовать с виртуальными машинами можно как через графический интерфейс на базе Qt, так и с помощью headless- и SDL-утилит командной строки.
Для некоторых гостевых ОС были разработаны гостевые дополнения (guest additions), которые позволяют частично совмещать функциональность хостовой и гостевой операционных систем — совместный доступ к каталогам и буферу обмена, ускорение видео и бесшовная интеграция окон.
Установка
Установите VirtualBox по указаниям ниже, чтобы создавать и запускать виртуальные машины в Arch Linux.
Установка основных пакетов
Установите пакет virtualbox . Кроме того, необходимо установить host-модули:
- для ядра linux установите virtualbox-host-modules-arch .
- для других ядер (включая linux-lts ) установите virtualbox-host-dkms .
DKMS-хук Pacman автоматически перекомпилирует модули virtualbox-host-dkms при каждом обновлении VirtualBox и/или ядра. При компиляции потребуются пакеты с заголовочными файлами для вашего ядра (например, linux-lts-headers для ядра linux-lts ) [1].
Подписывание модулей
Если вы используете нестандартное ядро с включённой опцией CONFIG_MODULE_SIG_FORCE , то необходимо подписать ваши модули ключом, сгенерированным во время компиляции ядра.
Перейдите в дерево каталогов вашего ядра и выполните:
Загрузка модулей ядра для VirtualBox
virtualbox-host-modules-arch и virtualbox-host-dkms используют службу systemd-modules-load.service для загрузки необходимых VirtualBox модулей ядра при запуске системы. Если необходимо загрузить модуль сразу после установки, то либо перезагрузитесь, либо однократно загрузите его вручную. Список модулей можно найти в файлах /usr/lib/modules-load.d/virtualbox-host-modules-arch.conf или /usr/lib/modules-load.d/virtualbox-host-dkms.conf .
Среди используемых VirtualBox модулей ядра обязательным является vboxdrv . Если он не был загружен, то запустить виртуальные машины не получится.
Чтобы загрузить модуль вручную, выполните:
Следующие модули необходимы в некоторых сложных конфигурациях:
- vboxnetadp и vboxnetflt необходимы для сетевых взаимодействий в режимах bridged и host-only. Если точнее, vboxnetadp позволяет через настройки VirtualBox создать в хостовой системе программный сетевой интерфейс, а vboxnetflt даёт виртуальной машине возможность его использовать.
Доступ к USB-устройствам хоста из гостевой ОС
Добавьте пользователя в группу vboxusers , если необходимо предоставить ему доступ к USB-портам хоста из виртуальной машины.
Диск с гостевыми дополнениями
Если в качестве гостя выступает не Arch Linux, то имеет смысл установить пакет virtualbox-guest-iso . Он работает как образ диска, с которого можно установить гостевые дополнения. Файл .iso будет находиться в каталоге /usr/lib/virtualbox/additions/VBoxGuestAdditions.iso . Зайдите в гостевую систему, вручную смонтируйте образ и запустите установщик.
Расширения
Oracle Extension Pack предоставляет набор дополнительной функциональности. Набор распространяется под несвободной лицензией только для личного пользования. Расширения доступны в виде пакета virtualbox-ext-oracle AUR в AUR или в скомпилированном виде в неофициальном репозитории seblu.
Более «традиционный» способ — скачать расширения с сайта разработчиков и установить их либо через графический интерфейс (File > Preferences > Extensions), либо командой VBoxManage extpack install <.vbox-extpack> . Предварительно убедитесь, что у вас есть инструмент вроде Polkit для выдачи привилегированного доступа к VirtualBox — установка требует прав root.
Интерфейсы
Для VirtualBox разработано три интерфейса:
- стандартный графический интерфейс, команда VirtualBox .
- интерфейс командной строки, команда VBoxSDL ; создаёт окно виртуальной машины без оверлеев.
- интерфейс командной строки без отображения окон (например, для ВМ, находящейся на сервере), команда VBoxHeadless . Расширение VRDP позволяет получить доступ к экрану виртеальной машины.
Настройки безопасности Wayland (в частности, при использовании GDM) не пропускает ввод с клавиатуры в VirtualBox, что мешает, например, использовать в гостевой ОС комбинации клавиш. Чтобы это обойти, добавьте VirtualBox в белый список:
Первая команда выведет текущий список приложений в белом списке. ‘VirtualBox Machine’ необходимо добавить к этому списку (вторая команда в примере выше не добавляет, а создаёт список из ровно одного элемента).
Наконец, можно администрировать виртуальные машины через веб-интерфейс с помощью phpVirtualBox.
Инструкции по созданиию виртуальных машин можно найти в руководстве пользователя.
Пошаговая установка Arch Linux как гостевой ОС
Установка Arch Linux в виртуальную машину
Загрузите установочный носитель Arch через один из виртуальных дисков виртуальной машины. Затем совершите установку базовой системы Arch, как описано в руководстве по установке, без установки графических драйверов: мы будем устанавливать драйвера, поставляемые VirtualBox на следующем этапе.
Установка в режиме EFI
Если вы хотите установить Arch Linux в режиме EFI внутри VirtualBox, в настройках виртуальной машины, перейдите в закладку Настройки, и установите флажок Enable EFI (special OSes only). После выбора ядра из меню установочного носителя Arch Linux, установка будут висеть в течение минуты-двух, и после этого будет загружено ядро . Подождите и не прекращайте установку.
При загрузке в режиме EFI, VirtualBox будет пытаться выполнить /EFI/BOOT/BOOTX64.EFI из ESP. Если первый вариант не удается, VirtualBox будет пытаться выполнить сценарий оболочки EFI startup.nsh из корня ESP. Если вы не хотите вручную запускать загрузчик из оболочки EFI каждый раз, вы должны будете переместить свой загрузчик в этот путь по умолчанию. Не заморачивайтесь с VirtualBox Boot Manager (доступен по F2 при загрузке): EFI данные будут добавлены в него вручную при загрузке или efibootmgr будет сохранять их после перезагрузки, но терять после закрытия виртуальной машины.
Установка гостевых дополнений
После завершения установки гостевой системы, установите дополнения гостевой ОС, которые включают драйверы и приложения, оптимизирующие гостевую операционную систему. Они могут быть установлены с помощью virtualbox-guest-utils .
Загрузка модулей ядра VirtualBox
Для загрузки модуля вручную выполните:
Чтобы загрузить модуль VirtualBox во время загрузки системы, обратитесь к Загрузка ядра#Автоматическое управление модулями и создайте *.conf файл (например, virtualbox.conf ) в директории /etc/modules-load.d/ с следующим содержанием:
Кроме того, команда
включает автозагрузку модулей и синхронизацию времени хоста и гостевой ОС.
Запуск гостевых сервисов VirtualBox
После довольно непростой установки с модулями ядра VirtualBox, необходимо обеспечить взаимодействие гостевой ОС и хоста посредством сервисов. Гостевой сервис — на самом деле просто исполняемый файл, обращающийся к VBoxClient , который будет взаимодействовать с вашей X Window System. VBoxClient управляет следующими функциями:
- Общий буфер обмена и перетаскивания между принимающей стороной и гостевой ОС;
- Бесшовный оконный режим;
- Гостевой дисплей автоматически изменяется в соответствии с размером окна гостевой ОС;
- Проверка версии VirtualBox, установленной на хосте.
Все эти особенности могут быть включены независимо следующими параметрами: $ VBoxClient —clipboard —draganddrop —seamless —display —checkhostversion
Как ссылка, VBoxClient-all bash скрипт позволяет использовать все эти функции. Вы должны установить VBoxClient , который будет автоматически загружен в качестве DE или оконного менеджера
-
Если вы используете DE, вам просто нужно установить флажок или добавить /usr/sbin/VBoxClient-all > в разделе автозапуска вашей DE (DE обычно устанавливают флаг на .desktop файлы в
VirtualBox также может синхронизировать время между хостом и гостевой ОС. Чтобы сделать это, выполните VBoxService с правами суперпользователя. Чтобы установить автоматический запуск этого кода при загрузке, выполните:
Теперь у вас есть рабочая гостевая Arch Linux. Поздравляем!
Если вы хотите расшарить директории между вашим компьютером и гостевым Arch Linux, читайте дальше.
Расшаривание директорий
Общие папки управляются в хосте через настройки виртуальной машины, доступной через графический интерфейс VirtualBox, на вкладке Shared Folders. Там путь к директории и имя точки монтирования определены как Имя папки и аргументы, такие как Read-only, Auto-mount и Make permanent Эти параметры могут быть определены через утилиту VBoxManage . См. для более подробной информации.
Независимо от того, какой метод вы будете использовать, чтобы смонтировать директорию, требуются некоторые начальные действия.
Чтобы избежать проблемы /sbin/mount.vboxsf: mounting failed with the error: No such device , убедитесь, что модуль ядра vboxsf загружен правильно. Он должен быть загружен, поскольку мы включили все гостевые модули ядра ранее.
Два дополнительных шага необходимы для того, чтобы точки монтирования должны быть доступны из пользователей кроме root-а:
- Пакет virtualbox-guest-utils создает группу vboxsf ;
- Ваше имя пользователя должно быть в этой группе, используйте команду gpasswd -a $USER vboxsf , чтобы добавить свое имя пользователя и запустите newgrp , чтобы применить изменения немедленно.
Ручное монтирование
Выполните следующую команду для монтирования директории в гостевой Arch Linux:
Файловая система vboxsf предоставляет и другие способы, просмотреть которые можно выполнив:
Например, если пользователь не добавлен в vboxsf группу, мы могли бы использовать эту команду, чтобы смонтировать директорию в гостевой ОС:
Где UID и GID являются значениями, соответствующими пользователям, которым мы хотим дать доступ к монтированию директории. Эти значения можно узнать из вывода команды id , выполненной из сессии этого пользователя.
Автомонтирование
Чтобы функция автоматического монтирования заработала, вы должны включить флажок в графическом интерфейсе или использовать дополнительный аргумент —automount при команде VBoxManage общая_директория
Теперь общая директория должна появиться в /media/sf_имя_расшаренной_директории .
Вы можете использовать символические ссылки, если хотите иметь более удобный доступ:
Монтирование при загрузке
Вы можете монтировать директории с помощью fstab. Во избежание проблем с systemd, необходимо добавить в /etc/fstab строчку comment=systemd.automount . Таким образом, общие папки монтируются только тогда, когда доступны точки подключения, а не во время запуска. Это может избежать некоторых проблем, особенно если гостевая ОС еще не загружена, когда systemd уже начал читать fstab и монтировать разделы.
Импорт/экспорт виртуальных машин VirtualBox в/из других гипервизоров
Если вы планируете использовать виртуальную машину на другом гипервизоре или хотите импортировать в VirtualBox виртуальную машину, созданную в другом гипервизоре, вы можете быть заинтересованы в чтении следующих шагов.
Удаление дополнений гостевой ОС
Гостевые дополнения доступны в большинстве гипервизоров: VirtualBox поставляется с гостевыми дополнениями, VMware с VMware Tools, Parallels с инструментами Parallels, и т.д. Это дополнительные компоненты, предназначенные для установки внутри виртуальной машины после гостевой операционной системы, состоящие из драйверов устройств и системных приложений, которые оптимизируют гостевую операционной системы для повышения производительности и удобства использования. Читать подробнее.
Если у вас установлены дополнения в вашей виртуальной машине — удалите их в первую очередь. Ваша гостевая ОС, особенно если это ОС из семейства Windows, может вести себя странно, аварийно или не загрузиться вообще, если вы используете специальные драйверы одного гипервизора на другом.
Использование правильного формата виртуального диска
От этого шага будет зависеть способность преобразовывать образ диска виртуальной в другие форматы — непосредственно или конвейерным методом.
Автоматические инструменты
Некоторые компании предоставляют инструменты, которые предлагают возможность создания виртуальных машин с операционной системой Windows или GNU / Linux, расположенной в виртуальной машине или даже в оригинальной установке. С таким продуктом вам не нужно применять этот и следующие шаги, и можно далее не читать.
- Parallels Transporter — не бесплатный, продукт от Parallels Inc. Это решение в основном заключается в части программного обеспечения под названием агент, который будет установлен в гостевой ОС, которую вы хотите импортировать / преобразовать. Затем, Parallels Transporter, который работает только на OS X , создаст виртуальную машину с этим агентом, который контактирует либо по USB или по сети Ethernet.
- VMware vCenter Converter — бесплатен при регистрации на Webiste VMware, работает почти так же, как Parallels Transporter, но часть программного обеспечения, которая собирает данные для создания виртуальной машины работает только на платформе Windows.
Ручное преобразование
- Импорт и экспорт виртуальной машины из/в формат VMware не является проблемой, если вы используете формат диска VMDK или OVF, в противном случае преобразования VMDK в VDI и VDI в VMDK можно осуществить вышеописанным VMware vCenter Converter.
- Импорт и экспорт из/в QEMU почти не проблема: некоторые форматы QEMU поддерживает непосредственно VirtualBox и преобразование между QCOW2 в VDI и VDI в QCOW2 по-прежнему доступны в случае необходимости.
- Импорт и экспорт из/в Parallels гипервизора является трудный задачей: Parallels поддерживает только свой собственный формат жесткого диска (даже стандартные форматы и портативный формат OVF не поддерживается!).
- Чтобы экспортировать виртуальную машину для Parallels, вам нужно будет использовать инструмент описанной выше Parallels — Transporter.
- Чтобы импортировать виртуальную машину в VirtualBox, вы должны будете использовать VMware vCenter Converter , чтобы преобразовать виртуальную машину в формат VMware в первую очередь — а затем используйте инструмент для миграции с VMware.
Создание конфигурации VM для гипервизора
Каждый гипервизор имеет свой собственный файл конфигурации виртуальной машины: .vbox для VirtualBox, .vmx для VMware, config.pvs файл, расположенный в виртуальной машине ( .pvm файл), и т.д. Вы можете, таким образом, создать новую виртуальную машину в новом гипервизоре и указать его конфигурацию как можно ближе относительно начальной виртуальной машины.
Обратите пристальное внимание на интерфейс прошивки (BIOS или UEFI), используемый для установки гостевой операционной системы. В то время как опция доступна выбирать между этими 2 интерфейсов на VirtualBox и на Parallels решений, на VMware, вам придется вручную добавить следующую строку в ваш .vmx файл.
Наконец, настройте ваш гипервизор, для использования существующего виртуального диска, который вы преобразовали и запустите виртуальную машину.
- В VirtualBox, если вы не хотите просмотривать весь графический интерфейс, чтобы найти нужное место где можно добавить новый виртуальный диск устройства, вы можете Заменить виртуальный диск вручную из файла .vbox, или использовать VBoxManage storageattach , описанный в увеличении вируального диска или в руководстве VirtualBox
- Кроме того, в продуктах VMware, вы можете заменить местоположение текущего местоположения виртуального диска путем адаптации .vmdk местоположения файла в .vmx конфигурационном файле.
Управление виртуальными дисками
Форматы, поддерживаемые VirtualBox
VirtualBox поддерживает следующие форматы виртуальных дисков:
- VDI: Virtual Disk Image является собственным стандартои VirtualBox, используемыи по умолчанию, когда вы создаете виртуальную машину в VirtualBox.
- VMDK: изначально разработан VMware для своих продуктов.Спецификация была закрытым исходным кодом, но сейчас стало открытым форматом, который полностью поддерживается VirtualBox. Этот формат дает возможность разбивать себя на несколько файлов по 2 Гб. Эта функция особенно полезна, если вы хотите сохранить виртуальную машину на компьютерах, которые не поддерживают очень большие файлы. Другие форматы, за исключением формата HDD от Parallels, не обеспечивают такую эквивалентную функцию.
- VHD: Virtual Hard Disk — формат, используемый в Microsoft в Windows Virtual PC и Hyper-V. Если вы собираетесь использовать любой из этих продуктов Microsoft, вы должны будете выбрать этот формат.
- VHDX (только для чтения): Это расширенная версия формата виртуального жесткого диска, разработанного Microsoft, которая была выпущена на 2012-09-04 с Hyper-V 3.0 при переходе на Windows Server 2012. Эта новая версия имеет повышенную производительность (лучшее расположение блоков), большие размеры блоков и поддержку журнала. VirtualBox поддерживает этот формат только для чтения.
- QED: Формат Enhanced Disk QEMU — старый формат для QEMU, свободный и открытый. Этот формат был разработан в 2010 году таким образом, чтобы обеспечить превосходную альтернативу qcow2 и другим форматам. Этот формат имеет полностью асинхронный ввод / вывод, хорошую целостность данных, откат файлов и разреженные файлы. Формат QED поддерживается только для совместимости с виртуальными машинами, созданными в старых версиях QEMU.
- QCOW: QEMU CoW — нынешний формат для QEMU.Формат QCOW поддерживает прозрачное сжатие на основе ZLIB и шифрование (последнее имеет недостаток, и не рекомендуется к сипользованию). QCOW доступен в двух версиях: QCOW и qcow2. Последний, как правило, заменяет первый. QCOW в настоящее время поддерживается VirtualBox. Qcow2 поставляется в двух версиях: qcow2 0.10 и qcow2 1.1 (по умолчанию используемый при создании виртуального диска с QEMU). VirtualBox не поддерживает qcow2.
- OVF: Open Virtualization Format является открытым форматом, который был разработан для обеспечения взаимодействия и распределения виртуальных машин между различными гипервизоров. VirtualBox поддерживает все версии этого формата через VBoxManage импорт / экспорт, но с [https: //www.virtualbox.org/manual/ch14.html#KnownProblems известными ограничениями].
- RAW: Это режим, когда виртуальный диск скидывается непосредственно на диск без определенного формата файл контейнера. VirtualBox поддерживает эту функцию несколькими способами: преобразование RAW диск к определенному формату, или клонированием диска в формате RAW, или непосредственно через файл VMDK, который указывает на физический диск или просто файл.
Преобразование виртуальных дисков разных форматов
VMDK в VDI и VDI в VMDK
VirtualBox может конвертировать VDI в VMDK и обратно с использованием VBoxManage clonehd .
VHD в VDI и VDI в VDH
VirtualBox также может конвертировать VHD в VDI и наоборот с использованием VBoxManage clonehd :
QCOW2 в VDI и VDI в QCOW2
VBoxManage clonehd не может конвертировать QEMU форматы и необходимо воспользоваться иными инструментами. Команда qemu-img из пакета qemu-desktop может осуществлять преобразования QCOW2<=>VDI.
Так как QCOW2 предостовляется в двух версиях (0.10 и 1.1) (см. форматы, поддерживаемые VirtualBox. Используйте параметр -o compat= для выбора версии.
Монтирование виртуальных дисков
Монтирование образов VDI работает только с образами фиксированного размера (т.е. статичными образами); динамические образы (динамическое выделение размера) монтируются довольно-таки не просто.
Если необходимо смещение раздела (в VDI), добавьте значение offData в 32256 (например, 69632 + 32256 = 101888):
Вы также можете использовать скрипт mount.vdi, который можно использовать (и даже установить скрипт в /usr/bin/ :
Также можно использовать модули ядра qemu-desktop , которые выполняют эту же функцию attrib:
Если файлы раздела не распространяются, попробуйте использовать partprobe /dev/nbd0 . В противном случае, VDI раздел может быть отображен непосредственно в файл с помощью qemu-nbd -P 1 -c /dev/nbd0 <storage.vdi> .
Сжатие виртуальных дисков
Сжатие работает только с файлами .vdi и в основном состоит из следующих действий:
Загрузите виртуальную машину и удалите все ненужное вручную или с помощью специальных средств, например bleachbit (доступна для ОС Windows).
Затирание свободного места нулями может быть выполнено следующими инструментами:
- Если вы пользовались Bleachbit, просто установите галочку System > Free disk space в графическом интерфейсе, выполните команду bleachbit -c system.free_disk_space ;
- В UNIX-based системах, выполните команду dd или, предпочтительно, dcflddAUR (см. здесь информацию об отличиях):
- В ОС Windows есть два инструмента:
- sdelete — Sysinternals Suite, выполните sdelete -s c: для каждого виртуального диска;
- Для любителей PowerShell есть скрипт PowerShell solution. Его также необходимо отдельно выполнять для каждого виртуального диска.
Перезагрузите виртуальную машину. После выполнения задач и перезагрузки виртуальной машины рекомендуется провести проверку диска.
- В UNIX-based системах можно использовать fsck ;
- В GNU/Linux системах, в том числе Arch Linux, вы можете установить проверку диска при загрузке вручную в параметрах загрузки ядра;
- В Windows системах:
- chkdsk c: /F где c: заменяется на имя проверяемого диска;
- или FsckDskAll отсюда [устаревшая ссылка 2020-08-06 ⓘ] , который основан на chkdsk , но не требует перезапуска для каждого отдельного диска;
Теперь удалите нули из vdi файлов с помощью VBoxManage modifyhd :
Увеличение размера виртуальных дисков
Если вы выходите за рамки пространства жесткого диска, которое выбрали при создании виртуальной машины, проблему можно решить по совету из руководства VirtualBox VBoxManage modifyhd . Эта команда работает только для динамически расширяемых дисков VDI и VHD . Если вы хотите изменить размер фиксированного виртуального диска, можете использовать нижеописанный трюк, который работает и на виртуальной машине Windows, и в UNIX-подобных системах.
Во-первых, создайте новый виртуальный диск рядом с тем, который вы хотите увеличить:
$ VBoxManage createhd -filename new.vdi —size 10000
где размер указан в MiB, в этом примере 10000MiB
= 10GiB, new.vdi — имя создаваемого нового виртуального диска.
Далее старый виртуальный диск должен быть клонирован в новый(это может занять длительной время):
$ VBoxManage clonehd old.vdi ew.vdi —existing
Отключите старый диск и установите новый, обязательно заменив все выделенные курсивом аргументы на свои:
Чтобы получить имя контроллера диска и номер порта, вы можете использовать команду VBoxManage showvminfo VM_name . Среди вывода вы получите такой результат (то, что вы ищете выделено курсивом):
Скачайте GParted LiveCD и установите его в качестве виртуального привода , загрузите вашу виртуальную машину, используйте увеличение / перемещение ваших разделов. По окончании работы отмонтируйте GParted LiveCD и перезагрузите машину.
Наконец, отключите старый виртуальный диск в VirtualBox и удалите его:
Замена виртуального диска из файла .vbox вручную
Если вы думаете, что редактирование простого XML файла более удобно, чем возня с GUI или VBoxManage и вы хотите заменить (или добавить) виртуальный диск в вашей виртуальной машине, просто замените GUID, местоположение файла и формат для ваших нужд в конфигурационном файле .vbox, соответствующем вашей виртуальной машине:
в <AttachedDevice> (суб-тег <StorageController> ) замените старый GUID на новый.
Клонирование виртуального диска и назначение ему нового UUID
UUID широко используются VirtualBox. Каждая виртуальная машина и каждый виртуальный диск виртуальной машины должны иметь разные UUID. Когда вы запускаете виртуальную машину в VirtualBox, он будет отслеживать все UUID. См VBoxManage list , чтобы просмотреть список элементов, зарегистрированных в VirtualBox.
Если вы клонировали виртуальный диск вручную путем копирования файла виртуального диска, необходимо будет назначить новый UUID клонированному виртуальному диску. Вы можете использовать этот диск в той же виртуальной машине или даже в другой (если он уже открыт и таким образом зарегистрирован в VirtualBox).
Вы можете использовать эту команду, чтобы назначить новый UUID для вашего виртуального диска:
Расширенная настройка
Управление запуском виртуальной машины
Запуск виртуальный машин как сервиса systemd
Для запуска VM начиная с следующей загрузки, выполните:
Для запуска же в текущий момент времени выполните:
VirtualBox 4.2 предоставляет для UNIX-like систем также другие способы автозапуска, без использования сервисов systemd.
Запуск виртуальной машины по горячей клавише
Может быть полезно запускать виртуальные машины непосредственно с клавиатуры вместо использования интерфейса VirtualBox (GUI или CLI). Для этого, вы можете просто определить ключевые привязки в .xbindkeysrc . Обратитесь к Xbindkeys для более подробной информации.
Например, запуск по Fn+F3 :
Использование конкретных устройств в виртуальной машине
Использование USB веб-камеры/микрофона
- Убедитесь, что виртуальная машина не работает, а веб-камера / микрофон не используется.
- Вызовите главное окно VirtualBox и перейдите к настройкам для Arch машины. Перейдите в раздел USB.
- Убедитесь, что стоит галочка «Включить USB-контроллер». Также убедитесь, что выбран пункт «Разрешить USB 2.0 (EHCI) контроллер»
- Нажмите кнопку «Добавить фильтр с устройства» (кабельное со значком «+»).
- Выберите USB веб-камеру/микрофон из списка.
- Нажмите кнопку ОК и запустите VM.
Обнаружение веб-камер и прочих USB устройств
Убедитесь, что вы фильтруете любые устройства, (кроме клавиатур или мышей), чтобы они не запускались при загрузке -это гарантирует, что ОС Windows обнаружит устройство при запуске.
Доступ к гостевому серверу
Для доступа к Apache серверу в виртуальной машине только с хост-машины, выполните:
Where 8888 is the port the host should listen on and 80 is the port the VM will send Apache’s signal on. Где 8888 порт должна слушать хост-система, а VM шлет сигнал Apache на 80 порт.
Чтобы использовать порт ниже, чем 1024 на хост-машине, изменения должны быть внесены в брандмауэр на этом хосте. Он также может быть настроен на работу с SSH или иных услуг путем изменения «Apache» с соответствующими сервисами и портами.
D3D ускорение в гостевой Windows
Последние версии Virtualbox имеют поддержку ускорения OpenGL внутри гостевой ОС. Эта функция может быть включена галочкой в настройках машины (при установленных дополнениях гостевой ОС VirtualBox). Тем не менее, большинство игр под Windows используют Direct3D (часть DirectX), а не OpenGL, и, таким образом, этот метод не поможет. Тем не менее возможно получить ускоренное Direct3D в гостевой Windows, за счет заимствования D3D библиотеки из Wine, который переводит инструкции d3d под OpenGL, который и занимается ускорением. Эти библиотеки теперь являются частью дополнений гостевой ОС.
После включения OpenGL ускорения, как описано выше, перезагрузите гостевую ОС в безопасном режиме (нажмите F8 до появления экрана для Windows, но после исчезновения экрана Virtualbox), и установите дополнения гостевой ОС, во время установки установите галочку Включить поддержку Direct3D. Перезагрузитесь обратно в нормальный режим, и вы получите ускоренный Direct3D.
VirtualBox c USB-ключом
При использовании VirtualBox с USB-ключом, например, для запуска установленной машины с ISO-образа, вы вручную должны создать VDMK-файлы существующих приводов. Тем не менее, как только новые файлы VMDK сохраняться и вы перейдёте на другую машину, у вас могут снова возникнуть проблемы. Чтобы избавиться от этой проблемы, можно использовать следующий скрипт для запуска VirtualBox. Этот сценарий будет убирать старые файлов VMDK и создавать новые:
Обратите внимание, что ваш пользователь должен быть добавлен в группу disk , чтобы создать VMDKs из существующих приводов.
Запуск установленного Arch Linux внутри VirtualBox
Если у вас есть дуалбут системы между Arch Linux и другими операционных системами, он может быстро стать утомительным для переключения туда-сюда, если вам нужно работать в обоих. Кроме того, с помощью виртуальных машин, у вас есть только крошечный фрагмент власти компьютера, который может привести к проблемам при работе на проектах, требующих производительности.
Это руководство позволит вам использовать в виртуальной машине, вашу родную установку Arch Linux, когда вы используете свою вторую операционную систему. Таким образом, вы сохраняете возможность запуска каждой операционной систему изначально, но есть возможность запустить установленный физически Arch Linux внутри виртуальной машины.
Убедитесь, что система наименования разделов не изменяется
В зависимости от настроек вашего жесткого диска, файлы устройств, представляющих свои жесткие диски могут выглядеть по-разному когда вы будете запускать установку Arch Linux — изначально или в виртуальной машине. Эта проблема возникает, например, при использовании FakeRAID. Поддельные RAID устройстве, будут перемещены в /dev/mapper/ при запуске дистрибутива GNU/Linux , в то время как будут устройства по-прежнему доступны по отдельности. Тем не менее, в вашей виртуальной машине может оказаться без отображения в /dev/sdaX например, потому что драйвера, управляющие поддельными RAID в вашей локальной операционной системе (например, Windows) абстрагируются под поддельные RAID устройства.
Чтобы обойти эту проблему, мы должны будем использовать схему адресации, работающую в обеих системах. Это может быть достигнуто использованием UUID в файле /etc/fstab . Убедитесь, что ваш fstab использует UUID — в противном случае исправьте это. Читайте статьи fstab (Русский) и Постоянные имена для блочных устройств.
/etc/fstab не является единственным местом, где используются UUID. Менеджеры загрузчиков тоже их используют. Убедитесь, что они действительно используют UUID-ы.
Если вы все еще используете GRUB Legacy, может быть настало время его обновить, так как этот пакет в настоящее время удален из официальных репозиториев Arch Linux. Если вы хотите сохранить его, отредактируйте /boot/grub/menu.lst и замените root=/dev/sdXX в загрузочной записи Arch Linux на Linux UUID /dev/disk/by-uuid/ , соответствующий корневому разделу.
Предварительно создайте резервную копию файла на случай ошибок.
Если вы работаете с самой последней версией GRUB; у вас нет проблем. Это ещё одна причина для перехода на GRUB 2.
- Убедитесь, что ваш хост-раздел доступна только для чтения с вашей виртуальной машины Arch Linux. Это позволит избежать риска повреждения.
- Вы никогда не должны позволять VirtualBox загружаться с момента загрузки вашей второй операционной системы, которая используется в качестве хоста для этой виртуальной машины! Возьмите, таким образом, за правило — особенно если ваша загрузка производится по умолчанию в другую операционную систему. Установите более большой тайм-аут или переместите систему ниже в порядке предпочтений.
Убедитесь в корректности образа mkinitcpio
Убедитесь, что в конфигурации вашего mkinitcpio есть хук block :
Если это не так, добавьте хук и заново сгенерируйте initramfs.
Создание конфигурации виртуальной машины для загрузки с физического диска
Создайте потоковый(raw) образ .vmdk
Теперь нам нужно создать новую виртуальную машину, которая будет использовать RAW диск в качестве виртуального диска, для этого мы будем использовать файл
1Kib VMDK, которые будет сбрасываться на физический диск. VirtualBox не имеет этой опции в графическом интерфейсе, так что мы должны использовать консоль и внутреннюю команду из VBoxManage .
Загрузите хост, который будет использовать виртуальную машину Arch Linux.Команда должны быть адаптированы в соответствии с вашей хост-машиной.
На хосте GNU/Linux
Существует 3 способа этого достичь: вход от суперпользователя, изменение прав доступа к устройству командой chmod , добавление пользователя в группу disk . Последний путь является более элегантным. Реализуем таким образом:
Применить новые параметры сейчас же:
Теперь вы можете использовать следующую команду:
Адаптируйте команду для ваших потребностей.
На хосте с Windows
Откройте окно командной строки (необходимо запускать от имени администратора).
В Windows наименование дисков отлично от UNIX. Используйте эту команду, чтобы определить значения в вашей системе Windows, и их расположение:
В этом примере Windows называет диски \\.\PhysicalDriveX , Где X представляет собой число от 0, \\.\PHYSICALDRIVE1 может быть сопоставим с /dev/sdb из терминологии Linux.
Для использования в командной строке VBoxManage в Windows, вы должны изменить текущую папку в папку установки VirtualBox, обычно это cd C:\Program Files\Oracle\VirtualBox\
или использовать абсолютный путь:
На другой хост-OS
Есть и другие ограничения, касающиеся вышеприведенной команды, когда она используется в других операционных системах — таких как OS X. Прочитайте внимательно руководство, если это вас беспокоит.
Создание файла конфигурации виртуальной машины
- Для использования команды VBoxManage в Windows, вам нужно сначало изменить текущую директорию в папку установки VirtualBox :
- Windows делает использование обратного слеша вместо слеша, пожалуйста, замените все вхождения / на \ в командах, которые вы будете использовать.
После этого мы должны создать новую машину (замените VM_name ная ваш вариант) и зарегистрировать её в VirtualBox.
Затем виртуальный диск должен быть подключен к машине. Это будет зависеть от того, находится ли корень в вашей оригинальной установке Arch Linux на IDE или контроллере SATA.
Если вам нужен контроллер IDE:
В противном случае:
В то время как вы продолжаете использовать интерфейс командной строки, рекомендуется использовать VirtualBox GUI, чтобы персонализировать настройки виртуальной машины. Необходимо указать аппаратную конфигурацию как можно ближе к родной машине: включение ускорения 3D, увеличение видеопамяти, установка сетевого интерфейса и т.д.
Установка дополнений гостевой ОС
Наконец, вы можете легко интегрировать Arch Linux с хост-системой и синхронизировать буфер обмена между двумя ОС. Обратитесь к установке гостевых дополнений для этого.
Физическая установка системы Arch Linux из VirtualBox
В некоторых случаях это может быть полезно для установки родной системы Arch Linux из другой операционной системы: один из способов достижения этой цели является выполнение установки через VirtualBox на жёсткий диск. Если существующая операционная система на основе Linux, вы можете рассмотреть установку из существующего Linux вместо этого.
Этот сценарий очень похож на Запуск установленного Arch Linux в VirtualBox, но будет реализовывать эти шаги в другом порядке: начать с создания .vmdk образа жёсткого диска, а затем создавать файл конфигурации виртуальной машины.
Теперь вы должны иметь рабочую конфигурацию виртуальной машины, чей виртуальный VMDK-диск связан с реальным диском. Процесс установки точно такой же, как и описанный в пошаговой установке Arch Linux в VirtualBox, но сначала убедитесь в постоянной схеме наименования разделов и корректности образа mkinitcpio.
- Для BIOS и MBR дисков: не устанавливайте загрузчик внутри виртуальной машины — он не будет работать, так как MBR не связан с MBR вашей реальной машины, и виртуальный диск отображается только в реальном разделе без MBR
- Для UEFI систем без CSM и GPT дискa установка не будет работать вообще, так как:
-
не отображается на виртуальный диск и Arch Linux требует, чтобы ядро Linux было на нём, чтобы загрузиться в качестве приложения EFI (смотрите статью EFISTUB (Русский))
- и efivars, если вы устанавливаете Arch Linux через VirtualBox, используя режим EFI, не загрузит ни одну из ваших реальных систем: записи Bootmanager не смогут быть зарегистрированы
- Вот почему рекомендуется создавать разделы в родной установке. В противном случае разделы не будут приниматься во внимание в MBR / GPT таблице разделов
После завершения установки загрузите компьютер сперва с установочного носителя GNU/Linux (будь то Arch Linux или нет), выполните chroot в установленной Arch Linux и установите и настройте загрузчик.
Перемещение физически установленного Windows в виртуальную машину
Если вы хотите перенести существующую Windows на виртуальную машину, которая будет использоваться с VirtualBox на GNU/Linux, этот вариант использования для вас. В этом разделе описан перенос только Windows с использованием схемы MSDOS/Intel разделов. Ваш Windows должен находиться на первом после MBR разделе. Работа в других разделах доступна, но были не тестировалась (см Известные ограничения для более подробной информации)
Несколько задач необходимо выполнить внутри вашей Windows, а затем в хост-машине GNU/Linux.
Задачи в Windows
Первые три следующих моменты происходит от этой устаревшей вики-страницы VirtualBox, но обновляются здесь.
- Удалите проверку IDE/ATA контроллеров (только Windows XP): Windows запоминает IDE/ATA после установки, и не будет загружаться, если он обнаружит что они изменились.Решение, предложенное Microsoft является повторным использованием того же контроллера или использовать один из той-же серии, что невозможно сделать, поскольку мы используем виртуальную машину. MergeIDE, немецкий инструмент, разработан как другое решением, предложенное Microsoft. Решение в основном состоит в принятии всех IDE/ATA драйверов контроллера IDE, поддерживаемые Windows XP от первоначального архива драйвера, их установке и регистрации в реестре через Regedit.
- Используйте правильный тип слоя абстрагирования оборудования (старые 32-битный Windows): Microsoft использует с 3 версии по умолчанию: Hal.dll (Standard PC), Halacpi.dll (ACPI HAL) и halaacpi.dll (ACPI HAL с IO APIC). Ваша Windows-установка могла устанавитmся с первого или второго варианта. В этом случае, пожалуйста, отключите Enable IO/APIC в расширенных возможностях VirtualBox.
- Отключите драйвер AGP устройства (только устаревшие версии ОС Windows): Если у вас есть файлы agp440.sys или intelppm.sys внутри C:\Windows\System32\drivers\ , то удалите его. Так как VirtualBox использует PCI виртуальную графическую карту, это может вызвать проблемы, когда используется драйвер AGP.
- Создайте диск восстановления ОС Windows: В следующих шагах, если что-то испортится, вам нужно будет восстановить установку Windows. Убедитесь, что у вас есть установочного носителя под рукой, или создайте через Создать диск восстановления в Vista SP1, Создать диск восстановления системы в Windows 7 или Создать диск восстановления в Windows 8.x).
Задачи в GNU/Linux
- Уменьшите родной размер раздела Windows, для чего нужен ntfsresize из пакета ntfs-3g . Вы определяете размер, который будет равен размере VDI, который будет создан на следующем шаге. Если этот размер будет слишком мал, вы можете сломать ваш Windows и он может не загружаться вообще.
- Установите VirtualBox на ваш GNU/Linux-хост (см. подробнее).
- Создайте образ диска для Windows от начала диска до конца первого раздела, на котором находится Windows. Копирование с начала диска необходимо потому, что пространство MBR в начале привода должно быть перенесено на виртуальный диск вместе с самим Windows. В этом примере следующие два раздела sda2 и sda3 будут позже удалены из таблицы разделов и загрузчик MBR будет обновляться.
Использование cat /sys/block/sda/sda1/size выведет количество секторов первого раздела диска sda . Адаптируйте команду, если это вам нужно.
- Так как вы создали свой образ диска с правами администратора, установите права доступа на образ диска: # chown $USER:users windows.vdi .
- Создайте Ваш файл конфигурации виртуальной машины — используйте виртуальный диск, созданный ранее в качестве основного виртуального жесткого диска.
- Постарайтесь загрузиться с виртуальной машины Windows (может работать). Во-первых, хотя бы отключите восстановление дисков из процесса загрузки, так как это может помешать (и, вероятно, будет мешать) загрузиться в безопасном режиме.
- Попытка загрузить виртуальную машину в безопасном режиме (нажмите клавишу F8 до логотипа Windows) . при возникновении вопросов о загрузке, читайте Исправление MBR и загрузчика Microsoft. В безопасном режиме вероятно будут установлен драйверы. Кроме того, установите Дополнения гостевой ОС через меню Devices > Insert Guest Additions CD image. . Если новое диалоговое окно не отображается, перейдите к компакт-дискам и запустите программу установки вручную.
- Наконец-то у вас есть необходимый Windows в виртуальной машине. Ознакомьтесь с известными ограничениями.
Исправление MBR и загрузчика Microsoft
Если ваша виртуальная машина с Windows отказывается загружаться, вам, возможно, потребуется применить следующие изменения в вашей виртуальной машине.
- Начальная загрузка GNU/Live внутри виртуальной машины, прежде чем загрузится ОС Windows .
- Удалить другие записи разделы с MBR виртуального диска. В самом деле, так как мы скопировали MBR и только раздел Windows, записи, относящихся к другим разделам по-прежнему присутствуют в MBR, но разделы ведь больше не доступны. Используйте fdisk , чтобы добиться этого, например.
- Запишите обновленную таблицу разделов на диск (это будет пересозданием MBR) с помощью m команды в окружении fdisk .
- Используйте testdisk (см. здесь для более подробной информации), чтобы добавить общий MBR:
- С новым MBR и обновленной таблицей разделов, ваша виртуальная машина с Windows должна загрузиться. Если вы все еще сталкиваетесь с вопросами, загрузите диск восстановления Windows с предыдущей стадии, и внутри вашей среды Windows RE, выполняйте команды описанные здесь.
Известные ограничения
- Ваша виртуальная машина может иногда зависать и забивать оперативную память, это может быть вызвано конфликтующими драйверами , установленными внутри виртуальной машины Windows. Удачи вам найти их!
- Дополнительное ПО ожидало драйвер,который не может установиться из-за невозможности отключения / деинсталляции старого драйвера.
- Ваша Windows должна находиться в первом разделе для описанного выше процесса, чтобы заработать. Если это требование не выполнено, система может работать, но это не было испытаны. Это потребует либо копирования MBR и редактирования в шестнадцатеричном коде, см. VirtualBox: загрузка клонированного диска или потребуется исправить таблицу разделов вручную или восстанавливать Windows с диска восстановления, созданного в предыдущем шаге. Рассмотрим нашу установку окна на втором раздела; мы скопируем MBR, второму разделу, где лужит образ диска VBoxManage convertfromraw необходимо общее количество байтов, которые будут записаны: Вычислим как сумму размера MBR (начало первого раздела) плюс размер второго (Windows) раздела. < dd if=/dev/sda bs=512 count=$(cat /sys/block/sda/sda1/start) ; dd if=/dev/sda2 bs=512 count=$(cat /sys/block/sda/sda2/size) ; >| VBoxManage convertfromraw stdin windows.vdi $(( ($(cat /sys/block/sda/sda1/start) + $(cat /sys/block/sda/sda2/size)) * 512 )) .
Возможные проблемы
VERR_ACCESS_DENIED
Чтобы получить доступ к образу vdmk, расположенного на хосте под Windows, запустите VirtualBox GUI от имени администратора.
Клавиатура и мышка заблокированы виртуальной машиной
Это означает, что ваша виртуальная машина захватила ввод клавиатуры и мышки. Просто нажмите правый Ctrl и ваши устройства ввода будут доступны в основной системе.
Для того, чтобы управление мышкой возвращалось основной ОС при выходе курсора за границы окна виртуальной машины, без нажатия каких-либо клавиш, и для возможности бесшовной интеграции, установите гостевое дополнение на виртуальную машину. Читайте шаг #Установка гостевых дополнений если вы новичок в Arch Linux, или читайте официальную справку VirtualBox.
Не могу отправить комбинацию CTRL+ALT+Fn в виртуальную машину
Если в вашей виртуальной машине установлен дистрибутив GNU/Linux и вы хотите открыть новую оболочку TTY нажатием Ctrl+Alt+F2 или выйти из X сессии с помощью Ctrl+Alt+Backspace , просто нажав это сочетание клавиш без какой-либо адаптации, гостевая машина его не получит и основная ОС (если это тоже дистрибутив GNU/Linux) распознает это сочетание клавиш. Для отправки Ctrl+Alt+F2 на виртуальную машину нужно просто нажать ваш Host Key (обычно это правый Ctrl ) и одновременно нажать F2 .
Исправление проблем в ISO-образах
В то время как VirtualBox монтирует оригинальный образы ISO без проблем, есть такие форматы образов, которые не могут надежно быть преобразованы в ISO. Например, ccd2iso игнорирует .ccd и .sub файлы, что может привести к созданию образа диска с разбитыми файлами.
В этом случае вам придется использовать CDemu для Linux внутри VirtualBox или любую другую утилиту, предназначенную для монтирования образов дисков.
VirtualBox GUI не видит мою тему GTK 2x/3x
Смотрите Единый интерфейс GTK/QT приложений для получения информации о настройке GUI Qt в GTK-окружениях.
OpenBSD не работает при недоступных инструкциях виртуализации
В то время как OpenBSD отлично работает на других гипервизорах без включенной виртуализации (VT-х AMD-V), виртуальная машина с OpenBSD работает в VirtualBox без этих инструкций некорректно, выдавая кучу ошибок сегментации. Запуская VirtualBox с аргументом -norawr0 можно избавиться от этой проблемы. Вы можете сделать это следующим образом:
VBOX_E_INVALID_OBJECT_STATE (0x80BB0007)
Это может произойти при некорректном завершении виртуальной машины. Разблокировка машины тривиальна:
Подсистема USB не работает в хост-машине или гостевой ОС
Ваш пользователь должен быть в группе vboxusers , и вы должны установить пакет дополнений, если хотите иметь поддержку USB 2. Тогда вы сможете включить USB 2 в настройках виртуальной машины и добавить один или несколько фильтров для устройств, которые будут иметь доступ из гостевой ОС.
Иногда, на старых Linux-хостах, подсистема USB не распознается автоматически и выдает ошибку Could not load the Host USB Proxy service: VERR_NOT_FOUND или при невидимом USB-диске в хост-машине, даже когда пользователь находится в группе vboxusers. Эта проблема происходит из-за того, что VirtualBox переключается с usbfs на sysfs с версии 3.0.8. Если хост-машина не распознаёт этого изменения, вы можете вернуться к старому поведению, определив следующую переменную окружения в любом файле, которые конфигурирует вашу оболочку (например, в
/.bashrc , если вы используете bash):
Затем убедитесь, что, окружающая среда приняла это изменение (перелогиньтесь, запустите новый экземпляр оболочки или перезагрузитесь).
Также убедитесь, что ваш пользователь состоит в группе storage .
Ошибка создания сетевого интерфейса «host-only»
Убедитесь в том, что все модули ядра VirtualBox загружены (см. Загрузка модулей ядра VirtualBox).
WinXP: глубина цвета не может превышать 16 цветов
Если Вы работаете в 16-битной глубине цвета, то значки будут отображаться некорректно. Тем не менее, при попытке изменить глубину цвета на более высокий уровень, система может ограничить вас с более низким разрешением или просто не позволит вам изменить глубину вообще. Чтобы это исправить, запустите regedit в Windows и добавьте следующий ключ реестра для виртуальной машины Windows XP:
Затем обновите глубину цвета в «Свойствах рабочего стола». Если ничего не происходит, заставьте экран перерисоваться (например, нажмите Host+f ).
Использование последовательных портов в гостевой ОС
Проверьте наличие прав для доступа к последовательным портам:
Добавьте пользователя в группу uucp
Windows 8.x ошибка 0x000000C4
Если вы получаете этот код ошибки при загрузке, даже при выбранном типе OS Win 8, попробуйте включить инструкцию процессора CMPXCHG16B :
Windows 8 VM вылетает при загрузке с ошибкой «ERR_DISK_FULL»
Если ваша Windows 8 не запускается, VirtualBox выдаёт ошибку что виртуальный диск заполнен, но тем не менее вы уверены что диск не является заполненным, откройте настройки виртуальной машины Настройки>Память>Контроллер: SATA и выберите Use Host I/O Cache.
Гостевая ОС Linux выдает искажённый или запаздывающий звук
Аудио драйвер AC97 в ядре linux иногда неправильно считывает время из Virtual Box, что приводит к различным искажениям звука. Для исправления проблемы, создайте файл /etc/modprobe.d со следующим содержанием:
Гостевая ОС зависает после запуска Xorg
Неисправные или отсутствующие драйверы могут привести к остановке после запуска Xorg, см., например, [2] и [3] [устаревшая ссылка 2020-08-06 ⓘ] . Попробуйте отключить 3D-ускорение в Настройки> Дисплей, и проверьте, все ли драйверы Xorg установлены.
Исчезновение пунктов меню и ошибка «NS_ERROR_FAILURE»
Если после первого запуска машины вы столкнулись с такой ошибкой:
Выйдите из VirtualBox, удалите все файлы новой машины и из файла конфигурации VirtualBox удалите последнюю строку в MachineRegistry меню:
Это иногда происходит при выборе QCOW/QCOW2/QED формата виртуального диска.
«Указанный путь не существует. Проверьте путь и попробуйте еще раз.» Ошибка в гостевой ОС Windows
Это сообщение об ошибке часто появляется при работе с расширением .exe который требует привелегий администратора из общей папки в гостевой Windows. См. отчет об ошибке.
Есть несколько способов обойти ошибку:
- Отключить UAC с помощью Панель управления -> Центр поддержки -> «Settings Change User Account Control» из левой боковой панели -> Установить ползунок «Никогда не уведомлять» -> OK и перезагрузить ОС
- Скопируйте файл из папки общего доступа в гостевую ОС и запустите оттуда
Не работают 64-битные гостевые ОС
При запуске клиента VM, если никакие 64-битные варианты не доступны, убедитесь что ваши возможности виртуализации процессора (обычно с именем VT-X ) включены в BIOS.
Ошибка «VT-x is not available. (VERR_VMX_NO_VMX)» и процессор без поддержки виртуализации
Начиная с версии 6.1.0 (выпущенной 10 декабря 2019), VirtualBox требует аппаратную поддержку виртуализации. Если же она отсутствует в процессоре, временным решением может быть установка более ранней версии VirtualBox, например, с помощью понижения версии пакета или установки virtualbox-bin-5 AUR [ссылка недействительна: package not found] , однако работоспособность на свежих ядрах Linux не гарантируется.
Разбираемся с установкой и загрузкой Linux на примере ArchLinux
Сначала мы установим Archlinux и превратим его в загрузочный сервер. Прямо оттуда подготовим новую компактную систему, в которую добавим минимальное графическое окружение и самый необходимый функционал (на примере Firefox). Научим нашу систему загружаться по сети даже на компьютерах с UEFI. Затем полностью переведём её в режим «только для чтения» (сделаем «живой»), что позволит нам использовать систему одновременно хоть на пол сотне разномастных компьютеров с одним единственным загрузочным сервером. Это всё будет работать даже внутри дешёвой 100-Мб сети, которую мы дополнительно «разгоним» в пару раз.
Никакие закладки в жестких дисках будут вам не страшны, потому что дисков у нас не будет. Никакие очумелые ручки пользователей ничего не сломают, т. к. после перезагрузки система вернется в первозданное лично вами состояние. Конечно же, вы научитесь и сможете самостоятельно изменять загружаемую систему таким образом, чтобы в ней содержался только нужный вам функционал и ничего лишнего. Между делом мы выясним, как и в каком порядке загружается Linux, а также из чего он состоит. Знания, как известно, — бесценны, поэтому я делюсь ими даром.
Постараюсь без долгих рассуждений пояснять происходящее, иногда забегая немного вперёд, но впоследствии обязательно раскладывая всё по полочкам. Чтобы у вас вообще не возникало проблем с пониманием, предполагаю, что вы уже работали с каким-нибудь готовым дистрибутивом Linux, пробовали писать простые скрипты с помощью nano или другого текстового редактора. Если вы новичок в ArchLinux, то узнаете много нового, а если «старичок», то узнаете поменьше, но, надеюсь, что в любом случае вы ещё сильнее полюбите Linux.
Информации оказалось очень много. И по устоявшейся голливудской традиции впереди вас ждёт сериал в нескольких частях:
продолжение;
окончание.
Сейчас мы установим Archlinux в VirtualBox, который можно будет клонировать и запускать практически на любом компьютере с legacy BIOS без каких-либо дополнительных настроек. Между делом мы познакомимся с основными приёмами работы с systemd, а также узнаем как его использовать для запуска произвольных служб и программ во время загрузки. Ещё мы увидим, какие этапы проходит Linux при загрузке, и напишем собственный обработчик (hook), который поместим в initramfs. Не знаете что такое initramfs? Тогда заходите под кат.
Есть много причин, по которым выбор пал именно на Archlinux. Первая причина: он мой давний изворотливый приятель и верный помощник. Gentoo, как пишут на просторах Интернета, ещё более изворотлив, но собирать систему из исходников не хочется. Вторая причина: в готовых сборках всегда содержится много лишнего, а перекачивание больших объемов данных может критично сказаться на производительности сети, да и ничего не видно за широкой спиной «автоматического инсталлятора» — это третья причина. Четвертая: systemd постепенно проникает во все дистрибутивы и даже в Debian, так что мы сможем хорошенько покопаться в грядущем готовых дистрибутивов на примере Archlinux. При всём при этом, систему, которую мы позднее подготовим, можно будет загружать по сети не только сервера, работающего в виртуальной машине, но и с обычного компьютера, например, с Raspberry Pi, и даже с Western Digital My Cloud (проверено), который работает под Debian.
Подготовительные работы
Скачиваем свежий образ по ссылке с официального сайта. В Москве с серверов Яндекса, например, загрузка происходит очень быстро, и если у вас процесс затянулся — просто попробуйте качать в другом месте. Рекомендую запомнить в каком, т. к. эта информация нам ещё пригодится.
В VirtualBox создаем новую виртуальную машину (например, с 1 Гб оперативной памяти и 8 Гб накопителем). В настройках сети необходимо выбрать тип подключения «сетевой мост» и подходящий сетевой адаптер с доступом к сети Интернет. Подключаем скаченный образ к CD-ROM’у. Если не терпится начать работать с железом, то берите флешку и записывайте образ с помощью Win32 Disk Imager (если работаете под Windows), а потом загружайте будущий сервер прямо с неё.
Включаем машину, дожидаемся появления командной строки и устанавливаем пароль, без которого SSH работать не будет:
Запускаем сервер SSH командой:
Остается узнать IP адрес машины, изучив вывод команды:
Адрес будет указан сразу после «inet».
Теперь пользователи Windows смогут подключиться к машине с помощью putty, а потом будут копировать отсюда команды и вставлять их и нажатием правой кнопки мыши.
Базовая установка
Дальше максимально коротко опишу стандартную установку Archlinux. Если появятся вопросы, то ответы на них вы, вероятно, найдете в Подробном описании установки для новичков. Wiki просто замечательная, а англоязычная wiki даже актуальная, так что старайтесь пользоваться именно ей.
Подготавливаем носитель с помощью cfdisk (это консольная утилита с простым и понятным интерфейсом). Нам достаточно одного раздела, только не забудьте пометить его как загрузочный:
Форматируем в ext4 и устанавливаем метку, например HABR:
Будущий корневой раздел монтируем в /mnt:
Archlinux обычно устанавливается через интернет, поэтому сразу после установки у вас будет самая новая и актуальная версия. Список репозиториев находится в файле /etc/pacman.d/mirrorlist. Постарайтесь вспомнить, откуда скачивали дистрибутив и перенесите эти серверы в самое начало списка — так вы серьезно сэкономите время на следующем шаге. Обычно это серверы, географически расположенные там же, где вы сейчас находитесь.
Устанавливаем базовый набор пакетов и набор для разработчиков:
Теперь воспользуемся командой arch-chroot, которая позволяет временно подменить корневой каталог на любой другой, в котором есть структура корневой файловой системы Linux. При этом программы, которые мы оттуда запустим, не будут знать о том, что снаружи ещё что-то существует. Мы практически окажемся в нашей новой системе с правами администратора:
Обратите внимание, как поменялось приглашение командной строки.
Выбираем языки, которые планируем использовать. Предлагаю оставить en_US.UTF-8 UTF-8 и ru_RU.UTF-8 UTF-8. В текстовом редакторе нужно просто снять комментарии напротив них:
Теперь генерируем выбранные локализации:
Если всё прошло хорошо, то вы увидите примерно такой текст:
Устанавливаем язык, который будет использоваться по-умолчанию:
А также раскладку и шрифт в консоли:
Придумываем название для нашего будущего сервера:
Теперь установим пароль администратора. Делаем мы это в первую очередь из-за того, что SSH не позволит нам подключиться к системе без пароля. Тему неразумности использования системы, незащищенной паролем, здесь мы развивать не будем.
Дважды вводим пароль и убеждаемся, что password updated successfully.
Добавим нового пользователя с именем username (можете выбрать любое), наделим его правами администратора и зададим ему пароль из тех же соображений, а ещё и из-за того, что под root в текущей версии Arch мы не сможем собирать пакеты из AUR (Arch User Repository — это репозиторий от сообщества пользователей Arch Linux с программами, которые не вошли в основной репозиторий):
Редактируем файл настроек /etc/sudoers с помощью nano:
Добавив в него сразу после строки «root ALL=(ALL) ALL» ещё одну строчку:
И задаём пароль для пользователя username:
Теперь нужно установить загрузчик на внутренний накопитель, чтобы система смогла самостоятельно с него загрузиться. В качестве загрузчика предлагаю использовать GRUB, потому что позже он нам снова пригодится. Устанавливаем пакеты с помощью стандартного для Archlinux менеджера пакетов pacman:
Записываем загрузчик в MBR (Master Boot Record) нашего внутреннего накопителя.
Если всё прошло нормально, то вы увидите Installation finished. No error reported.
Выходим из chroot:
И замечаем, как поменялось приглашение командной строки.
Мы будем использовать метки дисков, подробное объяснение этого утверждения последует позже.
Снимите комментарий со строки GRUB_DISABLE_LINUX_UUID=true, чтобы не использовались UUID накопителей:
Генерируем файл конфигурации загрузчика, снова используя arch-chroot. Будет произведён вход, выполнение одной единственной команды, и последует автоматический выход:
Нам нужно заменить все упоминания /dev/sda1 на LABEL=HABR в файле конфигурации:
Если поменять в этом же файле строку set lang=en_US на set lang=ru_RU, то загрузчик будет общаться с нами на великом и могучем.
Генерируем файл fstab с ключом -L, который заставит генератор использовать метки дисков:
На этом базовая установка ArchLinux закончена. Система будет загружаться самостоятельно и встретит вас приветливым русскоязычным интерфейсом командной строки. Если после этого мы введем команду dhcpcd, то скорее всего даже Интернет заработает. Но мы пока не будем торопиться с перезагрузкой.
Запуск при загрузке с помощью systemd на примере NTP и SSH
Поскольку наша система будет общаться с другими компьютерами, нам потребуется синхронизировать время. Если время на сервере и клиенте будет отличаться, то существует большая вероятность того, что они вообще не смогут соединиться друг с другом. В свою очередь sudo может начать просить пароль после каждого действия, думая, что таймаут авторизации давно истёк. И кто знает, с чем нам ещё предстоит столкнуться? Перестрахуемся.
Чтобы синхронизировать время с серверами через Интернет по протоколу NTP, нам нужно установить недостающие пакеты. Можно воспользоваться arch-root, но но мы обойдёмся ключами, которые сообщат новое место для установки менеджеру пакетов:
Настроим получение точного времени с российских серверов:
Нам достаточно синхронизировать время один раз при загрузке. Раньше мы бы записали запуск службы точного времени в файл rc.local, но сейчас появился менеджер системы и служб systemd, который старается запускать службы (в оригинале они называются unit) параллельно для уменьшения времени загрузки системы. Естественно, что работоспособность одной службы может зависеть от функционирования другой. Например, нам бесполезно пытаться синхронизировать время через Интернет до того, как у нас на компьютере заработает сеть. Чтобы описать все эти взаимосвязи, уже недостаточно простого указания имени исполняемого файла, поэтому запуск посредством systemd стал весьма нетривиальным занятием. Для этой цели были созданы специальные файлы с расширением «.service». В них указаны зависимости, имена исполняемых файлов и другие параметры, которые нужно учитывать для успешного запуска. В частности, для управления этапами загрузки в systemd используются цели (target), которые по возлагаемым на них задачам схожи с уровнями запуска (runlevel). Подробности читайте в вики.
К радости новичков, вместе с пакетом ntp поставляется уже готовый ntpdate.service. Все файлы, описывающие запуск служб, находятся в папке $root/usr/lib/systemd/system/, и их можно открыть в любом текстовом редакторе или посмотреть обычным образом. Вот, например, $root/usr/lib/systemd/system/ntpdate.service:
В блоке [Unit] в строке Description указывается краткое описание службы, и при каких условиях она должна быть запущена (в данном случае, после запуска сети, но до перед запуском сервера NTP, который мы вообще не планируем запускать). Запрос точного времени происходит единственный раз во время загрузки, и за это отвечает строка Type=oneshot из блока [Service]. В этом же блоке в строке ExecStart указаны действия, которые необходимо выполнить для запуска сервиса. В блоке [Install] в нашем случае указано, что запуск нашей службы необходим для достижения цели multi-user.target. Рекомендуется использовать такое же содержание блока [Install] для запуска самодельных служб.
В качестве первого практического примера мы немного расширим функциональность ntpdate.service, попросив его дополнительно исправлять время на аппаратных часах. Если после этого, на этом же самом компьютере вы загрузите Windows, то увидите время по Гринвичу, так что не пугайтесь.
Изменение стандартного поведения любой службы systemd производится следующим образом: сначала в папке /etc/systemd/system/ создается новый каталог с полным именем службы и расширением «.d», куда добавляется файл с произвольным именем и расширением «.conf», и уже там производятся нужные модификации. Приступим:
Здесь просто говорится о том, что во сразу после запуска службы выполнить команду «/usr/bin/hwclock -w», которая переведёт аппаратные часы.
Добавляем службу ntpdate в автозагрузку (синтаксис стандартен для всех служб):
Как видите, в каталоге multi-user.target.wants создалась обыкновенная символическая ссылка на файл ntpdate.service, а упоминание о цели multi-user.target мы видели в блоке [Install] этого самого файла. Получается для того, чтобы система достигла цели multi-user.target, должны быть запущены все службы из каталога multi-user.target.wants.
Теперь устанавливаем пакет SSH аналогичным способом (в ArchLinux он называется openssh):
Но на этот раз для автозапуска мы будем использовать сокет, чтобы сервер SSH стартовал только после поступления запроса на подключение, а не висел мёртвым грузом в оперативной памяти:
Мы не поменяли стандартный 22-й порт и не включили принудительное использование Protocol 2 — пусть это останется на моей совести.
Забегая вперед или знакомимся с обработчиками (hooks)
Чтобы мы могли не глядя подключиться к нашему будущему серверу, нам нужно знать его IP адрес. Будет намного проще, если этот адрес — статический. Обычные способы, о которых говорится в вики, нам не подходят. Проблема в том, что сетевые адаптеры в современном мире именуются согласно своему физическому расположению на материнской плате. Например, имя устройства enp0s3 означает, что это сетевой адаптер ethernet, который расположен на нулевой шине PCI в третьем слоте (подробности здесь). Сделано так для того, чтобы при замене одного адаптера другим, имя устройства в системе не поменялось. Такое поведение нам не желательно, т. к. на разных моделях материнских плат положение сетевой карты может быть разным, и когда мы попытаемся перенести наш загрузочный сервер из VirtualBox на реальное железо, нам скорее всего придётся загружаться с клавиатурой и монитором, чтобы правильно настроить сеть. Нам нужно, чтобы имя сетевого адаптера стало более предсказуемым, например, eth0 (это место зарезервировано смайликом).
Устанавливаем пакет mkinitcpio-nfs-utils, и у нас появится обработчик (hook) под названием «net»:
По-умолчанию, все файлы обработчика попадают в /usr/lib/initcpio/. Обычно это парные файлы с одинаковым названием, один из которых окажется в подкаталоге install, а другой — в hooks. Сами файлы являются обычными скриптами. Файл из папки hooks обычно попадает внутрь файла initramfs (позже мы о нём всё узнаем) и выполняется при загрузке системы. Второй файл из пары попадает в папку install. Внутри него есть функция build(), в которой находятся сведения о том, какие действия нужно выполнить во время генерации файла initramfs, а также функция help() с описанием того, для чего предназначен данный обработчик. Если запутались, то просто читайте дальше, и всё сказанное в этом абзаце встанет на свои места.
Папка initcpio также присутствует в каталоге /etc, и в ней тоже есть подкаталоги install и hooks. При этом она имеет безусловный приоритет над /usr/lib/initcpio, т. е. если в обеих папках окажутся файлы с одинаковыми названиями, то при генерации initcpio будут использоваться файлы из /etc/initcpio, а не из /usr/lib/initcpio.
Нам нужно немного поменять функциональность обработчика net, поэтому просто скопируем файлы из /usr/lib/initcpio в /etc/initcpio:
Приводим файл hooks/net к следующему виду:
Теперь откроем файл $root/etc/initcpio/install/net и увидим, что в функции help() отлично написано, что из себя должна представлять переменная «ip»:
Останется просто установить значение переменной, чтобы задать статический IP адрес и название сетевого устройства, например так «192.168.1.100::192.168.1.1:255.255.255.0::eth0:none» (здесь и далее используйте подходящие для себя настройки сети). В следующем разделе вы узнаете, где именно задаётся значение.
А пока уберём всё лишнее из файла $root/etc/initcpio/install/net. Оставляем загрузку модулей сетевых устройств, программу ipconfig, которую использовали выше, и, естественно, сам скрипт из папки hooks, выполняющий всю основную работу. Получится примерно следующее:
Когда во время загрузки менеджер устройств systemd-udevd попробует переименовать наше сетевое устройство в привычное ему predictable network interface name, например, в enp0s3, то у него ничего не получится. Почему — читайте дальше.
Как происходит загрузка системы
Для простоты рассмотрим обычные BIOS. После включения и инициализации, BIOS начинает по порядку идти по списку загрузочных устройств, пока не найдет загрузчик, которому передаст дальнейшее управление загрузкой.
Как раз такой загрузчик мы записали в MBR нашего накопителя. Мы использовали GRUB, в настройках которого (файл grub.cfg) указали, что корневой раздел находится на диске с меткой HABR. Вот эта строка целиком:
Здесь упомянут файл vmlinuz-linux, который является ядром системы, а указатель на корневую систему является его параметром. Мы просим искать корневую систему на устройстве с меткой HABR. Здесь также мог бы быть уникальный для каждого накопителя UUID, но в этом случае при переносе системы на другой диск нам несомненно пришлось бы его изменить. Если бы мы указали положение корневой системы привычным для линуксоидов образом: /dev/sda1, то не смогли бы загрузиться с USB накопителя, т. к. это имя USB накопитель бы получил только будучи единственным накопителем в компьютере. Маловероятно, что в компьютере окажется ещё один накопитель с меткой HABR, но не стоит об этом забывать.
Здесь же устанавливается значение глобальной переменной «ip» для нашего обработчика «net» (не забудьте поменять адреса на используемые в вашей сети):
В соседней строке есть упоминание файла initramfs, с которым я обещал разобраться:
Далее при загрузке происходит следующее: загрузчик GRUB получает файлы vmlinuz и initramfs, сообщает им, где искать корневую файловую систему и передаёт им управление дальнейшей загрузкой.
Название initramfs образовано от initial ram file system. Это на самом деле обычная корневая файловая система Linux, упакованная в архив. Она разворачивается в оперативной памяти во время загрузки и предназначена для того, чтобы найти и подготовить корневую файловую систему нашего linux, который мы пытаемся загрузить в итоге. В initramfs есть всё необходимое для этих целей, ведь это настоящий «маленький линукс», который может выполнять многие обычные команды. Его возможности расширяются с помощью обработчиков (hooks), которые помогают сформировать новую корневую файловую систему нашего linux.
После того, как программы из initramfs выполнят свою работу, управление дальнейшей загрузкой передается процессу init подготовленной корневой файловой системы. В качестве процесса init Archlinux использует systemd.
Менеджер устройств systemd-udevd является частью systemd. Он, как и его старший брат, старается обнаруживать и настраивать все устройства в системе параллельно. Он начинает свою работу одним из первых, но уже после того, как наш обработчик net инициализирует сетевую карту ещё на на этапе работы initramfs. Таким образом, systemd-udevd не может переименовать используемое устройство, и имя eth0 сохраняется за сетевой картой в течение всего времени работы.
Готовим initramfs
Для создания файла initramfs используется программа mkinitcpio, которая входит в пакет base, установленный нами в самом начале. Настройки находятся в файле $root/etc/mkinitcpio.conf, а пресеты лежат в папке /etc/mkinitcpio.d. От нас требуется сделать initramfs таким, чтобы он смог найти и подготовить корневую файловую систему, с которой впоследствии начнёт работать systemd. Нам совершенно необязательно учитывать все возможные варианты, достаточно только самого необходимого, чтобы не увеличивать размеры файла initramfs. Более подробная информация находится здесь wiki.archlinux.org/index.php/Mkinitcpio
Обязательно убираем обработчик autodetect. Он проверяет устройства установленные в данном конкретном компьютере, и оставляет только необходимые для них модули в initramfs. Нам этого не нужно, поскольку мы изначально рассматриваем возможность дальнейшего переноса системы на другой компьютер, который аппаратно скорее всего будет отличаться от используемой виртуальной машины.
Достаточный для наших целей список обработчиков включая созданный нами net выглядит следующим образом:
вставляем эту строку в файл mkinitcpio.conf, а старую комментируем:
На базе стандартного пресета linux создаем свой пресет habr:
И приводим его к такому виду:
Нам не нужна ветка ‘fallback’, которая удаляет из обработчиков autodetect, ведь мы его уже сами убрали, и нам не нужно дважды генерировать одинаковый файл initramfs с разными названиями.
Генерируем новый initramfs с помощью пресета habr:
Пишем службу обновления DNS для использования с systemd
Наша сетевая карта получает все настройки для того, чтобы работала сеть и Интернет. Но названия сайтов переводиться в IP адреса не будут, т. к. наша система не знает, какие серверы DNS следует для этого использовать. Напишем собственную службу для этих целей, которую при загрузке будет запускать systemd. А чтобы узнать что-то новое и не заскучать от однообразия, передадим информацию о названии сетевого устройства в качестве параметра, а список DNS серверов сохраним во внешнем файле.
Обновлением информации о DNS серверах занимается resolvconf. Нам идеально подходит синтакскис:
В импортируемом здесь файле IP адрес каждого сервера указывается в новой строке после ключевого слова nameserver. Можно указать сколько угодно серверов, но использоваться будут только первые 3 из них. В качестве примера воспользуемся серверами Яндекс. В этом случае файл, передаваемый в resolvconf, должен выглядеть вот так:
Нам нужно получать информацию о DNS серверах до того, как система будет уверена, что сеть полностью работает, т. е. до достижения цели network.target. Будем считать, что информацию о серверах нам достаточно обновлять один раз во время загрузки. И стандартно скажем, что нашу службу требует цель multi-user.target. Создаём файл запуска службы в каталоге со следующим содержанием:
В строке ExecStart мы выполняем команду echo, на лету генерирующую файл со списком серверов, который через конвейер передаем resolvconf. Вообще, в строке ExecStart нельзя использовать несколько команд и тем более нельзя использовать конвейеры, но мы снова всех обманули, передав эти команды в качестве параметра -c для /usr/bin/sh.
Обратите внимание, что в названии файла update_dns@.service используется символ @, после которого можно указать переменную, и она попадёт внутрь файла, заменив собой «%i». Таким образом строка EnvironmentFile=/etc/default/dns@%i превратится в EnvironmentFile=/etc/default/dns@eth0 — именно это название внешнего файла, мы будем использовать для хранения значения переменных DNS0 и DNS1. Синтаксис как в обычных скриптах: «название переменной=значение переменной». Создадим файл:
И добавим следующие строки:
Теперь добавляем службу в автозагрузку не забывая указать имя сетевой карты после @:
Только что мы написали универсальный файл, обеспечивающий запуск службы. Универсальность заключается в том что, если в нашей системе окажется несколько сетевых адаптеров, то для каждого из них мы сможем указать свои собственные DNS серверы. Нужно будет просто подготовить набор файлов со списком серверов для каждого из устройств и запускать службу для каждого адаптера в отдельности указывая его имя после @.
Перед первым запуском
На этом первоначальная настройка закончена. Нам нужно загрузить установленный ArchLinux с внутреннего накопителя, чтобы произведённые нами изменения вступили в силу.
Отключаем готовую корневую систему:
И выключаем виртуальную машину:
Теперь можно отключить загрузочный образ из CD-ROM или достать флешку, после этого включаем машину и убеждаемся, что всё работает.