Простой скрипт, добавляющий текущий каталог в архив.

Задача

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

Итог

Скрипт целиком на GitHub
На PasteBin

Дистрибутивы 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 (копия) и бонус, разные утилиты для подбора паролей (копия)

System Rescue CD (копия)

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) чтобы запустить установщик винды на целевой машине.
И ТЕЛЕМАРКЕТ!

Образы DOS (копия)

Старые ОС.

Сделано от нехрен делать и шутки для.

— 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 выпилили).

Подготовка дистрибутива и настройка NFS-сервера

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 ниже.

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 по необходимости подчитывается из сети, и такой режим требует меньше памяти.

Скриншоты


Меню сетевых программ


А вот и браузер

Ссылки

Netbooting Ubuntu Live CDs
Скачать готовый архив с Mega.NZ