Разработка справочной подсистемы программы установки
В течение полугода реализованная программа установки операционной системы использовалась для обучения студентов 4 курса, специальности «Автоматизированные системы управления и обработки информации», по предмету «Разработка и эксплуатация автоматизированных информационных систем»
Части программы установки были использованы в процессе обучения скриптовому языку bash.
Студенты так же могли опробовать программу установки сами. В связи с нахождением ошибок, замечаний и советов по улучшению была реализована справочная подсистема дистрибутива в виде сайта.
Для разработки данной системы на серверы были установлены такие пакеты, как север Apache, система управления базами данных MySQL, для обеспечения системы регистрации на сайте, интерпретатор языка PHP, для разработки динамического веб-сайта. В качестве основы сайта была взята система mediawiki.
PHP: препроцессор гипертекста – скриптовый язык программирования общего назначения, интенсивно применяемый для разработки веб-приложений. В настоящее время поддерживается подавляющим большинством хостинг-провайдеров и является одним из лидеров среди языков программирования, применяющихся для создания динамических веб-сайтов.
MediaWiki– программный механизм для веб-сайтов, работающих по технологии «вики». Это один из самых полнофункциональных вики-движков, написанный специально для Википедии и использующийся во многих других проектах фонда «Викимедиа», частных и государственных организациях. MediaWiki — свободная программа, распространяющаяся на условиях Общественной лицензии GNU.
MediaWiki написан на PHP и для хранения данных использует реляционную базу данных (можно использовать MySQL, PostgreSQL, SQLite); поддерживает использование программ memcached и Squid.
MediaWiki предоставляет интерфейс работы с базой страниц, разграничение прав доступа к администрированию системы, возможность обработки текста как в собственном формате викитекст, так и в форматах HTML и TeX (для формул), возможность загрузки изображений и других файлов, а также другие возможности. Гибкая система расширений позволяет пользователям добавлять собственные новые возможности и программные интерфейсы.
На сайте были размещены исходные коды программы установки. И пошаговое описание процесса установки. Шаги установки были оформлены как отдельные страницы, под каждой из которых имеется возможность оставлять комментарии. Зарегистрированные пользователи имеют возможность редактировать страницы.
Изначально программа обладала только текстовым режимом установки, в виде вопрос ответ в консоли bash. Со временем было принято решение добавить графический интерфейс пользователя с использованием библиотеки ncurses, для ускорения процесса установки и более приятного зрительного восприятия.
Во время существования программы установки были добавлены некоторые шаги в процесс установки. Некоторые шаги были оптимизированы и сейчас находятся в разработке.
В дальнейшем планируется перевод программы установки на другие языки и полная ее локализация. Этому будут способствовать участники, активно участвующие в обсуждении проекта.
Справочная подсистема дала довольно сильный импульс, для продолжения развития и реализации проекта программы установки операционной системы GentooLinux.
Заключение
В дипломной работе были получены следующие основные результаты:
· Произведен анализ предметной области операционных систем и существующих программ их установки;
· Разработана архитектура программы установки Gentoo;
· Обоснован выбор инструментов разработки установочной программы дистрибутива ОС;
· Реализован установочный модуль для дистрибутива Gentoo, функционирующий согласно руководствую пользователя данной ОС;
· Выполнено тестирование разработанного приложения на компьютерах в образовательном учреждении Государственный Колледж Технологии и Управления и компьютерах отдельных пользователей с различным аппаратным обеспечением и различными эксплуатационными задачами;
· Информационная поддержка пользователей программы установки дистрибутива Gentoo обеспечивается с помощью развернутого веб сайта разработчика www.gktu.org/gentooinstaller.
Таким образом, в работе были успешно выполнены все поставленные задачи: проектирование и реализация программы автоматизированной установки дистрибутива Gentoo на основе Linux.
Список литературы
1. SvenVermeulen, GrantGoodyear, andmanyother, «GentooLinuxAMD64 Handbook» 2012 – 97 с.
2. Прата Стивен, «Язык программирования C++. Лекции и упражнения» 5-е изд.: Пер. с англ. – М. ООО «И. Д. Вильямс», 2007 – 1184 c.
3. Жасмин Бланшет, Марк Саммерфилд, «Qt 4. Программирование GUI на C++» 2-е изд.: Пер. с англ. – М. ООО «Кудиц-пресс», 2008 – 718 с.
4. Николас А. Солтер, Скотт Дж. Клепер, «С++ для профессионалов»: Пер. с англ. – М.: Издательский дом «Вильямс», 2006 – 912 с.
5. Брайан Керниган, Деннис Ритчи, «Язык программирования С» 2-е изд.: Пер. с англ. – М.: Издательский дом «Вильямс», 2009 – 304 с.
6. Нейл Мэтью, Ричард Стоунс, «Основы программирования в Linux» 4-е издание: Пер. с англ. – СПб.: БХВ-Петербург, 2009 – 896 с.
7. Бьярне Страуструп, «Программирование: принципы и практика использования С++» испр. изд.: Пер. с англ. – М.: ООО «И. Д. Вильямс», 2011 – 1248 с.
8. Макконнелл С. «Совершенный код. Мастер-класс» Пер. с англ. – М.:Издательско-торговый дом «Русская Редакция»; СПб: Питер, 2005 – 896 с.
Приложение
Листинг 1.1. Исходный код файла GentooInstall.sh
#! /bin/bash
installRoot="/media/gentoo/"
architecture="x86"
mirror="http://mirror.yandex.ru/gentoo-distfiles"
echo -e "Welcome to Gentoo Linux Installer\n"
if [ "$(whoami)" != 'root' ];
then
echo -e "Permission denied. Istallation can not continue.\n Start installation from root privileges.\n"
exit1;
fi
functionLevel1 ()
{
echo -e "Level 1. Creating Filesystems.\n"
#Begin creating filesystems
partcount=0
if [ ! -d "$installRoot" ]
then
mkdir"$installRoot"
fi
echo -n "How many partitions you have: "
read partcount
for (( i=1; i<=$partcount; i++ ))
do
partname=""
while :
do
echo -n "Enter hard drive partition name: "
read partname
if [ -b "$partname" ];
then
echo -e "Partition name Ok.\n"
else
echo -e "Wrong partition name: $partname. Retry.\n"
continue
fi
while :
do
echo"Available filesystems:"
echo" 1) bfs"
echo" 2) btrfs"
echo" 3) cramfs"
echo" 4) ext2"
echo" 5) ext3"
echo" 6) ext4"
echo" 7) ext4dev"
echo" 8) jfs"
echo" 9) minix"
echo" 10) msdos"
echo" 11) nilfs2"
echo" 12) ntfs"
echo" 13) reiserfs"
echo" 14) vfat"
echo" 15) xfs"
echo" 16) swap"
echo -n "Choose a partition filesystem: "
read cm
case"$cm"
in
1) mkfs.bfs"$partname"
break
;;
2) mkfs.btrfs"$partname"
break
;;
3) mkfs.cramfs"$partname"
break
;;
4) mkfs.ext2"$partname"
break
;;
5) mkfs.ext3"$partname"
break
;;
6) mkfs.ext4"$partname"
break
;;
7) mkfs.ext4dev"$partname"
break
;;
8) mkfs.jfs"$partname"
break
;;
9) mkfs.minix"$partname"
break
;;
10) mkfs.msdos"$partname"
break
;;
11) mkfs.nilfs2"$partname"
break
;;
12) mkfs.ntfs"$partname"
break
;;
13) mkfs.reiserfs"$partname"
break
;;
14) mkfs.vfat"$partname"
break
;;
15) mkfs.xfs"$partname"
break
;;
16) mkswap"$partname"
swapon"$partname"
break
;;
esac
done
if [ "$cm" != "16" ]
then
echo -n "Please specify partition: "
read ch
if [ "$ch" = "/" ]
then
mount"$partname""$installRoot"
else
mkdir "$installRoot""$ch"
mount "$partname""$installRoot""$ch"
fi
fi
break
done
done
}
functionLevel2 ()
{
echo -e "Level 2. Date and Time Settings.\n"
echo -n "Current date/time: "
date
while :
do
echo -n "Is it correct time: "
read cm
case"$cm"
in
Y | y | YES | yes | Yes )
break
;;
No | NO | n | N | n* )
while :
do
echo -n "Please specify date and time (like this MMDDhhmmYYYY): "
read dateInput
date"$dateInput"
if [ "$?" = "0" ]
then
echo -n "Date and time set. Current time: "
date
break
fi
done
break
;;
* )
;;
esac
done
}
functionLevel3 ()
{
echo -e "Level 3. Downloading the Stage Tarball.\n"
while :
do
echo -n "Choose the architecture (alpha, amd64, ia64, ppc, sparc, x86 by default): "
read cm
case"$cm"
in
"" )
break
;;
alpha | amd64 | ia64 | ppc | sparc | x86 )
architecture="$cm"
break
;;
* )
;;
esac
done
echo -n "Please specify gentoo mirror: "
cd"$installRoot"
wget --no-parent -nd -c -t inf -A "*.tar.bz2""$mirror/releases/$architecture/current-stage3/"
wget --no-parent -nd -c -t inf -A "portage-latest.tar.bz2""$mirror/releases/snapshots/current/"
tar xjpf "$installRoot"stage3-* -C "$installRoot"
echo -e "Stage3 files are successfully extracted!\n"
tar xjf "$installRoot"portage-latest.tar.bz2 -C "$installRoot"usr
echo -e "Portage files are successfully extracted!\n"
}
functionLevel4 ()
{
echo -e "Level 4. Start configuring system for current machine.\n"
sed -i 's/^CFLAGS.*/CFLAGS="-O2 -march=native -pipe -fomit-frame-pointer"/g'"$installRoot"etc/make.conf
sed -i 's/^CXXFLAGS.*/CXXFLAGS="${CFLAGS}"/g'"$installRoot"etc/make.conf
let procCount=`grep -c processor /proc/cpuinfo`*2+1
sed -i '/MAKEOPTS/d'"$installRoot"etc/make.conf
sed -i '/GENTOO_MIRRORS/d'"$installRoot"etc/make.conf
sed -i '/SYNC/d'"$installRoot"etc/make.conf
sed -i '/LINGUAS/d'"$installRoot"etc/make.conf
echo"MAKEOPTS=\"-j$procCount\"">>"$installRoot"etc/make.conf
mirrorselect -s3 -H -o >>"$installRoot"etc/make.conf
echo"RSYNC=\"rsync://rsync.gentoo.org/gentoo-portage\"">>"$installRoot"etc/make.conf
echo"LINGUAS=\"en ru\""
while :
do
cat"$installRoot"etc/make.conf
echo
echo -n "Do you want to make changes: "
read cm
case"$cm"
in
Y | y | Yes | yes | YES )
vi"$installRoot"etc/make.conf
;;
N | n | No | no | NO )
break
;;
* )
;;
esac
done
cp -L /etc/resolv.conf "$installRoot"etc/
echo -e "Copy DNS Info.\n"
mount -t proc none "$installRoot"proc
mount --rbind /dev "$installRoot"dev
cp ./GentooInstallChroot.sh "$installRoot"
cp ./02locale "$installRoot"etc/env.d/
cp ./locale.gen "$installRoot"etc
chmod +x "$installRoot"GentooInstallChroot.sh
chroot"$installRoot" /bin/bash --rcfile /GentooInstallChroot.sh
}
Level1
Level2
Level3
Level4
exit0
Листинг 1.2. ИсходныйкодфайлаGentooInstallChroot.sh
#! /bin/bash functionLevel5 (){ echo -e "Level 5. In new Gentoo system.\n" env-updatesource /etc/profileexportPS1="(GentooInstall) $PS1" emerge --sync --quiet while :doeselect profile listechoecho -n "Please select profile number: "read cmeselect profile set"$cm"if [ $? = 0 ]thenecho -e "Profile successfully selected.\n"breakfidone } functionLevel6 (){ echo -e "Level 6. Configuring Locale and Timezone.\n" echo -n "Please specify your locales: Ok."read nano -w /etc/locale.genlocale-genenv-updatesource /etc/profile while :doecho -n "Please specify your timezone (like Europe/Moscow or UTC): "read cmcp /usr/share/zoneinfo/"$cm" /etc/localtimeif [ $? = 0 ]thenbreakfidone } Level5Level6/bin/bash exit0Листинг 1.3. ИсходныйкодфайлаdGentooInstall.sh
#! /bin/bash installRoot="/media/gentoo/"architecture="x86"mirror="http://mirror.yandex.ru/gentoo-distfiles" #echo -e "Welcome to Gentoo Linux Installer\n" if [ "$(whoami)" != 'root' ];thendialog --backtitle "Welcome to Gentoo Linux Installer" \ --title "User authentication" \ --msgbox "Permission denied. Istallation can not be continue.\nStart installation from root privileges.\n"30100exit1;elsedialog --backtitle "Welcome to Gentoo Linux Installer" \ --title "User authentication" \--msgbox "Welcome to the installation of Gentoo Linux. \ To properly install the product, you must correctly answer all the questions, \and follow the instructions of the program. More information can be found in \the official guide at Gentoo http://www.gentoo.org/doc/en/handbook/"30100fi functionLevel1 (){ #echo -e "Level 1. Creating Filesystems.\n"#Begin creating filesystems partcount=0 if [ ! -d "$installRoot" ]thenmkdir"$installRoot"fi while :dodialog --backtitle "Level 1. Creating Filesystems" \ --title "Partitioning disks" \ --yesno "Do you want to partition your disks?"30100case"$?"in0 ) dialog --backtitle "Level 1. Creating Filesystems" \ --title "Partitioning disks" \ --inputbox "Enter hard drive name"301002> /tmp/diskNamecfdisk`cat /tmp/diskName`rm /tmp/diskName ;;1 )break ;;esacdone while :dodialog --backtitle "Level 1. Creating Filesystems" \ --title "Making filesystems" \ --yesno "Do you want to make filesystem on your partition?"30100case"$?"in0 ) partname=""while :dodialog --backtitle "Level 1. Creating Filesystems" \ --title "Making filesystems" \ --inputbox "Enter hard drive partition name"301002> /tmp/partNamepartname=`cat /tmp/partName`rm /tmp/partName if [ "$partname" = "" ]thenbreakfi if [ ! -b "$partname" ]thendialog --backtitle "Level 1. Creating Filesystems" \ --title "Making filesystems" \ --msgbox "Wrong partition name: `echo $partname`. Retry."30100continuefi while :dodialog --backtitle "Level 1. Creating Filesystems" \ --title "Making filesystems" \ --radiolist "Please pick one type of file system"3010010 \1"bfs""off" \2"btrfs""off" \3"cramfs""off" \4"ext2""off" \5"ext3""off" \6"ext4""off" \7"ext4dev""off" \8"jfs""off" \9"minix""off" \10"msdos""off" \11"nilfs2""off" \12"ntfs""off" \13"reiserfs""off" \14"vfat""off" \15"xfs""off" \16"swap""off" \2>/tmp/fstype cm=`cat /tmp/fstype`rm /tmp/fstypecase"$cm"in1) mkfs.bfs"$partname"break ;;2) mkfs.btrfs"$partname"break ;;3) mkfs.cramfs"$partname"break ;;4) mkfs.ext2"$partname"break ;;5) mkfs.ext3"$partname"break ;;6) mkfs.ext4"$partname"break ;;7) mkfs.ext4dev"$partname"break ;;8) mkfs.jfs"$partname"break ;;9) mkfs.minix"$partname"break ;;10) mkfs.msdos"$partname"break ;;11) mkfs.nilfs2"$partname"break ;;12) mkfs.ntfs"$partname"break ;;13) mkfs.reiserfs"$partname"break ;;14) mkfs.vfat"$partname"break ;;15) mkfs.xfs"$partname"break ;;16) mkswap"$partname"swapon"$partname"break ;;esacdone if [ "$cm" != "16" ]thendialog --backtitle "Level 1. Creating Filesystems" \ --title "Making filesystems" \ --inputbox "Please specify partition"301002> /tmp/partFolderch=`cat /tmp/partFolder`rm /tmp/partFolderif [ "$ch" = "/" ]thenmount"$partname""$installRoot"else mkdir "$installRoot""$ch" mount "$partname""$installRoot""$ch"fifi breakdone ;;1 )break ;;esacdone } functionLevel2 (){ while :dodialog --backtitle "Level 2. Date and Time Settings" \ --title "Date and time configuration" \ --yesno "Is it correct time: `date`"30100case"$?"in0 )break ;;1 )while :dodialog --backtitle "Level 2. Date and Time Settings" \ --title "Date and time checking" \ --inputbox "Please specify date and time (like this MMDDhhmmYYYY)"301002> /tmp/currentDatedate`cat /tmp/currentDate`if [ "$?" = "0" ]thendialog --backtitle "Level 2. Date and Time Settings" \ --title "Date and time configuration" \ --msgbox "Date and time set. Current time: `date`"30100breakfirm /tmp/currentDatedone ;;esacdone } functionLevel3 (){ while :dodialog --backtitle "Level 3. Downloading the Stage Tarball" \ --title "Computer architecture" \ --radiolist "Choose the available architecture"3010010 \"1""alpha""off" \"2""amd64""off" \"3""ia64""off" \"4""ppc""off" \"5""sparc""off" \"6""x86""off" \2>/tmp/archtype cm=`cat /tmp/archtype`rm /tmp/archtypecase"$cm"in1 | 2 | 3 | 4 | 5 | 6 ) architecture="$cm"break ;; * ) ;;esacdone #emerge mirrorselect mirrorselect -i -o >"$installRoot"GENTOO_MIRRORS cd"$installRoot" dialog --backtitle "Level 3. Installing the Gentoo Installation Files" \ --title "Downloading and unpacking Stage tarball" \ --infobox "Downloading Stage Tarball"30100sleep2wget --no-parent -nd -c -t inf -A "*.tar.bz2" "$mirror/releases/$architecture/current-stage3/" dialog --backtitle "Level 3. Installing the Gentoo Installation Files" \ --title "Downloading and unpacking Stage tarball" \ --infobox "Unpacking Stage Tarball"30100sleep2tar xjpf "$installRoot"stage3-* -C "$installRoot" dialog --backtitle "Level 3. Installing the Gentoo Installation Files" \ --title "Downloading and unpacking Portage Files" \ --infobox "Downloading Portage Files"30100sleep2wget --no-parent -nd -c -t inf -A "portage-latest.tar.bz2" "$mirror/releases/snapshots/current/" dialog --backtitle "Level 3. Installing the Gentoo Installation Files" \ --title "Downloading and unpacking Potage Files" \ --infobox "Unpacking Portage Files"30100sleep2tar xjf "$installRoot"portage-latest.tar.bz2 -C "$installRoot"usr } functionLevel4 (){ sed -i 's/^CFLAGS.*/CFLAGS="-O2 -march=native -pipe -fomit-frame-pointer"/g'"$installRoot"etc/make.confsed -i 's/^CXXFLAGS.*/CXXFLAGS="${CFLAGS}"/g'"$installRoot"etc/make.conflet procCount=`grep -c processor /proc/cpuinfo`*2+1sed -i '/MAKEOPTS/d'"$installRoot"etc/make.confsed -i '/GENTOO_MIRRORS/d'"$installRoot"etc/make.confsed -i '/SYNC/d'"$installRoot"etc/make.confsed -i '/LINGUAS/d'"$installRoot"etc/make.confecho"MAKEOPTS=\"-j$procCount\"">>"$installRoot"etc/make.confecho"RSYNC=\"rsync://rsync.gentoo.org/gentoo-portage\"">>"$installRoot"etc/make.confecho"LINGUAS=\"en ru\""cat"$installRoot"GENTOO_MIRRORS >>"$installRoot"etc/make.conf dialog --backtitle "Level 4. Start configuring system for current machine." \ --title "Configuring Gentoo USE Flags" \ --msgbox "In next step choose all flags you want to be added in make.conf"30100 ufed while :dodialog --backtitle "Level 4. Start configuring system for current machine." \ --title "Please modify make.conf if you want, but it autoconfigured for your system" \ --editbox "$installRoot"etc/make.conf 30100 \2>"$installRoot"tmp/make.conf.tmp cm="$?"cp"$installRoot"tmp/make.conf.tmp "$installRoot"etc/make.confcase"$cm"in0 )break ;;1 ) dialog --backtitle "Level 4. Start configuring system for current machine." \ --title "Please modify make.conf if you want, but it autoconfigured for your system" \ --yesno "Do you want to continue?"30100case"$?"in0 )break ;;1 )true ;;esac ;;esacdone cp -L /etc/resolv.conf "$installRoot"etc/ mount -t proc none "$installRoot"procmount --rbind /dev "$installRoot"dev cp dGentooInstallChroot.sh "$installRoot"cp02locale "$installRoot"etc/env.d/cp locale.gen "$installRoot"etcchmod +x "$installRoot"GentooInstallChroot.shchroot"$installRoot" /bin/bash --rcfile /dGentooInstallChroot.sh } Level1Level2Level3Level4 exit0Листинг 1.4. ИсходныйкодфайлаdGentooInstallChroot.sh
#! /bin/bash functionLevel5 (){ dialog --backtitle "Level 5. In new Linux System" \ --title "Updating environment and profile" \ --infobox "Sync emerge, please wait..."30100 env-update&&source /etc/profileexportPS1="(GentooInstall) $PS1" emerge --sync --quiet while :doeselect profile list > /tmp/profiles.listdialog --backtitle "Level 5. Set profile for future operation system." \ --title "This is a list of posible profile list for current architecture. Remember one of them to specify next." \ --textbox "/tmp/profiles.list"30100 \ --inputbox "Specify selected profile"301002>/tmp/selectedProfile cm=`cat /tmp/selectedProfile`eselect profile set"$cm"if [ $? = 0 ]thenbreakfidone } functionLevel6 (){ dialog --backtitle "Level 6. Configuring Locale and Timezone" \ --title "Please specify your locales" \ --editbox "/etc/locale.gen"30100 locale-genenv-updatesource /etc/profile while :dodialog --backtitle "Level 6. Configuring Locale and Timezone" \ --title "Please specify your timezone (like Europe/Moscow or UTC)" \ --fselect "/usr/share/zoneinfo/"20100 \2>/tmp/zoneinfo cm=`cat /tmp/zoneinfo`cp"$cm" /etc/localtimeif [ $? = 0 ]thenbreakfidone } functionLevel7 (){ dialog --backtitle "Level 7. Configuring and compiling Gentoo Kernel" \ --title "Configuring Gentoo Kernel" \ --infobox "Please wait while Gentoo Kernel downloading ..."30100 emerge gentoo-sourcescd /usr/src/linuxmake menuconfig dialog --backtitle "Level 7. Configuring and compiling Gentoo Kernel" \ --title "Configuring Gentoo Kernel" \ --infobox "Please wait while Gentoo Kernel and modules compiling ..."30100 make&& make modules_install dialog --backtitle "Level 7. Configuring and compiling Gentoo Kernel" \ --title "Configuring Gentoo Kernel" \ --inputbox "Please specify Gentoo Linux Kernel Name"30100 \2>/tmp/kName kernelName=`cat /tmp/kName`cp /arch/x86/boot/bzImage /boot/"$kernelName" } functionLevel8 (){ dialog --backtitle "Level 8. Filesystem information" \ --title "Configuring /etc/fstab" \ --editbox "/etc/fstab"30100 \2>/tmp/fstab if [ $? ]thencp /tmp/fstab /etc/fstabfi } functionLevel9 (){ dialog --backtitle "Level 9. System configuration" \ --title "Networking Information" \ --inputbox "Please specify Host name"30100 \2>/tmp/hostName echo"hostname=\"`cat /tmp/hostName`\""> /etc/conf.d/hostname dialog --backtitle "Level 9. System configuration" \ --title "Networking Information" \ --inputbox "Please specify Domain name"30100 \2>/tmp/domainName echo"dns_domain_lo=\"`cat /tmp/domainName`\""> /etc/conf.d/net cd /etc/init.dln -s net.lo net.eth0rc-update add net.eth0 default passwd dialog --backtitle "Level 9. System configuration" \ --title "Networking Information" \ --editbox "/etc/conf.d/net"30100 \2>/tmp/net if [ $? ]thencp /tmp/net /etc/conf.d/netfi emerge syslog-ngrc-update add syslog-ng defaultemerge vixie cronchmod0775 /var/spool/mailrc-update add vixie-cron defaultemerge mlocateemerge dhcpcdemerge grub } functionLevel10 (){ dialog --backtitle "Level 10. Configuring the Bootloader" \ --title "Install GRUB" \ --inputbox "Please specify partition name to install boolloader"30100 \2>/tmp/grubName dialog --backtitle "Level 10. Configuring the Bootloader" \ --title "Configuring GRUB" \ --editbox "/boot/grub/grub.conf"30100 \2>/tmp/grub if [ $? ]thencp /tmp/grub /boot/grub/grub.conffi grub-install --no-floppy "`cat /tmp/grubName`" } Level5Level6Level7Level8 exit0Листинг 1.5. Исходныйкодфайла 02locale
LANG="ru_RU.UTF-8"
LC_NUMERIC=POSIX
Листинг 1.6. Исходныйкодфайлаlocale.gen
#------------------------------------------------------------------------------
#Belarussian
#be_BY.UTF-8 UTF-8
#Belgian
#fr_BE.UTF-8 UTF-8
#Bulgarian
#bg_BG.UTF-8 UTF-8
#bg_BG CP1251
#Brazilian Portuguese
#pt_BR.UTF-8 UTF-8
#Canadian French
#fr_CA.UTF-8 UTF-8
#Danish
#da_DK.UTF-8 UTF-8
#French
#fr_FR.UTF-8 UTF-8
#German
#de_DE.UTF-8 UTF-8
#Icelandic
#is_IS.UTF-8 UTF-8
#Italian
#it_IT.UTF-8 UTF-8
#Norwegian
#nn_NO.UTF-8 UTF-8
#Polish
#pl_PL.UTF-8 UTF-8
#Portuguese
#pt_PT.UTF-8 UTF-8
#Romanian
#ro_RO.UTF-8 UTF-8
#Russian
ru_RU.UTF-8 UTF-8
#Spanish
#es_ES.UTF-8 UTF-8
#Swedish
#sv_SE.UTF-8 UTF-8
#Ukrainian
#uk_UA.UTF-8 UTF-8
#United Kingdom/British
en_GB.UTF-8 UTF-8
#United State/English
#en_US.UTF-8 UTF-8
[a1]Сделать главой 2.2.
[a2]Вот тут бы я расписал плюсы и минусы компиляторов и интерпретаторов.