Category Archives: Блог
Проверка состояния сетевого устройства (например, eth0) в Linux
Бывает необходимо проверить состояние (статус) того или иного сетевого устройства, например, сетевой карты. Вообще вариантов может быть три:
1. Устройство работает (up)
2. Устройство есть, но не работает в данный момент (down)
3. Устройства нет вообще.
Чтобы определить состояние сетевого устройства, нужно проанализировать вывод команды ifconfig
. Если устройство вообще есть, то оно будет в выводе ifconfig -a
(ключ -a
— все устройства). Если устройство есть, но в данный момент не работает, в выводе ifconfig -a
оно будет, в выводе ifconfig
— нет.
Например, устройство veth1
в данный момент не работает, вывод ifconfig
:
chaosadm@chaos:~# ifconfig lo: flags=73mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10 loop txqueuelen 1 (Local Loopback) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Вывод ifconfig -a
для сравнения:
chaosadm@chaos:~# ifconfig -a lo: flags=73mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10 loop txqueuelen 1 (Local Loopback) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 veth1: flags=4098 mtu 1500 inet 10.10.0.119 netmask 255.255.0.0 broadcast 10.10.0.255 ether 62:4e:2c:ad:06:fa txqueuelen 1000 (Ethernet) RX packets 1034 bytes 93233 (91.0 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 136 bytes 12047 (11.7 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Значит достаточно отфильтровать вывод ifconfig
и ifconfig -a grep
‘ом по имени конкретного сетевого устройства, и заставить grep
посчитать количество строк (ключ -c
):
ifconfig -a | grep eth0 -c
eth0
— имя устройства.
Если количество строк будет 0 — устройства совсем нет.
ifconfig | grep $DEV -c
Если количество строк будет больше 0
— устройство работает (up), если предыдущая команда выдала 1
, а эта команда нет, то устройство есть, но не работает (down). Если используются псевдонимы, то надо использовать полные имена (например, eth0:1
).
Все это дело можно автоматизировать скриптом.
Продумаем коды возврата: 0 — сетевое устройство работает (up), 1 — устройство не работает (down), 2 — устройство не найдено (none), 3 — неправильные параметры скрипта или запрос справки.
Добавим в скрипт дополнительный параметр -s
— если он указан, скрипт не будет выводить сообщений на консоль, а только сигнализировать о статусе сетевого устройства кодом возврата (для использования в других скриптах).
1. Проверяем правильность параметров, выводим помощь:
#!/bin/bash #check network device status #exit codes 0 - device up 1 - device down 2 - none device #3 - help or wrong parameters SLNT=0 print_help() { echo "Use "`basename $0`"[-s]" echo " - network device name, e.g. eth0" echo "-s - silent mode, no console output" } #parameters check and set silent mode if [ $# -eq 0 ]; then echo "Wrong parameters!" echo print_help exit 3 else if [ $# -eq 2 ]; then if [[ "$2" == "-s" ]]; then SLNT=1 else echo "Wrong parameters!" echo print_help exit 3 fi fi fi #print help if [[ "$1" == "--help" || "$1" == "-h" ]]; then print_help exit 3 fi
2. Проверяем наличие устройства вообще:
DEV=$1 # check device exist DOWN=`ifconfig -a | grep $DEV -c` if [ $DOWN -eq 0 ]; then if [ $SLNT -eq 0 ];then echo "Device $DEV: NONE" fi exit 2 fi
3. Проверяем, работает оно или нет:
#check up/down status UP=`ifconfig | grep $DEV -c` if [ $UP -eq 0 ]; then #device down if [ $SLNT -eq 0 ];then echo "Device $DEV: DOWN" fi exit 1 else if [ $SLNT -eq 0 ];then echo "Device $DEV: UP" fi exit 0 fi
На PasteBin
На GitHub
Пример использования в другом скрипте, который организует Network Namespace’ы
Фразочка
Чтоб сеть стоял и ping’и были!
или
Чтоб серв стоял и ping’и были!
PXE-сервер, сервер для загрузки различных ОС через сеть.
Я тут много писал о том, как запускать различные дистрибутивы по сети, однако, не написал, как, собственно, настроить PXE-сервер. Исправляю досадное упущение. Сервер поднимался на Slackware 14.2, на других линуксах должно быть примерно так же, за исключением того, что некоторый софт придется поставить. В Slackware все, кроме TFTP, было уже «из коробки», оставалось только настроить.
PXE-сервер занимает со всеми дистрибутивами довольно много места, у меня был довольно большой раздел /home
, вот в нем я и создал подкаталог pxe
, в котором создал два подкаталога scripts, для хранения скриптов, дополнительных утилит и бэкапов конфигов, и tftp
— будущий корень TFTP-сервера, где завел отдельные подкаталоги для дистрибутивов (distrib
) модулей сетевого загрузчика (modules
) и загрузочного меню (pxelinux.cfg
). В подкаталоге distrib
для каждого дистрибутива по возможности создавался отдельный подкаталог. Пример дерева каталогов на PasteBin
Ставим TFTP-сервер, я поставил такой же, как в статье, на которой основывался, настраивая сервер [1], atftp
, а именно atftp-0.7.1
. Поставил через sbopkg
. На всякий случай готовый пакет
Поставили, теперь создадим файл /etc/tftpd.rules
и запишем в него одну строку:
rg \\ /
Небольшое пояснение: Сетевой загрузчик, о котором будет сказано далее, обращается к TFTP-серверу на удаленной машине, чтобы подгрузить основные файлы — ядра Linux-дистрибутивов, собственные модули, файлы инициализационных RAM-дисков (initrd[.gz]
), файлы образов ISO, дискет или жестких дисков. Файл /etc/tftpd.rules
и правило rg \\ /
нужно, чтобы TFTP-сервер распознал файлы, запрошенные Windows-загрузчиками (т.к. в Windows в качестве разделителя пути используется \
, а в Linux /
).
Команда запуска TFTP-сервера:
in.tftpd -s /home/pxe/tftp --secure -l -v -r blksize -m /etc/tftpd.rules --blocksize 1456
Без параметра -r blksize
у меня TFTP глючил (о чем есть примечание в [1]), --blocksize 1456
несколько ускорил загрузку.
Параметр -s путь
устанавливает корневой каталог TFTP-сервера (там будут лежать сетевой загрузчик, дополнительные модули и сами дистрибутивы, поэтому потребуется достаточно места).
-v
— заставляет сервер писать логи.
Остальные взял из [1]
Просмотр логов:
TFTP пишет логи в /var/log/messages
и некоторые сообщения в /var/log/syslog
.
Соответственно команды:
grep tftp /var/log/messages
и
grep tftp /var/log/syslog
Команды остановки сервера:
pkill in.tftpd
sleep 5
Сам сервер был доступен «из коробки»
Для виндовых дистрибутивов надо поднять Samba. Производим основные настройки в файле /etc/samba/smb.conf
[global] workgroup = WORKGROUP netbios name = PXE server string = Local PXE interfaces = 10.10.0.120 map to guest = bad user security = USER unix extensions = no wide links = yes follow symlinks = yes log file = /var/log/samba/log.%m max log size = 50 dns proxy = No load printers = no show add printer wizard = no printcap name = /dev/null disable spoolss = Yes [printers] comment = All Printers path = /var/spool/samba printable = Yes browseable = No
workgroup
— рабочая группа (поменяйте на свою)
netbios name
— имя компьютера
server string
— описание (видно в «Сетевом окружении» из Windows)
interfaces
— сетевой интерфейс, который будет прослушивать Samba-сервер. Можно выставить имена сетевых устройств (например, eth0) или задать IP
Делаем доступ к каталогам, открытым в Samba анонимным (без логина и пароля):
map to guest = bad user
security = USER
Следующие 3 строки нужны, чтоб Samba стал поддерживать символические ссылки. У меня, например, дистрибутивы Windows 7 и 10 фактически лежат в каталоге FTP-сервера, а в каталоге дистрибутивов созданы символически ссылки, расшаренные в Samba:
unix extensions = no
wide links = yes
follow symlinks = yes
log file
— куда писать лог
max log size
— и его максимальный размер
По умолчанию отключаем DNS-proxy и доступ к принтерам:
dns proxy = No
load printers = no
show add printer wizard = no
printcap name = /dev/null
disable spoolss = Yes
Секцию [printers]
оставляем по умолчанию (все равно все настройки принтеров вырублены в [global]
, да и принтеров у меня на этом сервере не было).
Для запуска Samba в Slackware достаточно дать права на исполнение файлу /etc/rc.d/rc.samba
и дать команду на запуск:
chmod 744 /etc/rc.d/rc.samba
/etc/rc.d/rc.samba start
Остановка:
/etc/rc.d/rc.samba stop
Если не надо, чтоб сервер Samba стартовал при загрузке ОС, отбираем права на исполнение:
chmod 644 /etc/rc.d/rc.samba
Шары расписаны отдельно для конкретных дистрибутивов в соответствующих заметках, полный пример конфига на PasteBin
NFS нужен для запуска на удаленной машине некоторых дистрибутивов Linux. Смотрите подробности в соответствующих разделах, посвященных данным дистрибутивам.
В Slackware он так же шел «из коробки», а в конфиге нужно было прописать только конкретные каталоги, открытые для доступа по NFS.
Для запуска NFS нужно поставить права на исполнение следующим файлам:
/etc/rc.d/rc.nfsd
/etc/rc.d/rc.rpc
chmod 744 /etc/rc.d/rc.nfsd
chmod 744 /etc/rc.d/rc.rpc
и запустить NFS-сервер:
/etc/rc.d/rc.nfsd start
Остановка NFS-сервера:
/etc/rc.d/rc.nfsd stop
Если не хотите, чтоб NFS автоматически поднимался при загрузке ОС, отберите права на исполнение:
chmod 644 /etc/rc.d/rc.nfsd
chmod 644 /etc/rc.d/rc.rpc
Полный пример конфига NFS (изменения вносятся в файл /etc/exports
)
Загрузка по сети устроена так, что BIOS (или EFI) целевой машины передает управление специальной микропрограмме-загрузчику, встроенному в микросхему сетевой карты. Тот пытается получить IP по DHCP, а потом подгрузить с машины, выдавшей IP, основной сетевой загрузчик. В некоторых случаях, если в сети уже есть другой DHCP это может вызвать глюки при загрузке (подробнее см. [1], там описаны конфигурации для сервера, если в сети, например, присутствует маршрутизатор CISCO, раздающий IP по DHCP).
Итак, DHCP надо настроить.
У меня с установкой соответствующего софта опять же, проблем не было, DHCP-сервер шел вместе с ОС, оставалось только настроить.
Копируем старый конфиг куда-нибудь, у меня DHCP до этого был не настроен, потому конфиг был пустой
Для корректной работы сервера, он должен быть сохранен под именем /etc/dhcpd.conf
.
Если не нужно, чтобы DHCP-сервер стартовал постоянно, а, например, только на время работы PXE, то делаем так:
Старт DHCP-сервера:
echo "Copy DHCP daemon PXE config..."
#pxe config must be in current dir.
CURDIR=`pwd`
cp "$CURDIR/dhcpd.conf" /etc/dhcpd.conf
echo "Starting DHCP daemon..."
dhcpd
sleep 5
Остановка DHCP-сервера:
echo "Stopping DHCP daemon..."
pkill dhcpd
sleep 5
echo "Restore DHCP daemon original config file..."
#original config must be in current dir.
CURDIR=`pwd`
cp "$CURDIR/dhcpd.conf.orig" /etc/dhcpd.conf
Объединим все команды для запуска PXE-сервера в один скрипт start-pxe
:
#!/bin/bash
echo "Starting TFTP server..."
in.tftpd -s /home/pxe/tftp --secure -l -v -r blksize -m /etc/tftpd.rules --blocksize 1456
sleep 5
echo "Copy DHCP daemon PXE config..."
#pxe config must be in current dir.
CURDIR=`pwd`
cp "$CURDIR/dhcpd.conf" /etc/dhcpd.conf
echo "Starting DHCP daemon..."
dhcpd
sleep 5
#winxp samba
echo "Starting samba server"
chmod 744 /etc/rc.d/rc.samba
/etc/rc.d/rc.samba start
sleep 5
#NFS for live linux
echo "Starting NFS..."
chmod 744 /etc/rc.d/rc.nfsd
chmod 744 /etc/rc.d/rc.rpc
/etc/rc.d/rc.nfsd start
sleep 5
echo "Complete!"
И для остановки (stop-pxe
):
#!/bin/bash
echo "Stopping TFTP server..."
pkill in.tftpd
sleep 5
echo "Stopping DHCP daemon..."
pkill dhcpd
sleep 5
echo "Restore DHCP daemon original config file..."
#original config must be in current dir.
CURDIR=`pwd`
cp "$CURDIR/dhcpd.conf.orig" /etc/dhcpd.conf
echo "Stopping samba server"
/etc/rc.d/rc.samba stop
chmod 644 /etc/rc.d/rc.samba
sleep 5
#stop NFS
echo "Stopping NFS..."
ip netns exec provns /etc/rc.d/rc.nfsd stop
chmod 644 /etc/rc.d/rc.nfsd
chmod 644 /etc/rc.d/rc.rpc
sleep 5
echo "Complete!"
start-pxe
и stop-pxe
на PasteBin.
На самом деле, загрузчик SYSLINUX — это целый комплекс загрузчиков, на все случаи жизни, здесь есть и сетевой — PXELINUX, и загрузчик для ISO-образов ISOLINUX и просто загрузчик ОС с жесткого диска. Пока нам потребуется только сетевой. SYSLINUX представляет собой операционную систему в миниатюре, загрузчик с помощью специальных команд, прописываемых в загрузочном меню, может выполнять специальные функции, сохраняемые в исполняемых файлах особого формата — модулях загрузчика. Обычно они имеют расширение *.c32
, и плюс некоторые специальные файлы, например модуль memdisk
, загружающий в память ISO-, Floppy- или HDD-образы.
Получение загрузчика: Проще всего его получить с официального сайта, скачав специальным скриптом. Скрипт разберет полученный архив на части, отдельно найдет в скачанном архиве модули *.32
, memdisk
и сетевой загрузчик pxelinux.0
.
#!/bin/bash
SYSLINUXNAME="syslinux-4.02"
SYSLINUXADDR="https://www.kernel.org/pub/linux/utils/boot/syslinux/4.xx/$SYSLINUXNAME.tar.gz" #на Хабре использовали эту, пока оставим
WORKDIR="/tmp"
SERVERDIR="/home/pxe/tftp"
cd $WORKDIR
wget $SYSLINUXADDR
tar -xf "$SYSLINUXNAME.tar.gz"
cd "$SYSLINUXNAME/"
find ./ -name "memdisk" -type f|xargs -I {} cp '{}' $SERVERDIR
find ./ -name "pxelinux.0"|xargs -I {} cp '{}' $SERVERDIR
find ./ -name "*.c32"|xargs -I {} cp '{}' $SERVERDIR
В оригинальной статье [1], была использована версия 4.02, если подумаете использовать какую-то другую, достаточно поменять данные в строке SYSLINUXNAME
и/или SYSLINUXADDR
Далее перенесем все файлы *.c32
и memdisk
в подкаталог modules
(чтоб не мозолили глаза), а сетевой загрузчик pxelinux.0
оставим в корневом каталоге TFTP-сервера.
Теперь пишем минимальное тестовое меню, и проверяем запуск системы.
Добавим в меню загрузку с первого жесткого диска и перезагрузку машины:

Меню по умолчанию описывается в файле default
, находящемся в подкаталоге pxelinux.cfg
PXE-сервера, там же находятся и дополнительные меню, вызываемые из основного.
Пример тестового меню на PasteBin
Сначала мы подгружаем специальный модуль пользовательского интерфейса modules/menu.c32
, который отвечает за загрузку текстового интерфейса меню (подходит для любых компьютеров, даже самых слабых)
ui modules/menu.c32
PROMPT 0
— отключение специального приглашения командной строки.
menu title ChaosServer PXE boot menu
— заголовок меню.
Далее идут описания конкретных пунктов меню:
LABEL bootlocal menu label Boot from first HDD kernel modules/chain.c32 append hd0 0 timeout 11120
LABEL reboot menu label Reboot kernel modules/reboot.c32
параметр timeout
включает отсчет времени до загрузки определенного пункта меню 1 единица после параметра timeout
составляет 0.1
с
chain.c32
— переключает на следующий загрузчик (grldr
, ntldr
или просто на загрузчик, установленный на разделе HDD)
reboot.c32
— перезагрузка компьютера
menu.c32
— при использовании в меню, может загружать дополнительные меню (подменю), или производить переход назад/между меню. Пример использования:
Загрузка меню с утилитами Acronis:
LABEL acronis menu label Acronis utilities kernel modules/menu.c32 append pxelinux.cfg/acr
Возврат в основное меню:
LABEL back menu label Back to main menu kernel modules/menu.c32 append pxelinux.cfg/default
memdisk
— специальный модуль, выполненный как псевоядро Линукс, может загружать образы ISO, HDD или дискет в оперативную память и передавать им дальнейшую загрузку. Пример использования:
LABEL acronis2011 menu label Acronis True Image 2011 kernel modules/memdisk initrd distrib/acr/acronis2011/loader.iso append iso raw
— createiso
— скрипт для создания ISO-образов
— mknetboot.sh
(скрипт для Puppy Slacko и подготовки к PXE-запуску этого дистрибутива)
— syslinux-install.bash
— скрипт для скачивания SYSLINUX
конкретными дистрибутивами Windows, Linux и другими (копия)
1. Загрузочный сервер — как загрузочная флешка, только сервер и по сети Копия в PDF Копия в DOC
— atftp 0.7.1
(готовый пакет для Skackware)
— Конфиги
— Меню
— Скрипты
— Дополнительные утилиты
— Модули PXELINUX, загрузчик, структура каталогов
Вывод на экран и сохранение в файл дерева каталогов в Linux
Вывести на экран дерево каталогов в Linux можно следующей командой:
tree -d -R
-d
— выводит только каталоги
-R
— выводить рекурсивно (т.е. до последнего вложенного каталога)
Если вместо -d
использовать параметр -a
, команда выведет и все файлы.
Команда начинает работу с текущего каталога.
Для записи в файл достаточно использовать стандартный метод перенаправления, например:
tree -d -R >/tmp/tree.txt
Если вы находитесь в каталоге, скажем /home/user
, утилита запишет в файл /tmp/tree.txt
все дерево каталогов, начиная с /home/user

Простой скрипт, добавляющий текущий каталог в архив.
1. Добавить текущий каталог в архив со всеми подкаталогами и файлами.
Т.е., если вы находитесь в каталоге /home/user/directory
, то скрипт должен добавить в архив сам каталог, и все содержимое.
2. Добавить только содержимое (т.е. в архиве присутствует только содержимое каталога, но не сам каталог).
3. Вывод справки об использовании скрипта по ключу -h
или --help
Чтобы заархивировать текущий каталог разными способами, надо добавить параметр. Пусть скрипт, запущенный без параметров, архивирует текущий каталог вместе с ним самим, а скрипт, запущенный с параметром -nc
(no catalog), архивирует только содержимое. Еще надо вывести помощь, а если подсунули какой-то другой параметр, то отругаться и вывести помощь.
Уточнение. Архив, из-за алгоритма работы архиватора, не сможет находиться в текущем каталоге, вне зависимости от того, с самим каталогом создается архив, или без. Архив надо создать в каталоге уровнем выше, а соответственно, предусмотреть ситуацию, когда пользователь вызывает скрипт из корневого каталога (выше него нет ничего).
Уточнение #2. Поскольку, про имя архива ничего не сказано, имя архива будет текущий_каталог.tar.gz
1. Поскольку, помощь будет вызываться в двух случаях, напишем отдельную функцию, чтоб вызывать помощь, когда нужно:
print_help() { echo "Add current directory and subdirectories to tar.gz archive" echo "Use "`basename $0`" [-nc]" echo "[-nc] - add only content current directory (and subdirectories)." echo echo "Archive name == current directory name." echo "Archive will be created to up-directory." exit 1 }
2. Проверяем вызов помощи пользователем (в параметрах скрипта задано -h
или --help
):
if [[ "$1" == "-h" || "$1" == "--help" ]]; then print_help fi
3. Проверяем, не запущен ли скрипт в корневом каталоге (/
):
CURDIR=`pwd` if [ "$CURDIR" == "/" ]; then echo "Oh, no! It's root directory!" exit 1 fi
Пояснение: ``
обратные кавычки — те, которые, на клавише Ё, отправляют вывод работы команды в переменную. pwd
выводит текущую директорию
4. Формируем имя архива и путь к нему и получаем имя текущего каталога
DIRNAME=`basename $CURDIR`
ARHNAME="../"$DIRNAME".tar.gz"
Пояснение: команда basename
без дополнительных параметров, отрезает весь путь от имени файла, т.е. выводит на консоль только имя файла без относительного или абсолютного пути.
5. Если скрипту не заданы аргументы:
if [ $# -ne 1 ]; then
Пояснение: системная переменная $#
хранит количество аргументов скрипта, заданных в командной строке.
запускаем архиватор, для создания архива вместе с текущим каталогом:
tar -czvf $ARHNAME "../"$DIRNAME
Пояснение: tar
сам обрежет символы ../
и добавит, что надо.
6. Если параметр #1 скрипта присутствует, то проверяется, равен ли он -nc
.
else if [ "$1" == "-nc" ]; then
7. Если да, вызывается архиватор, архивирующий содержимое текущего каталога (без самого каталога):
tar -czvf $ARHNAME "."
8. Иначе, выводится сообщение о недопустимом значении параметра и помощь по использованию скрипта:
else echo "Wrong parameter(s)!" echo print_help
Дистрибутивы PXE
Это техническая страничка со списком дистрибутивов нашего PXE-сервера и ссылками на описание конкретных дистрибутивов. Страничка пополняется в зависимости от производственной необходимости, наличия оборудования, для которого понадобился тот или иной дистрибутив и времени.
Acronis utilities
— Acronis True Image 2011
— Acronis True Image 2015
— Acronis Disk Director 12
— Acronis Disk Director 10 (small DOS version)
— Acronis True Image Enterprise 8 (small DOS version)
Подробности об установке на сервер и меню PXELINUX (копия)
Hiren’s Boot CD 15.2 (копия) и бонус, разные утилиты для подбора паролей (копия)
Linux
— Puppy Slacko 5.5:
* Описание и скрипт для подготовки дистрибутива копия (запускать из Puppy, загрузившись с оригинального диска или на виртуальной машине)
* Оригинальный ISO.
* Мой мод оригинального ISO (добавлен mc,
tcplay
и скрипт в каталоге netboot
)
* Готовый архив для PXE (добавлен mc,
tcplay
и скрипт в каталоге netboot
)
* Пункт меню PXE сервера
— INX 1.1 (Is Not X) (копия)
— Меню для всего раздела Linux: Mega.nz PasteBin
Примечание: Как в Puppy выйти из иксов, если они глючат (копия)
Windows
— Windows XP PE (копия) с возможностью установки из нее Windows XP
— Windows XP PE Very Small (быстро загрузиться и посмотреть/подправить что-нибудь на жестком диске, можно скачать по ссылке выше)
— Windows XP Unattended install (копия). Альтернативный способ установки Windows XP из специализированного Linux-окружения.
— Windows 7 PE (копия). С возможностью установки из нее Windows 7 и выше.
— Boot Windows from HDD (копия) — специальный ISO-образ с Grub4Dos для загрузки Windows XP/Vista/7/8/10 с жесткого диска
— Boot Windows from HDD (DOS method) (копия) — альтернатива предыдущему пункту, только загрузчик вызывается из DOS-окружения.
— Меню всего раздела на Mega.nz PasteBin
Примечание: Альтернативный способ установки Windows 7/Vista/8/10.
Если не загрузилась Windows 7 PE или в ней что-то не работает.
1. Грузимся в какой-нибудь Linux, который видит сеть и умеет в Samba или FTP (FTP, естественно, надо поднять предварительно на сервере и скопировать в каталог, доступный через FTP, дистрибутив винды).
2. Делим диск и копируем винду на целевую машину, как это описано здесь (копия). Понятно, что вместо флешек с виндами используем FTP, Samba и возможности PXE-сервера.
3. Пользуемся Boot Windows from HDD или Boot Windows from HDD (DOS method) чтобы запустить установщик винды на целевой машине.
И ТЕЛЕМАРКЕТ!
Старые ОС.
Сделано от нехрен делать и шутки для.
— Windows 1.03
— Windows 2.03
— Windows 3.11 with MS Office and other programs
— Windows 98
Выход в чистую консоль в Puppy Slacko
Чтобы выйти из X (графического окружения) Puppy Slacko, и превратить его в полноценный консольный дистрибутив, например, если иксы глючат, достаточно нажать сочетание клавиш Ctrl+Alt+Backspace. Другой способ завершить иксы аварийно — переключиться в первую консоль (Ctrl+Alt+F1) и нажать Ctrl+C
Можно просто переключиться в консоль стандартным линуксовым способом, нажав Ctrl+Alt+F2 или Ctrl+Alt+F3 (это независимые консоли, кто не знает), тогда иксы останутся висеть в памяти, к ним можно вернуться, нажав Ctrl+Alt+F4.
Вводим логин root
, пароль woofwoof
и попадаем в голую консоль.
Запуск System Rescue CD по сети (PXE).
System Rescue CD — live CD, предназначенный для восстановления Linux-систем, основан на Gentoo, в комплекте довольно много полезностей. Можно использовать и как небольшой Live-дистрибутив Linux. Имеет графическую оболочку на Xfce (надо вызывать вручную командой startx
, или через соответствующий параметр при загрузке). Решил добавить на наш PXE-сервер. Пока поставил не самую последнюю версию — 5.3.2, т.к. у этой версии есть возможность загружаться с 32 и 64-разрядным ядром (в более новых версиях поддержку x86 выпилили).
1. Распаковываем ISO-образ
2. Создаем каталог на PXE-сервере, например /home/pxe/tftp/distrib/srcd/
3. Копируем в этот каталог файлы sysrcd.dat
, sysrcd.md5
из корня, rescue32
, rescue64
и initram.igz
из каталога isolinux
ISO-образа.
Примечание: sysrcd.dat
— сжатый Squash FS образ файловой системы ОС, при запуске скрипт в initrd проверяет его целостность по контрольной сумме, хранящейся в sysrcd.md5
.
4. Открываем каталог для доступа по NFS, добавляем в /etc/exports
строчку:
/home/pxe/tftp/distrib/srcd/[пробел или табуляция]*(ro,no_subtree_check,all_squash,insecure)
5. Рестартируем NFS-сервер.
LABEL rescue32mem
menu label System Rescue CD x86 kernel (memory cache)
kernel distrib/srcd/rescue32
initrd distrib/srcd/initram.igz
append dodhcp nfsboot=10.10.0.120:/home/pxe/tftp/distrib/srcd/ nomodeset setkmap=us docache
dodhcp nfsboot=10.10.0.120:/home/pxe/tftp/distrib/srcd/
— указание получить IP от DHCP и NFS-каталог с соответствующего сервера.
nomodeset
— не использовать графические драйверы ядра для загрузки в консоль. Загрузится в нормальную консоль 80×25
setkmap=us
— установить английскую раскладку клавиатуры (иначе будет спрашивать при загрузке)
docache
— подгрузить образ файловой системы (sysrcd.dat
) в память. Требуется не менее 512 Мб оперативной памяти, но без этого параметра у меня System Rescue CD упорно не хотел грузиться (хотя, в итоговом меню оставил варианты и без docache
с целью потом поэкспериментировать на других машинах).
Для запуска с 64-разрядным ядром меняем rescue32
на rescue64
.
Под катом дополнительные утилиты и скриншоты
— System Rescue CD 5.3.2 (с официального сайта)
— Архив для PXE
— freedos.img
— Меню: с Mega.nz на PasteBin
Загрузка INX по сети (PXE)
INX (расшифровывается как Is Not X), небольшой консольный, как ясно из названия, Live-дистрибутив Linux, основанный на Ubuntu. Обычно для разных целей я пользуюсь Puppy Slacko, но, как выяснилось, иметь live-дистрибутив без иксов, тоже полезно 🙂 В Слаке иксы на одной из машин безбожно заглючили. Всяческие DSL и тем более Linux For Scratch (читай самодельный дистрибутив) мне не подходили, потому что с ними может оказаться еще больше возни, или «из коробки» заглючит что-нибудь другое, или того хуже — сам чего-нибудь забудешь и недоложишь. А этот вроде выглядел вполне неплохо. В комплекте много всего, даже браузеры и консольные игры, есть
mc
, да и по заверениям разработчиков, требует он менее 100 Мб оперативной памяти, если загружен в обычном режиме. Поддерживается и режим to RAM, но тогда, как я понял, весь сжатый Squash FS образ системы грузится в память, и надо уже как минимум 200 Мб.С интернетом, правда, небольшой баг. Надо вручную подправлять
/etc/resolv.conf
, иначе не будет DNS.
sudo mcedit /etc/resolv.conf
и меняем непонятный DNS, например на 8.8.8.8
Вот уж некоторые, блин, линуксоиды профессиональные админы. Пишут инструкции, иногда упуская мелкие, но важные детали, которые, особенно если первый раз сталкиваешься, могут доставить неудобств. К вопросу, почему я стараюсь все подробно расписывать, во всяком случае, те грабли, на которые сам наступил.
1. Распаковываем или монтируем ISO-образ. (скачать с официального сайта)
2. Создаем каталог для дистрибутива там, где хранятся дистрибутивы PXE-сервера, в моем случае /home/pxe/tftp/distrib/linux/inx/
3. Копируем из подкаталога casper
ISO-образа в созданный каталог файлы vmlinuz
initrd.gz
4. Создаем в /home/pxe/tftp/distrib/linux/inx/
подкаталог casper
5. Копируем в /home/pxe/tftp/distrib/linux/inx/casper
из каталога casper
ISO-образа файл filesystem.squashfs
Этот файл обязательно должен лежать в подкаталоге casper
каталога, который будет указан как nfsroot
, иначе ядро его не найдет, и загрузка не получится.
Да, это была причина секунды ворчания. Целый час проковырялся. Об NFS ниже.
Для загрузки INX, кстати, как и других убунтовых дистрибутивов, по сети потребуется NFS-сервер. Тут я оставлю подробности, т.к. устанавливается он в разных Линуксах немного по-своему, а в Slackware, которая у меня, он шел «из коробки». Надо было только поставить права на исполнение двум скриптам /etc/rc.d/rc.nfsd
и /etc/rc.d/rc.rpc
.
После того, как сервер установлен, необходимо изменить файл /etc/exports
чтобы открыть доступ к каталогу с дистрибутивом по NFS:
/home/pxe/tftp/distrib/linux/inx/[пробел или табуляция]*(ro,async,no_subtree_check,no_wdelay,insecure_locks,no_root_squash,insecure)
(пере)запускаем NFS-сервер.
Добавляем дистрибутив в меню PXE-сервера.
LABEL inx
menu label INX
kernel distrib/linux/inx/vmlinuz
append root=/dev/nfs boot=casper netboot=nfs nfsroot=10.10.0.120:/home/pxe/tftp/distrib/linux/inx/ username=inx hostname=inx userfullname="inx-user" initrd=distrib/linux/inx/initrd.gz vga=normal --
LABEL inxmem
menu label INX to RAM
kernel distrib/linux/inx/vmlinuz
append root=/dev/nfs boot=casper netboot=nfs nfsroot=10.10.0.120:/home/pxe/tftp/distrib/linux/inx/ username=inx hostname=inx userfullname="inx-user" initrd=distrib/linux/inx/initrd.gz vga=normal toram --
В более удобочитаемом виде на PasteBin
В качестве корневого каталога ОС (параметр root
) указывается устройство /dev/nfs
boot=casper
— указание использовать Live-режим и искать основную ОС в файле сжатой файловой системы.
netboot=nfs
— указание произвести загрузку по сети, используя NFS
nfsroot=10.10.0.120:/home/pxe/tftp/distrib/linux/inx/
— указание адреса (замените 10.10.0.120
на свой) и каталога на сервере (указывается с корня сервера).
username
, hostname
и userfullname
— соответственно, параметры для указания имени пользователя, имени компьютера и полного имени пользователя. Можно поставить свои, я оставил те, что были в конфиге isolinux из ISO-образа
initrd=distrib/linux/inx/initrd.gz
— указание, где искать инициализационный RAM-диск (задается относительно корня TFTP-сервера, т.к. initrd грузится по TFTP).
vga=normal
установка разрешения консоли (80×25 символов, ЕМНИС), или можно подсмотреть код оригинального в isolinux.cfg
на диске, или, например, загрузившись с диска, почитать справку на этот счет.
toram
— загружать сжатый образ файловой системы (filesystem.squashfs
) целиком в память. Без этого параметра — обращаться к нему по необходимости. Не знаю точно, работает ли параметр с загрузкой по сети, но вроде с ним загрузка проходит медленнее. Значит, похоже, если параметр toram
не указан, то filesystem.squashfs
по необходимости подчитывается из сети, и такой режим требует меньше памяти.
Меню сетевых программ
А вот и браузер
Ссылки
Делаем аварийный загрузочный образ WinPE на базе Windows 7. (с возможностью установки Win7/8/10)
В прошлых заметках я рассказывал о том, как загрузить WinPE XP по сети и установить из нее Windows XP. Теперь делаю WinPE на базе Windows 7
— Компьютер, с установленной Windows 7 🙂
— Достаточное место на HDD, со всеми потрохами этот процесс сожрал ~50Гб на диске.
— Образ Windows Automated Installation Kit (WAIK)
— WinBuilder — небольшая утилита, позволяющая автоматизировать процесс создания образа. О ней ниже.
— Чистый (!) образ установщика какой-нибудь одной версии Windows 7, сборки разной степени колхозности, а так же образы дисков все-в-одном (AIO) не подойдут. Скорее всего WinBuilder прекратит работу с какими-нибудь неудобоваримыми глюками. Поскольку я собрался делать образ x86 (32-разрядный), то и скачал Windows 7 Ultimate x86 с рутрекера.
— Универсальные наборы драйверов для сети, чипсетов и устройств хранения данных. О них ниже.
— Какая-нибудь виртуальная машина для тестирования полученного образа. У WinBuilder в комплекте есть QEMU, но желательно поставить VMWare, в нужный момент WinBuilder ее «подхватит», создаст свою виртуалку и запустит на ней образ
-cdrkit в Linux, для создания ISO-образа.
Минус — способ требователен к памяти, понадобится хотя бы 1 Гб RAM
— Скрипт createiso-gfd на PasteBin
— Урезанный Far
— Плагин для установки Far в сборку
— BAT-файл для установки Windows 7
— Скрипт для установки файла в сборку
— Исправление для плагина Wallpaper
—Загрузчик и menu.lst
— WinBuilder SE (чистый, без плагинов)
— Полная версия
Из бестолкового словаря
ГЕЙМЕР:
1. Нелюбимый коллективом инженер-метролог.
2. Проверяющий приборы учета из ЖКХ, Горгаза, электросети.
Заодно нашел кучу утилит для подбора паролей в Windows.
Утилиты не первой свежести, но запускаются из WinPE (надо положить их в шару, если использовать PXE), некоторые умеют работать с ОС на диске.
На некоторые ругаются антивирусы, так что архив запаролен. Пароль:111
Hiren’s Boot CD 15.2 и загрузка его по сети (PXE)
HBCD, как я уже говорил — «очень полезный горшочек», набор утилит для всяческого восстановления, форматирования, установки винды, и т.д.
Последняя версия, несмотря на то, что из нее убрали весь пиратский софт, стала только больше, и весит 700 Мб, хотя я помню версии по 250 Мб. Но можно распотрошить CD и грузить его по частям. Распакуем образ и приступим.
— Mini Windows XP. Аж целая заметка есть по этому поводу (копия).
Готовый образ
— Very Mini Windows XP. Образ по ссылке выше. Хоть этого и не было в оригинале, добавлю.
Готовый образ
— DOS Programs. Как вытащить DOS’овую часть из HBCD. (копия)
Готовый образ
— Все раскладываем по отдельным каталогам.
Это Linux-окружение для всяких работ с диском (делением на разделы, форматированием и т.д.). Но надо сказать, слегка капризное в отношении загрузки по сети.
Поскольку, программе мало ядра и initrd, лучше создать отдельный ISO-образ с ней. В каталог iso_root
надо скопировать каталог pmagic
из \Boot
образа HBCD. Также нужно добавить загрузчик и составить соответствующие конфиги.
Вот переписанный с конфига HBCD конфиг для isolinux
:
isolinux.cfg
PasteBin (Mega.nz) — основное меню диска
other.cfg
PasteBin (Mega.nz) — дополнительные варианты загрузки, есть утилиты недоступные из основной конфигурации.
Главное, не забыть в каждую конфигурацию загрузки добавить опцию livemedia noeject
, без нее не видит файлов из своей ФС.
Пункт меню:
LABEL pm menu label Parted Magic kernel modules/memdisk initrd distrib/hbcd/pm/pm.iso append iso
— Windows Memory Diagnostic, загружается, как обычный образ загрузочного диска. В качестве ядра указываем memdisk
, а в качестве initrd
— wmemtest.gz
LABEL wm menu label Windows memory diagnostic kernel modules/memdisk initrd distrib/hbcd/wmemtest/wmemtest.gz
— MemTest86+ (настройки те же)
Грузим, как обычный Linux-дистрибутив.
LABEL ch menu label NT/2000/Vista/7 password changer kernel distrib/hbcd/ntpr/chntpw initrd distrib/hbcd/ntpr/chntpw.gz
— Kon-Boot (Password recovery)
Аналогично образам дискет.
1. Из \Boot
HBCD копируются два файла SeagatDW
и SeagatDW.gz
в отдельный каталог.
2. Переименовываем строчными буквами (т.е. в sgdw
и sgdw.gz
)
3. Грузим, как обычный Linux-дистрибутив.
LABEL sd menu label Seagate Disk Wizard kernel distrib/hbcd/seagate/sgdw initrd distrib/hbcd/seagate/sgdw.gz append rw ramdisk_size=32768 acpi=off quiet noapic mbrcrcs on vga=788
Строчку append
копируем из конфига HBCD.
1. Лишить оригинального расширения .bin
, т.е. переименовать в plpbt
.
2. Положить в отдельный каталог.
2. Прописать его в параметре kernel
LABEL pl menu label Plop boot manager kernel distrib/hbcd/plop/plpbt
— Smart Boot manager.
Грузится, как сжатый образ с помощью memdisk
.
— Fix «NTLDR is missing»
Аналогично.
— Darik’s Boot and Nuke — Hard Drive Eraser
Аналогично.
— HBCD 10.1 DOS Image
— HBCD 8.7 DOS Image
Загружаются, как ISO-образы.
Старые образы:
Запуск Acronis по сети (PXE).
Аварийные диски Acronis (Disk Director и True Image), наверное, самые простые для запуска по сети. Нужен оригинальный ISO, который можно вытащить из дистрибутива, memdisk и не забыть прописать append iso raw.
Примерно как-то так:
LABEL acronisdd menu label Acronis Disk Director 12 kernel modules/memdisk initrd distrib/acr/acronisdd/acronisdd.iso append iso raw
Для слабых машин подойдет Acronis True Image 2011, там образ маленький ~122 Мб, а для самых слабых можно изготовить образы DOS с DOS-версиями True Image и Disk Director, примерно вот таким способом (копия)
Образы DOS для PXE
— Minimal DOS Image (img, gzip)
— Minimal DOS Image (ISO)
— DOS Live CD (ISO)
— DOS Utilities (для работы, ключик только своим)
— Big DOS Image (не дам)
— Образ загрузочной дискеты FreeDOS
PROMPT 0 ui menu.c32 menu title DOS programs and images LABEL back menu label Back to main menu kernel modules/menu.c32 append pxelinux.cfg/default LABEL dos menu label Minimal DOS image kernel modules/memdisk initrd distrib/dos/min/dos.gz append harddisk LABEL doslivecd menu label DOS Live CD kernel modules/memdisk initrd distrib/dos/doslivecd/doslivecd.iso append iso LABEL freedos menu label FreeDOS boot disk kernel modules/memdisk initrd distrib/dos/freedos/freedos.img append floppy LABEL dosutils menu label DOS Utilities kernel modules/memdisk initrd distrib/dos/utils/dosutils.img.gz append harddisk LABEL bigdos menu label Big DOS Image kernel modules/memdisk initrd distrib/dos/big/bigdos.img.gz append harddisk
Забавные образы PXE
Mini Windows 98:

Win98 (ключик просите, кому надо)
Windows 1.03:

Windows 1.03
Windows 2.03:

Paint:

Windows 2.03
Создание файла нужного размера в Windows 7 и выше.
В Linux создать файл нужного размера не просто, а чрезвычайно просто. Есть утилита dd
и устройство /dev/zero
, которое отгрузит вам нужное количество символов с кодом 0
.
Например, создадим файл размером 20 Мб:
dd if=/dev/zero of=file.zero bs=20M count=1
В винде (7 и выше) появилась утилита fsutil
, способная сделать аналогичную операцию:
fsutil file createnew <filepath> <size>
где:
<filepath>
— путь к файлу
<size>
— размер файла в байтах
Правда, у этой утилиты есть 2 неудобных момента:
1. Она хочет права администратора, и с этим ничего не поделать штатными средствами, но можно, например поделать моей утилитой wsudo (копия)
2. Надо указывать размер файла в байтах, что не очень удобно. А вот с этим вполне можно бороться, написав батник-обертку, который будет обрабатывать еще один параметр — модификатор единиц измерения (килобайты или мегабайты), вычислять нужное значение в байтах и вызывать fsutil
.
1. Проверяем параметры CMD-файла:
@echo off if "%~1" EQU "" ( echo No arguments. Use "%~n0%~x0 <filename> <size> [K|M]" exit /b 1 )
символ ~
удаляет кавычки из переменной %1
(первый аргумент командной строки CMD/BAT файла), if
сравнивает значение переменной в кавычках с пустыми кавычками. Если первого аргумента нет, выводится соответствующее сообщение и скрипт завершает работу с кодом возврата 1 (exit /b 1
)
2. Выводим справку по использованию CMD-файла:
if "%~1" EQU "/?" ( echo Use "%~n0%~x0 <filename> <size> [K|M]" exit /b 1 )
В переменной %0
хранится путь к самому CMD-файлу, конструкция %~n0
обрезает полный путь до имени файла (без расширения), а %~x0
— оставляет одно расширение (с начальной точкой). Конструкции %~n<номер>
и %~x<номер>
можно использовать только с аргументами командной строки.
Запуск CMD-файла без параметров:
zerofile.cmd
No arguments. Use "zerofile.cmd <filename> <size> [K|M]"
и с параметром вывода справки:
zerofile.cmd /?
Use "zerofile.cmd <filename> <size> [K|M]"
3. Теперь проверим, указан ли в имени файла путь к нему, если не указан — добавим к имени файла текущий каталог:
if "%~1" EQU "%~n1%~x1" ( set FILENAME=%CD%\%~1 ) else ( set FILENAME=%~1 )
Если имя файла (первый параметр) равно этому же имени и расширению, значит, путь не указан, в качестве пути добавляем текущий каталог, и записываем его в переменную FILENAME
.
4. Установим удобные имена переменных для остальных параметров — размера файла и единицы измерения:
set FILESIZE=%~2
set ED=%~3
5. Теперь надо проверить, является ли размер файла целым положительным числом.
Штатных проверок в языке CMD/BAT файлов не предусмотрено, но можно пойти на хитрость. Известно, что команда set
способна делать арифметические действия над числами и переменными (надо установить ключ /a
и написать выражение в кавычках). Если в переменной встретится не число, то set
автоматически будет считать значение переменной равным 0
. Соответственно, в результате получится значение с учетом этого. Значит достаточно сделать с переменной какое-то действие, которое не приведет к изменению значения (например, отнять и прибавить единицу), а потом проверить, получился ли положительный результат.
set /a "RES=FILESIZE+1-1" if %RES% LEQ 0 ( echo Can't create file with size %RES% exit /b 2 )
6. Проверяем, какая единица измерения установлена в 3 параметре CMD-файла. Если в качестве параметра установлена K(k)
— килобайты, M(m)
— мегабайты. Что-то еще или ничего — размер файла задается в байтах.
if "%ED%" EQU "K" goto :kb
if "%ED%" EQU "M" goto :mb
if "%ED%" EQU "k" goto :kb
if "%ED%" EQU "m" goto :mb
goto :create
7. Вычисляем размер файла в байтах:
:kb set /a "RES=FILESIZE*1024" set ST=%FILESIZE% Kb goto :create :mb set /a "RES=FILESIZE*1024*1024" set ST=%FILESIZE% Mb
8. Выводим summary и создаем файл нужного размера:
:create echo Creating file: %FILENAME% if "%ST%" EQU "" ( echo Size: %RES% bytes ) else ( echo Size: %ST% [%RES% bytes] ) wsudo fsutil file createnew "%FILENAME%" %RES%
CMD-файл целиком (на GitHub)
CMD-файл целиком (на PasteBin)
wsudo
(с GitHub)
1. Фишки батников (Копия в PDF)
2. CMD/BAT — Проверка наличия параметров (Копия в PDF)
Глюк с текущим рабочим каталогом в wsudo
Бля, в свое время так торопился, что забыл установить для запускаемой wsudo программы рабочий каталог. Исправил, чо. Теперь устанавливается текущий, откуда была вызвана wsudo.
Фразочки
В рабочий folder
(название радиопередачи про винды)
Мой бог — мои правила!