Консольные Live-дистрибутивы Linux.

Искал тут себе маленькие консольные (чтоб без иксов при старте) дистрибутивы Линукс. Перелопатил весь гугль. Вот меня пока два устроили, старейший, из мне известных System Rescue CD и INX, на основе Ubuntu, но без X-сервера. Он так и называется INX (Is Not X).

А вы что посоветуете?

Запуск Mini Windows XP (WinPE) из Hiren’s Boot CD 15.2 по сети (PXE).

Преамбула

Mini Windows XP, «очень полезный горшочек», однако с запуском по сети возникают определенные сложности. Если просто загрузить образ Hiren’s Boot CD с помощью memdisk и запустить Mini Windows XP она свалится.

XP, что PE-версии, что инсталлятор, подружить с PXE проблематично. Мало того, что надо поднимать сервер BINL, который выдаст винде нужные драйвера для сетевых карт, так еще и задолбаешься настраивать загрузчик. Чего только не было — и штатный ntdetect.com не подходил, и патченные в упор не видели файлов ответа (winnt.sif), в общем геморроя было масса.
Но интересно, что Mini Windows XP вообще-то драйвера для сети при загрузке не нужны, все файлы на момент запуска уже переданы на целевую машину, и проблема в чем-то другом. Насколько я понял, в том, как memdisk маппит в память ISO-образ, а винда потом с этим делом конфликтует, скорее всего у нее не получается создать виртуальный диск в памяти. А если попробовать грузить не образ ISO, а образ HDD с виндой? Да! Таким макаром все вышло. Об этом и расскажу.

Необходимые инструменты

— Собственно, ISO-образ Hiren’s Boot CD 15.2
Minimal DOS Image
— Какой-нибудь дистрибутив Linux, в который можно установить виртуальную машину QEMU. Мой пакет для Slackware здесь
— Утилита kpartx, из комплекта multipath-tools. Можно собрать/скачать самостоятельно. На всякий случай, пакет для Slackware
— Windows 7, если захочется провести более глубокую модификацию Mini Windows XP
— Текстовый редактор, поддерживающий переносы строк DOS/Windows (CR+LF), для редактирования конфигов и BAT-файлов DOS, Mini Windows XP и конфига загрузчика Grub4Dos (я делал это в винде).

Создание образа HDD с DOS

1. Складываем все инструменты в отдельный каталог в Linux, и создаем в нем «болванку», для образа HDD:
dd if=/dev/zero of=winpe-test.img bs=90M count=1

Если создавать только минимально работающий Mini Windows XP, то хватит и 60 мегабайт (bs=60M), впрочем, можете попробовать поэкспериментировать и еще уменьшить его.

2. Грузимся в QEMU, указывая в качестве загрузочного устройства образ Hiren’s Boot CD, и приаттачиваем «болванку» образа HDD, как первый жесткий диск:
qemu-system-i386 -cdrom hbcd.iso -hda winpe-test.img -boot d

3. Выбираем в меню загрузки Start Hiren’s Boot CD, потом File Managers и Volkov Commander
Загрузившись в VC вводим команду fdisk3. Эта команда запустит родной Fdisk от Microsoft’а.
У нас один жесткий диск, пока не форматированный и не размеченный, так что в появившемся меню нажимаем 1 и ENTER (Create DOS Partition or DOS logical drive), в следующем меню тоже выбираем 1 пункт (Create Primary DOS Partition), далее отвечаем Y (да). Если все сделано верно, Fdisk предложит перезагрузиться, дабы новый раздел стал доступен в DOS. Выходим из Fdisk и закрываем QEMU.

4. Грузимся в QEMU, но на этот раз указываем в качестве CD Minimal DOS Image:

qemu-system-i386 -cdrom dos.iso -hda winpe-test.img -boot d

Наш новый диск имеет букву D:, но недоступен, поскольку не отформатирован.

5. Форматируем его и делаем системным:

format D: /U /S

Подтверждаем операцию, по окончании вводим метку, например, WINPE.

6. Переходим на диск D (в меню Left—>Drive или Right—>Drive, QEMU перехватывает Alt+F1/Alt+F2), копируем с диска C: файлы autoexec.bat, config.sys, himem.sys и каталоги DOS и VC.

7. В оригинальном образе была опечатка в autoexec.bat, ее можно подправить, заменив строчку DOS;VC на C:\DOS;C:\VC

Содержимое AUTOEXEC.BAT и CONFIG.SYS

8. Можно проверить образ, загрузившись с него в том же QEMU:
qemu-system-i386 -hda winpe-test.img -boot c

Должны появиться окошки Volkov Commander.

Монтирование (и размонтирование) образа диска

Для того, чтобы добавить на диск файлы WinPE, необходимо получить к нему доступ из Linux:

0. Создаем точку монтирования
mkdir /mnt/dos

1. Вешаем образ на Loop-устройство:
losetup /dev/loop0 winpe-test.img
Обычно устройство loop0 свободно, но можно посмотреть свободное командой
losetup -f

2. Маппим разделы:
kpartx -av /dev/loop0

Утилита выдаст сообщение, содержащее название обнаруженного раздела (выделено жирным):
add map loop0p1 (251:6): 0 183393 linear /dev/loop0 63

3. Монтируем раздел:
mount -t vfat /dev/mapper/loop0p1 /mnt/dos

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

1. Размонтируем раздел:
umount /mnt/dos

2. Удаляем информацию о разделе:
kpartx -dv /dev/loop0

3. Освобождаем loop-устройство:
losetup -d /dev/loop0

Чтобы было проще, можно написать два маленьких скрипта:

Подключение образа:

#!/bin/bash

IMAGE="winpe-test.img"

echo "Open WinPE"
losetup /dev/loop0 $IMAGE
MSG=`kpartx -av /dev/loop0`
DEV=`echo $MSG | awk '{print $3}'`
echo $DEV
sleep 5
mount -t vfat /dev/mapper/$DEV /mnt/dos
echo "Complete"
sleep 2

На PasteBin

Примечание: паузы нужны, иначе монтирование может случиться раньше, чем блочное устройство (раздел), появится в /dev/mapper и ничего не примонтируется.

Отключение образа:
#!/bin/bash

echo "Close WinPE..."

umount /mnt/dos
kpartx -dv /dev/loop0
losetup -d /dev/loop0

echo "Complete!"

На PasteBin

Минимально работающий Mini Windows XP

Для создания минимально работающего Mini Windows XP, потребуется взять из образа Hiren’s Boot CD все файлы из \HBCD\XP, и положить их в каталог /HBCD/XP в образе жесткого диска.
Также необходимо настроить загрузчик Grub4Dos:
1. В образе Hiren’s Boot CD находим файл GRUB.EXE и копируем его в корень нашего диска.
2. Создаем конфиг MENU.LST также в корне диска. Я просто подправил оригинальный конфиг из Hiren’s Boot CD, удалив оттуда все лишнее. Содержимое конфига на PasteBin

Скачать GRUB.EXE, MENU.LST, AUTOEXEC.BAT, CONFIG.SYS с Mega.Nz

Внимание! Править MENU.LST, AUTOEXEC.BAT, CONFIG.SYS надо редактором, который умеет в DOS/Windows переносы строк (например, Notepad++)

Проверяем.
1. Грузимся из полученного образа (здесь я делал это уже по сети, о настройке конфига для PXE будет ниже):

2. Запускаем GRUB.EXE:

3. Выбираем соответствующий пункт меню, ждем…

ФАНФАРЫ!

На самом деле, Mini Windows XP получился сильно урезанным, без программ из Hiren’s Boot CD, без толковой поддержки сети и прочих полезностей, что ж, будем улучшать

Добавляем важный софт.

Ну он не так, чтоб уж прямо критически важный, но Mini Windows XP подгружает некоторые программы, например, программу настройки сети, автомонтирования дисков, архиватор из \HBCD\Programs, \HBCD\Programs\Files \HBCD\Dos, я посмотрел в код файлов автозагрузки, и все самое важное выделил.

1. В /HBCD/Programs/Files нашего образа, добавим следующие файлы из \HBCD\Programs\Files ISO-образа:
7Zip.7z
AutoMountDrives.7z
DLL.7z
IrfanView.7z
Notepad.7z
TeraCopy.7z
XpFiles.7z

2. В /HBCD/Dos (из \HBCD\Dos):
BiosBoot.7z
MBRUtil.7z
PCI32.7z
SavePart.7z

3. В /HBCD файл HBCDMenu.exe

4. В /HBCD/Programs пока можно скопировать все файлы, которые не *.cmd (из \HBCD\Programs ISO-образа), CMD-файлы, кроме одного (AutoMountDrives.cmd), придется подправлять, так что AutoMountDrives.cmd можно скопировать.

Лирическое отступление, или про то, как залезть во внутренности Mini Windows XP

Все потроха сего дистрибутива лежат в архиве формата WIM, в Windows 7 имеется стандартная утилита для работы с ним.
Копируем из образа HBCD файл XP.wim куда-нибудь в удобный каталог, и смотрим его содержимое (команды выполнять от администратора):

dism /Get-WimInfo /WimFile:XP.wim

Cистема DISM
Версия: 6.1.7600.16385

Сведения об образе : XP.wim

Индекс: 1
Имя : XP
Описание : <не определено>
Размер (байт): 113 236 979

Операция успешно завершена.

Образ можно подмонтировать в какой-нибудь каталог:
mkdir %TMP%\wim
dism /Mount-Wim /WimFile:XP.wim /name:XP /MountDir:%TMP%\wim

Теперь в каталоге %TMP%\wim — содержимое образа, меня оттуда интересуют два файла:
Startup.cmd, который Mini Windows XP запускает при старте, и prep, который в процессе загрузки переименовывается в Startup2.cmd и выполняется. Оттуда и из XpCustomize.cmd и были вытащены все нужные имена файлов.

Закрыть образ без сохранения изменений:

dism /Unmount-Wim /MountDir:%TMP%\wim /discard

С сохранением:

dism /Unmount-Wim /MountDir:%TMP%\wim /commit

openwim.bat closewim.bat savewim.bat

Источник Копия

Настройка шары на сервере

Итак, что же все-таки делать с остальным софтом? Ну у нас же PXE, а значит есть сервер с Samba. В следующем выпуске я таки начну сначала, и расскажу, как настроить PXE на Linux-машине, и Samba в т.ч. Пока ограничусь секцией конфига smb.conf для этой конкретной шары:

[hbcdshare]
        path=/home/pxe/tftp/distrib/windows/winpe
        public=yes
        browsable=yes
        read only=yes
        guest ok=yes

В каталог /home/pxe/tftp/distrib/windows/winpe копируем каталог Files из ISO-образа HBCD, вместе со всем содержимым. Естественно, для шары вы можете указать любой удобный вам путь.

Подключение шары в Mini Windows XP

1. Правим файл /HBCD/XP/XpCustomize.cmd в нашем образе диска, меняем строку
REM start PENetwork на start PENetwork
Эта команда запустит утилиту настройки сети (нужные драйвера уже есть в комплекте в архиве XpDrvLAN.7z и Mini Windows XP их подгружает, если вы не забыли положить в /HBCD/Programs файлы 7z.exe и 7z.dll)

2. Шара не поднимется, пока не будет настроена сеть, поэтому надо «притормозить» выполнение командного файла (обычно хватает полминуты). Для этого добавим в каталог /HBCD/XP утилиту sleep.exe (приложу ее в архиве ниже)

3. Пропишем следующие команды для паузы и поднятия шары. Шара будет подключена, как сетевой диск, например, с буквой W:

REM Add network share with programms
CD \HBCD\XP
sleep 30
Echo Add Files Share...

NET USE W: \\10.10.0.120\hbcdshare

sleep 10

Файл XpCustomize.cmd целиком
Исходник утилиты sleep

Если все сделано правильно, то после загрузки Mini Windows XP мы увидим сетевой диск в «Моем компьютере»:

А если зайдем внутрь, то файлы:

Исправляем CMD-файлы для запуска софта

1. Извлекаем из ISO-образа все CMD-файлы из \HBCD\Programs в отдельный каталог.
Во всех них, где есть (кроме файла AutoMountDrives.cmd) нужно заменить строчку Files\имя_файла на W:\Files\имя_файла (W: — сетевой диск, куда подключена шара)
2. Специально для этого дела я написал за 15 минут на коленке утилиту на C# — HBCDCmdFix

Пользоваться просто — выбираете каталог с *.cmd файлами и нажимаете Fix. Программа делает резервные копии в *.bak файлы перед изменением.

3. Кладем измененные файлы в /HBCD/Programs, отмонтируем образ нашего HDD, загружаемся с него и пробуем запустить какую-нибудь программу (из меню в системном трее). Если все сделано правильно, то программа запустится

Наводим красивости

Все готово, осталось только навести красоту в загрузочных меню.

Делаем в CONFIG.SYS загрузочное меню DOS (оставим возможность выйти в DOS или перезагрузить компьютер):

Измененный CONFIG.SYS и AUTOEXEC.BAT

Почитать про создание загрузочного меню в MS DOS Копия

Измененный MENU.LST Grub4Dos (добавлена возможность перезагрузиться или выключить компьютер).

А симпатичную надпись в DOS’овом меню, я сделал, подправив в HEX-редакторе IO.SYS. Но как — догадайся мол сама 🙂

Готово!

Осталось только сжать готовые образы gzip‘ом и прописать в меню PXE-сервера:

gzip winpecut.img
gzip winpe.img

LABEL winxppe
    menu label Windows XP PE
    kernel modules/memdisk
    initrd distrib/windows/winpe/winpe.img.gz
    append harddisk

LABEL winxppecut
    menu label Windows XP PE Very Small
    kernel modules/memdisk
    initrd distrib/windows/winpecut/winpecut.img.gz
    append harddisk

Видео загрузки Mini XP по сети

Скачать

Minimal DOS Image
Пакеты:
QEMU
muktipath-tools
Скрипты, утилиты, примеры конфигов из статьи

Образы

Тестовый (минимальный) образ Mini Windows XP
Полный образ Mini Windows XP

Простая инструкция по установке Tinyproxy

Небольшое введение

Tinyproxy это такой маленький http/https прокси-сервер, на мой взгляд, очень простой в использовании и конфигурировании, вполне подходящий для несложных задач пропускания http(s) трафика. Например в офисе или дома. Лично я использую его, чтоб можно было посещать статистику и личный кабинет собственного провайдера в обход VPN.

Конфигурация network namespace.

Если у вас есть специальный network namespace для прокси, перед установкой сервера настраиваем его (добавляем нужные файлы hosts и resolv.conf, как это описано здесь Копия)

Рестартируем систему (или сетевой менеджер/демон, тут уж зависит от вашей ОС).

Устанавливаем tinyproxy

Для Sclackware можно скачать пакет с исходниками с помощью sbopkg, взять готовый и откомпилированный здесь (Для Slackware 12-14.2), или собрать из исходников на GitHub и готовый пакет установить с помощью installpkg.

Создаем пользователя и группу

1. Создаем группу для proxy-сервера, например proxy:

groupadd proxy

2. Создаем отдельного пользователя для запуска прокси-сервера:
Можно сделать это с помощью скрипта-обертки adduser над программой useradd.
— На первый вопрос вводим имя пользователя, например, provproxy.
— Далее пропускаем (нажимаем enter)
— В ответ на initial group, вводим имя ранее созданной группы для прокси-сервера, в данном случае proxy (в вашем — ту группу, которую создали вы).
— Далее, на вопрос о дополнительных группах, нельзя устанавливать что-либо, нажимаем Enter
— Home directory нужна, там будет лежать PID-файл, логи (если нужно) и конфигурационный файл. По умолчанию директория совпадает с именем пользователя и располагается в подкаталоге /home.
— Shell должна быть установлена строго в /bin/false, поскольку это не интерактивный пользователь. Если скрипт ответил вам: - Warning: /bin/false is not in /etc/shells (potential problem using FTP)
Do you wish to change the shell ? (Y/n)

То отвечаем n, а потом в /etc/shells добавляем строчку
/bin/false
— Expiry date пропускаем (Enter)
— Далее пропускаем всю User Information
— На вопрос о пароле придумываем что-нибудь чтоб прошло.
Далее правим /etc/shadow, находим строчку с именем пользователя и удаляем все, что между первым и вторым двоеточием. Было:
provproxy:$5$S8/tp/ap2wF/K$qaYnfHuR8opsWO0WwTaXCjiHjmge7mWuH5WwEd5Kn70:17888:0:99
Стало: provproxy::17888:0:99
Права на каталог надо установить в 700 (полный доступ для пользователя provproxy):
chmod 700 /home/provproxy

Можно не пользоваться интерактивным скриптом, а сделать все с помощью базовых команд:
1. Добавить пользователя
useradd -g proxy -d /home/provproxy -s /bin/false provproxy

где:
-g proxy группа пользователя (ранее созданная proxy)
-d /home/provproxy домашний каталог пользователя
-s /bin/false — оболочка для пользователя. Обычно здесь прописывается /bin/sh, /bin/bash для интерактивных пользователей, или /bin/false для неинтерактивных, что нам и надо в данном случае.
Строчка /bin/false должна быть в файле /etc/shells — если ее нет, дописать.

2. Создаем домашний каталог:
mkdir /home/provproxy
3. Меняем владельца каталога на пользователя provproxy
chown provproxy:proxy /home/provproxy
4. Меняем права доступа на каталог:
chmod 700 /home/provproxy

Инициализационный скрипт tinyproxy

Был подробно описан в этой заметке: Запускающий скрипт для tinyproxy Копия

Сам скрипт:
— На PasteBin
На GitHub
Скачать с Mega.nz

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

PID-файл: в скрипте необходимо правильно указать путь к PID-файлу, но об этом поговорим ниже. У меня PID-файл создается в домашнем каталоге пользователя provproxy. Местоположение PID-файла задается в этой строке скрипта. Если надо, не забудьте исправить на свое значение:

PIDFILE="/home/provproxy/tinyproxy.pid"

Команда запуска прокси-сервера:
По умолчанию там просто указан путь к исполняемому файлу tinyproxy:

TINYPROXYCMD="/usr/sbin/tinyproxy"

Но я хочу эту команду немного подправить.

Запуск сервера при старте системы.

При старте системы все обычно запускается от root‘а, а нам не надо совершенно, чтоб под root‘ом крутились всякие там сервера. Не зря же мы отдельного пользователя делали. Дополняем команду:

TINYPROXYCMD="sudo -u provproxy /usr/sbin/tinyproxy"

В таком виде, скрипт, запускаемый при старте из-под root‘а вызовет tinyproxy от имени нужного нам пользователя. Справедливости ради, надо заметить, что tinyproxy, как любой уважающий себя сервер, умеет сам себе понижать права до определенного пользователя, указанного в файле конфигурации. Но на этом остановимся ниже. На мой взгляд, одно другому не мешает, зато так виднее и жестко задано, от какого пользователя стартовать.

Альтернативный файл конфигурации.

По умолчанию tinyproxy ищет свой файл конфигурации в /etc/tinyproxy.conf, но можно задать альтернативный, в домашнем каталоге пользователя. Делается это путем добавления ключа и пути к файлу. Объединю этот вариант с предыдущим:

TINYPROXYCMD="sudo -u provproxy /usr/sbin/tinyproxy -c /home/provproxy/tinyproxy.conf"

Альтернативный конфигурационный файл в домашнем каталоге.

Раз уж началось с альтернативного файла конфигурации, так давайте его сделаем (от root). Копируем файл /etc/tinyproxy.conf в /home/provproxy/tinyproxy.conf

cp /etc/tinyproxy.conf /home/provproxy/tinyproxy.conf

Далее устанавливаем ему владельца (можно перейти в директорию /home/provproxy перед этим, я перешел — пути будут неполные):

chown provproxy:proxy tinyproxy.conf

И права — пользователю provproxy на tinyproxy.conf нужны права только на чтение, ничего он не пишет в конфигурационный файл, и тем более не пытается исполнить.

chmod 400 tinyproxy.conf

Конфигурирование.

Открываем файл от root‘а и настраиваем параметры прокси-сервера.

Подробно описывается конфингурационный файл

Проверка

Прописываем нужный адрес прокси в браузере:

Проверяем соединение:

Вот тут не показывается, что используется прокси, потому что прокси настроен верно — с отключением via и других заголовков, передающих IP-адрес.

Источники

Tinyproxy, краткая инструкция

Скрипт для автоматического обновления паролей с vpnbook.com не работает.

Старый скрипт для автоматического обновления паролей с бесплатного VPN-сервиса vpnbook.com более не работает. Они весь сайт таки зажабаскриптили и пароль теперь отображается в виде картинки. Но поскольку пока у меня есть хорошие анархисты, милые, предоставляющие доступ к своему сервису нахаляву, я перестал пользоваться vpnbook, и расковыривать этот пиздец мне влом. Расковыряю, конечно, но потом, не сейчас.
И я даже знаю, как это сделать.