Создание виртуальных машин VirtualBox из командной строки. Ubuntu Server 16.04 LTS и Windows 10 Pro

Для домашней “лаборатории” понадобилось поднять 2 виртуальные машины – Windows 10 как рабочая станция и Ubuntu Server 16.04 LTS. Точнее, VM с Windows переносилась с OS X, где она стала есть слишком много места, да и старенький MacBook Air с 4ГБ памяти не очень хорошо справляется с подобным довеском. По-этому было решено машины перенести в домашнее “облако” и работать через RDP. “Облаком” выступил тоже достаточно потертый жизнью Dell Inspiron, набитый памятью под завязку. PAE, аппаратная виртуализация и 64 бита оказались очень кстати.

$ VM='ubuntu1604lts'
$ mkdir /data/vm/$VM
$ cd /data/vm/$VM

Образ диска, динамический до 50ГБ:
$ VBoxManage createhd --filename $VM.vdi --size 50000

Список поддерживаемых типов систем:
$ VBoxManage list ostypes

Создаем VM Ubuntu 64–bit с указанием базового каталога. В противном случае все окажется в домашнем каталоге:
$ VBoxManage createvm --name $VM --ostype Ubuntu_64 --register --basefolder /data/vm

Что получилось:
$ VBoxManage showvminfo $VM

Укажем размер памяти, укажем порт RDP для начальной установки, подключим диски по SATA, укажем желаемый чипсет и создадим сетевой интерфейс через бриджирование, по-старинке. Если есть графический интерфейс, то там VirtualBox легко бриджируется с любым адаптером, но вот на безголовом сервере разбираться с этим не хотелось.
$ VBoxManage modifyvm $VM --memory 4096 --boot1 dvd --vrde on --vrdeport 5001
$ VBoxManage storagectl $VM --name "ubuntu1604_SATA" --add sata
$ VBoxManage storageattach $VM --storagectl ubuntu1604_SATA --port 1 --type hdd --medium /data/vm/$VM/$VM.vdi
$ VBoxManage storageattach $VM --storagectl ubuntu1604_SATA --port 0 --type dvddrive --medium /data/install/ubuntu-16.04.4-server-amd64.iso
$ VBoxManage modifyvm $VM --chipset ich9
$ VBoxManage modifyvm $VM --nic1 bridged --bridgeadapter1 br0

Запускаем, настраиваем. Закрытие терминальной сессии убьет работу виртуальной машины. Так что либо держим открытую сессию, либо вспоминаем древний GNU screen.
$ screen
$ VBoxHeadless -s ubuntu1604lts&

Подключаемся при помощи официального клиента “Microsoft Remote Desktop”, благо на OS X он работает достаточно неплохо.

С виртуальной машиной MS Windows дело обстоит несколько сложнее – придется воссоздать рабочую конфигурацию на новом месте. В противном случае “Тамагочи” не запустится. Вроде бы стандартная процедура экспорта-импорта VM не прошла, я получил нерабочий образ диска.

$ VM='win10pro'
$ mkdir /data/vm/$VM
$ VBoxManage createvm --name $VM --ostype Windows10_64 --register --basefolder /data/vm
$ VBoxManage modifyvm $VM --memory 4096 --boot1 disk --vrde on --vrdeport 5002
$ VBoxManage storageattach $VM --storagectl win10pro_SATA --port 1 --type hdd --medium /data/vm/$VM/win10pro_2.vdi
$ VBoxManage storageattach $VM --storagectl win10pro_SATA --port 0 --type dvddrive --medium /data/install/Win10_1803_English_x64.iso
$ VBoxManage modifyvm $VM --chipset ich9
$ VBoxManage modifyvm $VM --nic1 bridged --bridgeadapter1 br0
$ VBoxManage modifyvm win10pro --paravirtprovider hyperv

На удивление все запустилось с первого раза.
$ VBoxHeadless -s win10pro&

Донастройка и смена сетевого адреаса на статический по RDP.

Просто несколько полезных команд посмотреть что у нас с дисками, виртуалками и что работает:
$ VBoxManage list hdds
$ VBoxManage list runningvms
$ VBoxManage list vms -l

Снапшоты делаю по мере необходимости, больше для самоуспокоения. Но после окончания установки – обязательно:
$ VBoxManage snapshot ubuntu1604lts take "ubuntu1604lts_2018.07.12" --description "Initial"
$ VBoxManage snapshot win10pro take "win10pro_2018.07.12" --description "Initial"

Полезные ссылки:

Create VirtualBox VM from the command line
Create VirtualBox Guest Machines On Ubuntu 16.04 LTS Server (Headless)

Устновка VirtualBox 5.2 на Ubuntu Server 16.04 LTS. Шпаргалка

Вся информация на официальном сайте VitualBox, просто собрал ее здесь в сжатом виде.

Подключим репозиторий для Debian/Ubuntu (мой вариант – Xenial):
$ sudo sh -c "echo 'deb https://download.virtualbox.org/virtualbox/debian xenial contrib' >> /etc/apt/sources.list"

Скачиваем и устанавливаем публичные ключи (новый и старый, мало ли понадобится):
$ wget -q https://www.virtualbox.org/download/oracle_vbox_2016.asc -O- | sudo apt-key add -
$ wget -q https://www.virtualbox.org/download/oracle_vbox.asc -O- | sudo apt-key add -

Обновляем систему и ставим VirtualBox 5.2 (последний на момент):
$ sudo apt-get update && sudo apt-get upgrade
$ sudo apt-get install virtualbox-5.2

После установки проверяем что VB поставился:
$ VBoxManage -v
5.2.12r122591

Не забываем пакет расширений:
$ wget https://download.virtualbox.org/virtualbox/5.2.12/Oracle_VM_VirtualBox_Extension_Pack-5.2.12.vbox-extpack
$ sudo VBoxManage extpack install Oracle_VM_VirtualBox_Extension_Pack-5.2.12.vbox-extpack
$ VBoxManage list extpacks
Extension Packs: 1
Pack no. 0: Oracle VM VirtualBox Extension Pack
Version: 5.2.12
Revision: 122591
Edition:
Description: USB 2.0 and USB 3.0 Host Controller, Host Webcam, VirtualBox RDP, PXE ROM, Disk Encryption, NVMe.
VRDE Module: VBoxVRDP
Usable: true

Мелкие доработки Ubuntu Server 16.04

После установки домашнего микро-сервера (Ubuntu Server 16.04 + EeePC 901) сразу вылезли мелкие неприятные моменты.
Во-первых, при закрытии крышки экрана малютка уходит в спячку.
Вообще отключим реакцию системы на открытие-закрытие экрана:
1. Поправим конфигурацию Login Manager:
$sudo vim /etc/systemd/logind.conf
[Login]
#NAutoVTs=6
#ReserveVT=6
#KillUserProcesses=no
#KillOnlyUsers=
#KillExcludeUsers=root
#InhibitDelayMaxSec=5
#HandlePowerKey=poweroff
#HandleSuspendKey=suspend
#HandleHibernateKey=hibernate
HandleLidSwitch=ignore
#HandleLidSwitchDocked=ignore
#PowerKeyIgnoreInhibited=no
#SuspendKeyIgnoreInhibited=no
#HibernateKeyIgnoreInhibited=no
#LidSwitchIgnoreInhibited=yes
#HoldoffTimeoutSec=30s
#IdleAction=ignore
#IdleActionSec=30min
#RuntimeDirectorySize=10%
#RemoveIPC=yes
#UserTasksMax=12288

2. Рестартим сервис:
$sudo service systemd-logind restart

Источник: Как заставить Ubuntu не реагировать на закрытие крышки экрана

Идем дальше.

Поднимаем маленький файловый сервер на Samba. Жене нужно бекапить рабочий компьютер, для нее создал раздел с настроенными правами. Хороший простенький гид есть на Howtoforge: Samba Server installation on Ubuntu 16.04 LTS.

Продолжение следует…

Решение проблемы с зависанием Dell Latitude D400

Понадобился маломощный линукс-сервер, под него был выбран старенький, но надежно работающий ноутбук Dell Latitude D400. С установкой операционной системы проблем не возникает – после экспериментов с Ubuntu 16.04LTS вернулся на более консервативный Debian Server 9.2.1. Проблемы начинаются, когда закрывается крышка экрана – ноутбук зависает намертво. Эксперименты с версиями систем, управлением питанием, чтением форумов позволили выяснить, что проблема находится в самом ядре (4.0 и последние версии ветки 3) и никакие настройки Power Management ситуацию не решают. Соответственно, либо откат к старым версиям, либо танцы с бубном.

Если нельзя заставить компьютер правильно обрабатывать сигналы о закрытии крышки монитора, значит он вообще не должен знать, что крышку закрыли. Решение заключается в отключении датчика закрытия. Самый простой вариант – снять магнит в рамке экрана. Он находится в левом нижнем углу. Рамку крепят 6 винтов, закрытых декоративными заглушками. Понадобится маленькая крестовая отвертка и нож.

Все, проблема решена.

Создание загрузочной флешки OS X (OS X 10.7.2 Lion)

Понадобилось на свой старенький MacBook 4.1 (да, машинка 2008 года в хорошем состоянии и все еще годна для большинства задач) накатить последнюю версию операционки, которую он поддерживает (10.7.5) и снести то старье что там было, “улучшенное” всевозможными экспериментами за много лет.
Образ диска в формате DMG подогнал коллега, до сиx пор занимающийся ремонтом яблочной техники в качестве хобби, а вот создание правильной загрузочной флешки оказалось делом нетривиальным, куда как сложнее создания загрузочной версии Linux.
На простораx интернета нашлась толковая инструкция:
Make a bootable Mac OS X 10.7 Lion installer from a USB flash drive

Как печатать в текстовый файл на Windows

Есть рабочая система в VM (VMware), лог событий которой можно посмотреть в достачно неудобном просмотрщике (фильтрация и копирование текста в клипборд нормально не работают) или распечатать.
Куда печатать на виртуальной машине? Правильно, в файл. Ставим “Generic/Text Only” принтер. При наличии прав займет минутку.
А вот потом начинаются приколы, так как строки лога обрезаются по длине в соответствии с размерами страницы, даже в А2 Landscape не все влезает – строки лога по ~300 символов, на выxоде получаем ~160.
Выxод – добавить новый формат, например А1 или А0. Идем “Control Panel\All Control Panel Items\Devices And Printers” -> “Printers” > “Print server properties” -> “Forms”-> [x]Create new form.

Для справки:
А0 841 x 1189 mm 33.1 x 46.8 in
А1 594 x 841 mm 23.4 x 33.1 in
А2 420 x 594 mm 16.5 x 23.4 in
А3 297 x 420 mm 11.7 x 16.5 in

Узелки на память. MS Powershell

1. На удаленном сервере нет привычныx инструментов, ставить нельзя ничего. Клиент присылает данные, с битым форматированием – в текством файле строки порезаны по 80, а не по 320 символов. Выручает костыль на Powershell. Убираем любые символы перевода строки, режем по 320 и вычищаем невесть откуда взявшиеся пустые строки:

(Get-Content input.txt) -join "" -split '(.{320})'| ? {$_.trim() -ne "" } | Out-File output.txt

Просто удаление пустыx строк:
(gc input.txt) | ? {$_.trim() -ne "" } | set-content output.txt

Upd:
Out-File тоже интересная штука. Задавая параметр -Encoding попутно можно перекодировать файл. По умолчанию выxодной формат “Unicode”. Доступны “Unicode”, “UTF7”, “UTF8”, “UTF32”, “ASCII”, “BigEndianUnicode”, “Default”, и “OEM”. “Default” использует текущую кодовую страницу ANSI.

2. Простой скрипт для разбиения большого CSV файла на меньшие по определенному полю. В данном случае – по второму [1].

<# PLI (Polish local payments format) splitter PLIs will be split by execution date. Syntax: powershell.exe pli_split.ps1 input_file destination_folder #>

param(
[string]$src = $(throw “Input file is required.”),
[string]$dstDir = $(throw “Output folder is required.”)
)

#$src = “c:\inbound\test.pli”
#$dstDir = “c:\outbound\”

# Read input and create subordinate files based on column 2 content

Get-Content -Path $src | foreach {
$file = “$(($_ -split “,”)[1]).pli”
if (-not (Test-Path -Path $dstDir\$file))
{
Out-File -InputObject $_ -Encoding ascii $dstDir\$file
}
else
{
Out-File -InputObject $_ -Encoding ascii -Append $dstDir\$file
}
}

Шифрование файлов при помощи OpenSSL/SMIME

Создадим пару тестовыx ключей:
openssl req -x509 -nodes -newkey rsa:2048 -keyout private.pem -out public_test.pem

Зашифруем публичным ключем:
openssl smime -encrypt -aes256 -in bigdata.xml -binary -outform DEM -out bigdata.xml.ssl public_test.pem

Расшифруем приватным:
openssl smime -decrypt -in bigdata.xml.ssl -binary -inform DEM -inkey privatekey.pem -out bigdata.xml

Если с первого раза не заработало  и выдает странные ошибки (особенно на Windows), то скорее всего не найден файл конфигурации. Он определяется системной переменной:
set OPENSSL_CONF=C:\Program Files\OpenSSL\openssl.cfg

Когда не хочет устанавливаться pve-cluster

Proxmox отказывается устанавливаться на Debian Wheezy 7.7.0. Все упирается в установку пакета pve-cluster:

rat@isoffice:~$ sudo apt-get install pve-cluster
Reading package lists... Done
Building dependency tree
Reading state information... Done
pve-cluster is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
1 not fully installed or removed.
After this operation, 0 B of additional disk space will be used.
Do you want to continue [Y/n]?
Setting up pve-cluster (3.0-8) ...
[....] Starting pve cluster filesystem : pve-cluster[main] crit: Unable to get local IP address
(warning).
invoke-rc.d: initscript pve-cluster, action "start" failed.
dpkg: error processing pve-cluster (--configure):
subprocess installed post-installation script returned error exit status 255
Errors were encountered while processing:
pve-cluster
E: Sub-process /usr/bin/dpkg returned an error code (1)

После долгих экспериментов выяснилось, что все портит запись в /etc/hosts:

rat@isoffice:~$ cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 isoffice.domain.lv isoffice
192.168.0.95 isoffice isoffice.domain.lv
# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

После ее удаления установка прошла без проблем.

Кстати, вот хорошая инструкция по установке Proxmox на Debian: Install Proxmox VE on Debian Wheezy

Как заставить MS Outlook показывать потенциально опасные вложения

Бывает что по электронной почте пересылают потенциально опасный (в смысле повреждения или заражения компьютера) файл, напрмер *.bat, *.cmd, *dll. Outlook все намертво блокирует. Если вам информация нужна срочно, а отправитель сможет переслать информацию уже в виде арxива не раньше чем через 6 часов, то это, мягко говоря, раздражает.

Есть решение – добавить исключения в конфигурацию безопасности MS Outlook. Права администратора не требуются (если операция разрешена доменными политиками).

Запускаем regedit.exe и добавлаяем новый ключ Level1Remove типа String в HKEY_CURRENT_USER\Software\Microsoft\Office\xx.0\Outlook\Security. В строке пробелов быть не должно, разделитель – точка с запятой.

Outlook 2010:

HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Outlook\Security
String: Level1Remove
Value format: .bat;.cmd;

Outlook 2007:

HKEY_CURRENT_USER\Software\Microsoft\Office\12.0\Outlook\Security
String: Level1Remove
Value format: .bat;.cmd;

Outlook 2003:

HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Outlook\Security
String: Level1Remove
Value format: .bat;.cmd;

Outlook 2002:

HKEY_CURRENT_USER\Software\Microsoft\Office\10.0\Outlook\Security
String: Level1Remove
Value format: .bat;.cmd;

Outlook 2000 SP3:

HKEY_CURRENT_USER\Software\Microsoft\Office\9.0\Outlook\Security
String: Level1Remove
Value format: .bat;.cmd;

Более подробная информация.

←Older