Преамбула.
В свое время, года полтора назад досталось мне в наследство очень забавное и время убийственное дело – это создание мини-дистрибутивов на базе Linux. Если при этом еще и учесть что о существовании такой ОС я знал только теоретически и работал всегда под Windows. Первое впечатление, которое я испытал после инсталляции это был УЖАС. А что бы вы испытали, когда вдруг обнаружили, что труды двух ваших последних лет необратимо исчезли?
Но время шло, и наличие, какой никакой литературы помогало работать. Дошли руки и до создания своего детища мини-дистрибутива на базе ярда 2.4.7. Все работало отлично, но как выяснилось позже уже клиентом заказчика, что данный дистрибутив не поддерживает возможности обновления, т.е. он не поддерживает vfat , и не имеет таких необходимых команд как rm cp mv. Следовательно встал вопрос о создании очередного мини-дистрибутива, но уже дискетного который бы мог предоставить возможность производить обновление программного обеспечения.
Сам процесс создания мини-дистрибутива описывать в этом документе я пока не буду, а основные принципы вы можете почерпнуть, прочитав Boot-Disk HOWTO.
Здесь же мы остановимся на создании основного скрипта инициализации.. linuxrc для дискетных версий.
В первых строках своего письма.
Начиная свой скрипт не плохо бы было указать на себя как на автора, чтоб потом тот, кто будет его использовать, мог вам больно ударить порукам при желании. И указать путь на shell который займется обработкой ваших команд.
#!/bin/sh
#
# linuxrc – main initialization script
# Author: Andrew E. Kuznetsoff kuznetsoff@fromru.com
#
Далее в целях облегчения своей работы дабы не писать перед каждой командой полный путь к ней передадим оболочке основные пути к исполняемым файлам. И приглашение PROMPT которое появится после загрузки скрипта.
PATH="/usr/bin:/usr/sbin:/bin:/sbin:/usr/local/bin:/usr/local/sbin"
TERM=linux
PS1="myDSK>"
clear
export PATH TERM PS1 VERSION BOOT BOOTFS FLCFG FXCFG FIXED
Хотелось обратить ваше внимание на то, что загромождать пустыми каталогами образ вашего виртуального диска не всегда желательно. Места как вы сами понимаете маловато, а программ и необходимых библиотек придется туда скопировать много, поэтому моя личная рекомендация создавать эти директории во время загрузки было бы намного приемлемее.
umask 022
mount -t proc proc /proc # монтирум proc файловую ситему
mkdir -p /lib/modules
mkdir -p /usr/update
Теперь мы создадим софт-линки для стандартных портов ввода/вывода и подготовим RAM-диск к дальнейшей работе.
ln -sf /proc/self/fd/0 /dev/stdin
ln -sf /proc/self/fd/2 /dev/stderr
ln -sf /proc/self/fd/1 /dev/stdout
chmod a+w /tmp
chmod a+w /dev/null
Когда подготовительные работы окончены, можно собрать информацию о системе: размер оперативной памяти, наличие CD-ROM и дисковода с которого мы сейчас стартуем. Хочу заметить, что приведенный ниже пример далеко не идеален, дело в том, что при наличии в системе двух CD-ROM’ов вы присвоите переменной CDEV имена сразу двух CD-ROM’ов и следовательно в дальнейшем использовать такую переменную для монтирования CD-ROM вы не сможете. Я бы посоветовал самостоятельно доработать этот момент. Я за неимением времени этим вопросом почти не занимался, единственное, что могу посоветовать это добавить подсчет количества строк в получаемом сообщении.
VERS=”0.0.1”
MEMORY=`grep MemTotal /proc/meminfo | cut -d':' -f2 | cut -d'k' -f1`
KERNEL=`cat /proc/version | cut -d' ' -f3`
CDEV=`dmesg | grep D-ROM | grep hd | cut -d: -f1 | sort | uniq`
FDEV=`dmesg | grep -v LDM | grep "^ [sh]d[a-f]" | cut -d':' -f2 | sort | uniq`
Что ж отлично теперь мы знаем, что у нас есть и непременно этим воспользуемся позже. Сейчас займемся не менее интересным делом это настройкой локали. Здесь нам придется определить тип клавиатуры и загрузить системный шрифт. Особых комментариев эта процедура не требует, в данном случае мы настраиваем локаль на работу с koi8-r. Для любознательных рекомендую почитать Cyrilic HOWTO.
/bin/loadkeys /lib/kbd/ru.map
/bin/setfont -v /lib/kbd/Cyr_a8x16.psfu.gz
/bin/mapscrn /lib/kbd/koi2alt
reset
for i in 1 2 3 4 5 6;
do
echo -ne "\033(K" > /dev/tty$i
done
Наконец пришло время косметического ремонта на нашей системе. Не может же весь процесс инициализации пройти молча не проинформировав пользователя о происходящем, вот и первые сообщения для него.
echo "==========================="
echo "Версия: $VERS"
echo "Ядро: $KERNEL"
echo "==========================="
echo "Привод CD-ROM: $CDEV"
sleep 1
В принципе этого уже достаточно, но в нашем случае мы говорили о диске с update так, что нам необходимо эти файлы обновления подключить к нашему RAM-диску. Есть две вариации, если вы будете использовать этот скрипт для загрузочного CD-ROM приведенный ниже или как в нашем случае для загрузочной дискеты.
if [ "$CDEV" ]
then
echo -n "Попытка монтирования CD-ROM по адресу $CDEV:"
if mount -t iso9660 /dev/${CDEV} /mnt/cdrom 2> /dev/null > /dev/null
then
echo " Успешно!"
else
echo " Неудачно!"
fi
fi
if [ "$FDEV" ]
then
if mount -t vfat /dev/${FDEV} /mnt/fd 2> /dev/null > /dev/null
then
echo " Успешно!"
else
echo " Неудачно!"
fi
fi
В дальнейшем у Вас весьма огромный выбор дальнейших действий, вы можете облегчить жизнь своим пользователям или т.е. ,например, вписать сюда же все команды по установке обновления для пользователя или же продолжить формирование своего RAM-диска.
if [ "$HOME" != "" ]
then
echo "Создаю /home"
mkdir /home 2> /dev/null
if [ "$TMPFS" = "true" ]
then
mount -n -t tmpfs -o size=${HOMEP}000 /dev/null /home
else
mkfs.minix /dev/ram5 $HOMEP 2> /dev/null > /dev/null
mount -t minix /dev/ram5 /home
fi fi
if [ "$VAR" != "" ]
then
echo "Создаю /var"
mkdir /var 2> /dev/null
if [ "$TMPFS" = "true" ]
then
mount -n -t tmpfs -o size=${VAR}000 /dev/null /var
else
mkfs.minix /dev/ram6 $VAR 2> /dev/null > /dev/null
mount -t minix /dev/ram6 /var
fi
fi
Вот в принципе и все пока, что хотелось поведать, предложения и замечания только приветствуются.
Материал:
# Based on:
# linuxrc - main RTK initialization script
# Author: Stalsen <stalsen@trinux.atanor.ru>
Based on:
# linuxrc - main trinux initialization script
# Author: Matthew Franz <mfranz@cisco.com>
# Bill Burdick for the User-Mode-Linux fixes
Andrew E. Kuznetsoff ака Разгильдяй на Обкуренной кошке kuznetsoff@fromru.com
Создание основного скрипта инициализации linuxrc
Модератор: Модераторы разделов
-
- Сообщения: 63
Создание основного скрипта инициализации linuxrc
The /dev/null где то рядом ©
Использовать компьютер только для игр все равно, что Использовать Ламборгини для перевозки картошки ©
Использовать компьютер только для игр все равно, что Использовать Ламборгини для перевозки картошки ©