"Если Вашего бизнеса нет в Интернете, то Вас нет в бизнесе!" Билл Гейтс

Содержание:

хост-система

Linux From Scratch (Linux с нуля)

"Как мало мы знаем, как много надо знать, как мало мы знаем"


"Linux From Scratch" операционная система полностью скомпилированная с нуля, из исходных кодов.

2.2. Требования к хост-системе

Система должна иметь следующее программное обеспечение с минимальными версиями:
Bash-3.2 (/bin/sh должен быть символической или жесткой ссылкой на bash)
Binutils-2.25 (Версия старше чем 2.31.1 не рекомендуется, потому что тестирование таковой не проводилось.)
Bison-2.7 (/usr/bin/yacc должен быть ссылкой на bison или небольшим скриптом который выполняет bison)
Bzip2-1.0.4
Coreutils-6.9
Diffutils-2.8.1
Findutils-4.2.31
Gawk-4.0.1 (/usr/bin/awk должен быть ссылкой на gawk)
GCC-4.9 включая компилятор Си++ , g++ (Версия старше чем 8.1.0 не рекомендуется, потому что тестирование таковой не проводилось.)
Glibc-2.11 (Версия старше чем 2.27 не рекомендуется, потому что тестирование таковой не проводилось.)
Grep-2.5.1a
Gzip-1.3.12
Linux 3.2 ядро
M4-1.4.10
Make-3.81
Patch-2.5.4
Perl-5.8.8
Sed-4.1.5
Tar-1.22
Texinfo-4.7
Xz-5.0.0
Чтобы узнать, имеет ли хост-система все соответствующие версии и возможность компиляции программ, создаём скрипт:

cat > version-check.sh << "EOF"
#!/bin/bash
# Simple script to list version numbers of critical development tools
export LC_ALL=C
bash --version | head -n1 | cut -d" " -f2-4
MYSH=$(readlink -f /bin/sh)
echo "/bin/sh -> $MYSH"
echo $MYSH | grep -q bash || echo "ERROR: /bin/sh does not point to bash"
unset MYSH
echo -n "Binutils: "; ld --version | head -n1 | cut -d" " -f3-
bison --version | head -n1
if [ -h /usr/bin/yacc ]; then
echo "/usr/bin/yacc -> `readlink -f /usr/bin/yacc`";
elif [ -x /usr/bin/yacc ]; then
echo yacc is `/usr/bin/yacc --version | head -n1`
else
echo "yacc not found"
fi
bzip2 --version 2>&1 < /dev/null | head -n1 | cut -d" " -f1,6-
echo -n "Coreutils: "; chown --version | head -n1 | cut -d")" -f2
diff --version | head -n1
find --version | head -n1
gawk --version | head -n1
if [ -h /usr/bin/awk ]; then
echo "/usr/bin/awk -> `readlink -f /usr/bin/awk`";
elif [ -x /usr/bin/awk ]; then
echo awk is `/usr/bin/awk --version | head -n1`
else
echo "awk not found"
fi
gcc --version | head -n1
g++ --version | head -n1
ldd --version | head -n1 | cut -d" " -f2- # glibc version
grep --version | head -n1
gzip --version | head -n1
cat /proc/version
m4 --version | head -n1
make --version | head -n1
patch --version | head -n1
echo Perl `perl -V:version`
sed --version | head -n1
tar --version | head -n1
makeinfo --version | head -n1
xz --version | head -n1
echo 'int main(){}' > dummy.c && g++ -o dummy dummy.c
if [ -x dummy ]
then echo "g++ compilation OK";
else echo "g++ compilation failed"; fi
rm -f dummy.c dummy
EOF


Запускаем созданный скрипт:

bash version-check.sh

Создание новых разделов

Подключаем пустой диск к рабочему компьютеру (хост-системе) и определяем его:

ls -l /dev/disk/by-id/

Разбиваем диск:

fdisk -t dos /dev/sdb
Command (m for help): a
Command (m for help): w


parted -a optimal /dev/sdb
(parted) mklabel gpt
(parted) unit kb
(parted) mkpart primary 1024 3072
(parted) name 1 grub
(parted) set 1 bios_grub on
(parted) mkpart primary 3072 134144
(parted) name 2 boot
(parted) mkpart primary 134144 4328448
(parted) name 3 swap
(parted) mkpart primary 4328448 56757248
(parted) name 4 rootfs
(parted) mkpart primary 56757248 -1
(parted) name 5 home
(parted) set 2 boot on
(parted) print

Номер Начало Конец Размер Файловая система Имя Флаги
1 1024kB 3073kB 2049kB grub bios_grub
2 3073kB 134MB 131MB ext4 boot загрузочный, esp
3 134MB 4328MB 4194MB linux-swap(v1) swap
4 4328MB 56,8GB 52,4GB ext4 rootfs
5 56,8GB 2000GB 1944GB ext4 home

(parted) q

Создание файловых систем на разделах

Чтобы у раздела /dev/sdb4 была файловая система ext4, требуется выполнить:

mkfs.ext4 /dev/sdb4

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

mkswap /dev/sdb3
swapon /dev/sdb3

2.6. Настройка переменной окружения $LFS

Переменная должна хранить путь до каталога, где будет выполняться процесс сборки LFS системы.
Определите каталог, где будет храниться система LFS:

export LFS=/mnt/lfs

Проверяем что переменная LFS устанавливается каждый раз, когда выходим и заново заходим в рабочую оболочку (например, при выполнении команды su в root или другого пользователя). Проверяем, что переменная установлена правильно:

echo $LFS

Убедимся, что вывод отображает путь к тому каталогу, где будет выполнена сборка системы LFS (/mnt/lfs).

2.7. Монтирование нового раздела

Выбераем точку монтирования и присваиваем путь до нее переменной LFS командой:

mkdir -pv $LFS
mount -v -t ext4 /dev/sdb4 $LFS


Убедимся что монтирование не было выполнено с ограниченными правами (такими как nosuid or nodev опциями). Выполняем команду mount без каких либо параметров, чтобы посмотреть какие опции заданы для смонтированных разделов LFS. Если опции nosuid и (или) nodev установлены, разделы необходимо размонтировать и выполнить монтирование заново.
В приведенных выше инструкциях предполагается, что не будет перезапускаться компьютер в процессе сборки LFS. Если выключится компьютер, потребуется выполнять монтирование повторно каждый раз, после перезагрузки хост-системы. Можно отредактировать файл LFS/etc/fstab, чтобы разделы автоматически монтировались после перезагрузки:

3. Пакеты и патчи

Загруженные пакеты и патчи необходимо где-нибудь сохранить. Необходим рабочий каталог, в котором можно будет распаковывать пакеты и выполнять их настройку и компиляцию. Каталог $LFS/sources может быть использован как место для хранения, а также как место для настройки и компиляции. Используя этот каталог, необходимые элементы будут расположены и доступны на всех этапах создания системы LFS.
Создаём такой каталог:

mkdir -v $LFS/sources

Делаем этот каталог доступным для записи и липким. «Липким» означает, что даже если у некоторых пользователей есть разрешение на запись в этот каталог, то только владелец сможет удалить содержимое каталога.

chmod -v a+wt $LFS/sources

Самый простой способ загрузки всех требуемых пакетов и патчей - воспользоваться файлом wget-list. Далее его можно передать как параметр программе wget. Например:

wget --input-file=wget-list --continue --directory-prefix=$LFS/sources

Начиная с версии 7, есть два отдельных файла - md5sums, которые могут понадобится для проверки пакетов. Помещаем этот файл в каталог $LFS/sources:

pushd $LFS/sources
md5sum -c md5sums
popd

3.2. Все пакеты

Загружаем следующие пакеты с указанными версиями:
Acl (2.2.53) - пакет содержит утилиты для администрирования списков контроля доступа, которые используются для определения более детализированных дискреционных прав доступа к файлам и каталогам.
Контрольная сумма MD5: 007aabf1dbb550bcddde52a244cd1070
Attr (2.4.48) - пакет содержит программы для администрирования расширенных атрибутов объектов файловой системы.
Контрольная сумма MD5: bc1e5cb5c96d99b24886f1f527d3bb3d
Autoconf (2.69) - пакет содержит программы для создания сценариев оболочки, которые могут автоматически настраивать исходный код из шаблона разработчика. Часто необходимо пересобрать пакет после обновления процедур сборки.
Контрольная сумма MD5: 50f97f4159805e374639a73e2636f22e
Automake (1.16) - пакет содержит программы для создания файлов Make из шаблона. Часто необходимо пересобрать пакет после обновления процедур сборки.
Контрольная сумма MD5: 53f38e7591fa57c3d2cee682be668e5b
Bash (4.4.18) - пакет удовлетворяет требованию ядра LSB для предоставления интерфейса Bourne Shell к системе. Он был выбран по сравнению с другими пакетами оболочки из-за его общего использования и широких возможностей помимо основных функций оболочки.
Контрольная сумма MD5: 518e2c187cc11a17040f0915dddce54e
Bc (1.07.1) - пакет обеспечивает произвольную точность языка числовой обработки. Он удовлетворяет требованию, необходимому при сборке ядра Linux.
Контрольная сумма MD5: cda93857418655ea43590736fc3ca9fc
Binutils (2.31.1) - пакет содержит компоновщик, ассемблер и другие инструменты для работы с объектными файлами. Программы в этом пакете необходимы для компиляции большинства пакетов в системе LFS и за ее пределами.
Контрольная сумма MD5: 5b7c9d4ce96f507d95c1b9a255e52418
Bison (3.0.5) - пакет содержит GNU-версию yacc (еще одного компилятора компилятора), необходимую для сборки нескольких других программ LFS.
Контрольная сумма MD5: 3e54f20988ecd1b62044e25481e5f06b
Bzip2 (1.0.6) - пакет содержит программы для сжатия и распаковки файлов.
Контрольная сумма MD5: 00b516f4704d4a7cb50a1d97e6e8e15b
Check (0.12.0) - пакет содержит тестовый комплект для других программ. Он устанавливается только во временную цепочку инструментов.
Контрольная сумма MD5: 31b17c6075820a434119592941186f70
Coreutils (8.30) - пакет содержит ряд необходимых программ для просмотра и управления файлами и каталогами. Эти программы необходимы для управления файлами командной строки и необходимы для процедур установки каждого пакета в LFS.
Контрольная сумма MD5: ab06d68949758971fe744db66b572816
DejaGNU (1.6.1) - пакет содержит рамки для тестирования других программ. Он устанавливается только во временную цепочку инструментов.
Контрольная сумма MD5: 2ac8405a4c7ca8611d004fe852966c6f
Diffutils (3.6) - пакет содержит программы, которые показывают различия между файлами или каталогами. Эти программы могут использоваться для создания исправлений, а также используются в процедурах сборки многих пакетов.
Контрольная сумма MD5: 07cf286672ced26fba54cd0313bdc071
Eudev (3.2.5) - пакет является диспетчером устройств. Он динамически управляет записями в каталоге /dev при добавлении или удалении устройств из системы.
Контрольная сумма MD5: 6ca08c0e14380f87df8e8aceac123671
E2fsprogs (1.44.3) - пакет содержит утилиты для обработки файловых систем ext2, ext3 и ext4. Это наиболее распространенные и тщательно протестированные файловые системы, которые поддерживает Linux.
Контрольная сумма MD5: 6bd765f3cf8f15740cdf81e71e88f2a4
Elfutils (0.173) - предоставляет библиотеки и инструменты для файлов ELF и данных DWARF. Большинство утилит в этом пакете доступны в других пакетах, но библиотека необходима для сборки ядра Linux с использованием стандартной (и наиболее эффективной) конфигурации.
Контрольная сумма MD5: 35decb1ebfb90d565e4c411bee4185cc
Expat (2.2.5) - пакет содержит относительно небольшую библиотеку разбора XML. Требуется модулем XML::Parser Perl.
Контрольная сумма MD5: 789e297f547980fc9ecc036f9a070d49
Expect (5.45.4) - пакет содержит программу для ведения диалогов с другими сценариями. Обычно используется для тестирования других пакетов. Он устанавливается только во временную цепочку инструментов.
Контрольная сумма MD5: 00fce8de158422f5ccd2666512329bd2
File (5.33) - пакет содержит утилиту для определения типа заданного файла или файлов. Несколько пакетов нужно собрать. Может быть недоступен в указанном месте. Администраторы сайта иногда удаляют старые версии при выпуске новых. Альтернативное место загрузки, которое может иметь нужную версию, можно найти здесь.
Контрольная сумма MD5: bbe6db96e3a9ca9554dce647390540ef
Findutils (4.6.0) - пакет содержит программы для поиска файлов в файловой системе. Он используется во многих скриптах сборки пакетов.
Контрольная сумма MD5: 9936aa8009438ce185bea2694a997fc1
Flex (2.6.4) - пакет содержит утилиту для генерации программ, распознающих шаблоны в тексте. Это GNU-версия программы lex (lexical analyzer). Требуется собрать несколько пакетов LFS.
Контрольная сумма MD5: 2882e3179748cc9f9c23ec593d6adc8d
Gawk (4.2.1) - пакет содержит программы для работы с текстовыми файлами. Это GNU-версия awk (Aho-Weinberg-Kernighan). Он используется в сценариях сборки многих других пакетов.
Контрольная сумма MD5: 95cf553f50ec9f386b5dfcd67f30180a
GCC (8.1.0) - пакет является коллекцией компиляторов Gnu. Он содержит компиляторы C и C++, а также некоторые другие, не созданные LFS.
Контрольная сумма MD5: 65f7c65818dc540b3437605026d329fc
GDBM (1.16) - пакет содержит библиотеку менеджера баз данных GNU. Он используется еще одним LFS-пакетом, Man-DB.
Контрольная сумма MD5: 05ee82b8f9188a8228c2384f4b9f2eac
Gettext (0.19.8.1) - пакет содержит утилиты и библиотеки для интернационализации и локализации многочисленных пакетов.
Контрольная сумма MD5: df3f5690eaa30fd228537b00cb7b7590
Glibc (2.27) - пакет содержит основную библиотеку C. Программы Linux не будут работать без него.
Контрольная сумма MD5: 898cd5656519ffbc3a03fe811dd89e82
GMP (6.1.2) - пакет содержит математические библиотеки, которые предоставляют полезные функции для арифметики произвольной точности. Требуется построить Gcc.
Контрольная сумма MD5: f58fa8001d60c4c77595fbbb62b63c1d
Gperf (3.1) - пакет содержит программу, которая генерирует идеальную хэш-функцию из набора ключей. Требуется для Eudev.
Контрольная сумма MD5: 9e251c0a618ad0824b51117d5d9db87e
Grep (3.1) - пакет содержит программы для поиска по файлам. Эти программы используются скриптами сборки большинства пакетов.
Контрольная сумма MD5: feca7b3e7c7f4aab2b42ecbfc513b070
Groff (1.22.3) - пакет содержит программы для обработки и форматирования текста. Одной из важных функций этих программ является форматирование страниц руководства.
Контрольная сумма MD5: cc825fa64bc7306a885f2fb2268d3ec5
GRUB (2.02) - пакет является Grand Unified Boot Loader. Это один из нескольких доступных загрузчиков, но он самый гибкий.
Контрольная сумма MD5: 8a4a2a95aac551fb0fba860ceabfa1d3
Gzip (1.9) - пакет содержит программы для сжатия и распаковки файлов.
Контрольная сумма MD5: 9492c6ccb2239ff679a5475a7bb543ed
Iana-Etc (2.30) - пакет предоставляет данные для сетевых служб и протоколов. Это необходимо для обеспечения надлежащих сетевых возможностей.
Контрольная сумма MD5: 3ba3afb1d1b261383d247f46cb135ee8
Inetutils (1.9.4) - пакет содержит программы для базового сетевого администрирования.
Контрольная сумма MD5: 87fef1fa3f603aef11c41dcc097af75e
Intltool (0.51.0) - пакет содержит инструменты для извлечения переводимых строк из исходных файлов.
Контрольная сумма MD5: 12e517cac2b57a0121cda351570f1e63
IPRoute2 (4.17.0) - пакет содержит программы для базовых и расширенных сетей IPv4 и IPv6. Он был выбран из других распространенных пакетов сетевых инструментов (net-tools) для его возможностей IPv6.
Контрольная сумма MD5: 6f3a87fe2d97c28214fc2faab2c257d6
Kbd (2.0.4) - пакет содержит файлы таблиц клавиш, утилиты клавиатуры для неамериканских клавиатур и ряд консольных шрифтов.
Контрольная сумма MD5: c1635a5a83b63aca7f97a3eab39ebaa6
Kmod (25) - пакет содержит программы, необходимые для администрирования модулей ядра Linux.
Контрольная сумма MD5: 34f325cab568f842fdde4f8b2182f220
Less (530) - пакет содержит очень хороший просмотрщик текстовых файлов, который позволяет прокручивать вверх или вниз при просмотре файла. Он также используется Man-DB для просмотра man-страниц.
Контрольная сумма MD5: 6a39bccf420c946b0fd7ffc64961315b
LFS-Bootscripts (20170626)
Контрольная сумма MD5: 8a9f3d5aab3f77a70fef0773e8bc7b2b
Libcap (2.25) - пакет реализует интерфейсы пользовательского пространства с возможностями POSIX 1003.1e, доступными в ядрах Linux.
Контрольная сумма MD5: 6666b839e5d46c2ad33fc8aa2ceb5f77
Libffi (3.2.1) - пакет реализует переносимый интерфейс программирования высокого уровня для различных соглашений о вызовах. Некоторые программы могут не знать во время компиляции, какие аргументы должны быть переданы в функцию. Например, интерпретатору можно сообщить во время выполнения о количестве и типах аргументов, используемых для вызова данной функции. Libffi может использоваться в таких программах для обеспечения моста между программой-интерпретатором и скомпилированным кодом.
Контрольная сумма MD5: 83b89587607e3eb65c70d361f13bab43
Libpipeline (1.5.0) - пакет содержит библиотеку для гибкого и удобного управления конвейерами подпроцессов. Это требуется пакетом Man-DB.
Контрольная сумма MD5: b7437a5020190cfa84f09c412db38902
Libtool (2.4.6) - пакет содержит скрипт поддержки универсальной библиотеки GNU. Это оборачивает сложность использования разделяемых библиотек в согласованный, переносимый интерфейс. Это необходимо для тестовых наборов в других пакетах LFS.
Контрольная сумма MD5: 1bfb9b923f2c1339b4d2ce1807064aa5
Linux (4.17.9)
Ядро Linux обновляется достаточно часто, по причине разрешения проблем безопасности. Необходимо использовать последний стабильный релиз 4.17.x версии ядра, если в разделе опечаток и неточностей не указано иное.
M4 (1.4.18) - пакет содержит общий текстовый макропроцессор, полезный в качестве инструмента для сборки других программ.
Контрольная сумма MD5: 730bb15d96fffe47e148d1e09235af82
Make (4.2.1) - пакет содержит программу для управления сборкой пакетов. Это требуется почти для каждого пакета в LFS.
Контрольная сумма MD5: 15b012617e7c44c0ed482721629577ac
Man-DB (2.8.3) - пакет содержит программы для поиска и просмотра справочных страниц. Он был выбран вместо пакета man из-за превосходных возможностей интернационализации. Это поставляет программу man.
Контрольная сумма MD5: 6f3055e18fdd1ce5cbbdb30403991ec7
Man-pages (4.16) - пакет содержит фактическое содержимое основных справочных страниц по Linux.
Контрольная сумма MD5: ad9f1ff81276fe8d90d077484d6d4b5e
Meson (0.47.1) - пакет предоставляет программный инструмент для автоматизации создания программного обеспечения. Основная цель Meson - минимизировать время, которое разработчики программного обеспечения тратят на настройку своей системы сборки.
Контрольная сумма MD5: 5ed95fd4e9c7634f7cf3482d352804e7
MPC (1.1.0) - пакет содержит функции для арифметики комплексных чисел. Требуется Gcc.
Контрольная сумма MD5: 4125404e41e482ec68282a2e687f6c73
MPFR (4.0.1) - пакет содержит функции для арифметики с множественной точностью. Требуется Gcc.
Контрольная сумма MD5: b8dd19bd9bb1ec8831a6a582a7308073
Ninja (1.8.2) - пакет содержит небольшую систему сборки с акцентом на скорость. Он спроектирован так, чтобы его входные файлы генерировались системой сборки более высокого уровня, и выполнял сборки как можно быстрее.
Контрольная сумма MD5: 5fdb04461cc7f5d02536b3bfc0300166
Ncurses (6.1) - пакет содержит библиотеки для независимой от терминала обработки экранов символов. Он часто используется для обеспечения управления курсором для системы меню. Это необходимо для ряда пакетов в LFS.
Контрольная сумма MD5: 98c889aaf8d23910d2b92d65be2e737a
OpenSSL (1.1.0h) - пакет предоставляет инструменты управления и библиотеки, относящиеся к криптографии. Они полезны для предоставления криптографических функций другим пакетам, включая ядро Linux.
Контрольная сумма MD5: 5271477e4d93f4ea032b665ef095ff24
Patch (2.7.6) - пакет содержит программу для изменения или создания файлов путем применения файла исправления, обычно создаваемого программой diff. Это необходимо для процедуры сборки для нескольких пакетов LFS.
Контрольная сумма MD5: 78ad9937e4caadcba1526ef1853730d5
Perl (5.28.0) - пакет является интерпретатором языка исполнения PERL. Он необходим для установки и тестирования комплектов нескольких пакетов LFS.
Контрольная сумма MD5: f3245183c0a08f65e94a3333995af08e
Pkg-config (0.29.2) - пакет предоставляет программу для возврата метаданных об установленной библиотеке или пакете.
Контрольная сумма MD5: f6e931e319531b736fadc017f470e68a
Procps (3.3.15) - пакет содержит программы для мониторинга процессов. Эти программы полезны для системного администрирования, а также используются загрузочными скриптами LFS.
Контрольная сумма MD5: 2b0717a7cb474b3d6dfdeedfbad2eccc
Psmisc (23.1) - пакет содержит программы для отображения информации о запущенных процессах. Эти программы полезны для системного администрирования.
Контрольная сумма MD5: bbba1f701c02fb50d59540d1ff90d8d1
Python (3.7.0) - пакет предоставляет интерпретируемый язык, который имеет философию дизайна, которая подчеркивает читабельность кода.
Контрольная сумма MD5: eb8c2a6b1447d50813c02714af4681f3
Python Documentation (3.7.0)
Контрольная сумма MD5: c4637cf2a9a6ebb8c5e9dc8ff13fb4cb
Readline (7.0) - пакет представляет собой набор библиотек, который предлагает редактирование командной строки и возможности истории. Используется Bash.
Контрольная сумма MD5: 205b03a87fc83dab653b628c59b9fc91
Sed (4.5) - пакет позволяет редактировать текст, не открывая его в текстовом редакторе. Это также необходимо для большинства скриптов конфигурации пакетов LFS.
Контрольная сумма MD5: ade8f8c2c548bf41f74db2dcfc37e4e3
Shadow (4.6) - пакет содержит программы для безопасной обработки паролей.
Контрольная сумма MD5: b491fecbf1232632c32ff8f1437fd60e
Sysklogd (1.5.1) - пакет содержит программы для регистрации системных сообщений, таких как те, которые выдаются процессами ядра или демона, когда происходят необычные события.
Контрольная сумма MD5: c70599ab0d037fde724f7210c2c8d7f8
Sysvinit (2.90) - пакет предоставляет программу init, которая является родителем всех других процессов в системе Linux.
Tar (1.30) - пакет предоставляет возможности архивирования и извлечения практически всех пакетов, используемых в LFS.
Контрольная сумма MD5: 2d01c6cd1387be98f57a0ec4e6e35826
Tcl (8.6.8) - пакет содержит язык команд инструментов, используемый во многих тестовых пакетах в пакетах LFS. Он устанавливается только во временную цепочку инструментов.
Контрольная сумма MD5: 81656d3367af032e0ae6157eff134f89
Texinfo (6.5) - пакет содержит программы для чтения, записи и конвертации информационных страниц. Он используется в процедурах установки многих пакетов LFS.
Контрольная сумма MD5: 3715197e62e0e07f85860b3d7aab55ed
Time Zone Data (2018e)
Контрольная сумма MD5: 97d654f4d7253173b3eeb76a836dd65e
Udev-lfs Tarball (udev-lfs-20171102)
Контрольная сумма MD5: d92afb0c6e8e616792068ee4737b0d24
Util-linux (2.32.1) - пакет содержит различные утилиты. Среди них есть утилиты для обработки файловых систем, консолей, разделов и сообщений.
Контрольная сумма MD5: 9e5b1b8c1dc99455bdb6b462cf9436d9
Vim (8.1) - пакет содержит редактор. Он был выбран из-за его совместимости с классическим редактором vi и огромного количества мощных возможностей. Редактор является личным выбором для пользователей, и при желании может быть заменен на любой другой редактор.
Контрольная сумма MD5: 1739a1df312305155285f0cfa6118294
XML::Parser (2.44) - пакет представляет собой модуль Perl, который взаимодействует с Expat.
Контрольная сумма MD5: af4813fe3952362451201ced6fbce379
Xz Utils (5.2.4) - пакет содержит программы для сжатия и распаковки файлов. Он обеспечивает максимально возможное сжатие и полезен для распаковки пакетов в формате XZ или LZMA.
Контрольная сумма MD5: 003e4d0b1b1899fc6e3000b24feddf7c
Zlib (1.2.11) - пакет содержит процедуры сжатия и распаковки, используемые некоторыми программами.
Контрольная сумма MD5: 85adef240c5f370b308da8c938951a68

3.3. Необходимые патчи

К пакетам потребуются патчи. Они исправляют ошибки в пакетах которые должны быть исправлены владельцем пакета. Патчи также вносят небольшие модификации чтобы облегчить работу с пакетами:
Bzip2 Documentation Patch
Контрольная сумма MD5: 6a5ac7e89b791aae556de0f745916f7f
Coreutils Internationalization Fixes Patch
Контрольная сумма MD5: a9404fb575dfd5514f3c8f4120f9ca7d
Glibc FHS Patch
Контрольная сумма MD5: 9a5997c3452909b1769918c759eff8a2
Kbd Backspace/Delete Fix Patch
Контрольная сумма MD5: f75cca16a38da6caa7d52151f7136895
Ninja Limit Jobs Patch
Контрольная сумма MD5: f537a633532492e805aa342fa869ca45
Sysvinit Consolidated Patch
Контрольная сумма MD5: b7872b43a97a81bac4f9fc8ffaef4364
В дополнение к необходимым патчам, существует множество опциональных, созданных сообществом LFS. Эти патчи исправляют проблемы или добавляют функциональность которая не включена по умолчанию. Не забудьте ознакомиться с базой патчей, расположенной здесь и воспользуйтесь ими в соответствии с требованиями к вашей системе.
Полный комплект пакетов и патчи можно найти здесь - 374,6 Mb.

4.2. Создание директории $LFS/tools

Все программы которые будут скомпилированы, будут установлены в каталог $LFS/tools чтобы можно было оставить их отдельно от сборки конечной системы. Программы которые будут скомпилированы - временные инструменты и не будут входить в конечную сборку LFS системы. После использования временных инструментов, от них можно избавиться. Использование каталога $LFS/tools для хранения временного набора инструментов также полезно для того, чтобы не засорять рабочие каталоги хост-системы (что можно случайно сделать).
Создаём каталог:

mkdir -v $LFS/tools

Создаём символическую ссылки /tools в хост-системе, которая будет указывать на созданный каталог с временными инструментами:

ln -sv $LFS/tools /

Вышеприведенная команда верна. Команда ln имеет несколько синтаксических вариаций, поэтому обязательно проверьте info coreutils ln and ln(1) перед тем, как сообщить о предполагаемой ошибке. Созданная символическая ссылка позволяет выполнить компиляцию временного набора инструментов по ссылке /tools, это означает что компилятор, ассемблер и компоновщик смогут работать на тот момент, когда мы все еще используем некоторые инструменты хост-системы и в дальнейшем, когда мы выполним команду «chroot» в раздел LFS.

4.3. Добавление пользователя LFS

Когда мы находимся в системе под пользователем root, одна единственная ошибка может привести к повреждению или поломке хост-системы. Рекомендуется выполнять сборку пакетов для временного набора инструментов от обычного пользователя, без привилегий. Можно использовать произвольного пользователя, но для упрощения настройки чистого рабочего окружения создаём нового пользователя с именем lfs как члена группы lfs и используйте этого пользователя на время всего процесса установки временного набора инструментов:

groupadd lfs
useradd -s /bin/bash -g lfs -m -k /dev/null lfs


Значение параметров командной строки:
-s /bin/bash Устанавливает bash оболочкой по умолчанию для пользователя lfs.
-g lfs Опция добавляет пользователя lfs в созданную группу lfs.
-m Создает домашний каталог для пользователя lfs.
-k /dev/null Этот параметр предотвращает возможное копирование файлов из предустановленного набора каталогов (по умолчанию /etc/skel), изменив местоположение ввода на специальное null устройство.
lfs Это наименнование созданного пользователя и группы.
Для входа в систему как пользователь lfs, создадим для учётной записи пароль:

passwd lfs

Предоставим lfs полный доступ к $LFS/tools сделав пользователя lfs владельцем каталога:

chown -v lfs $LFS/tools

Предоставляем пользователю lfs права на следующий каталог:

chown -v lfs $LFS/sources

Выполним вход как пользователь lfs:

su - lfs

Аргумент «-» предает значение для команды su для начала запуска login-оболочки, в отличие от обычной. Различия между двумя типами оболочек можно подробно изучить в bash(1) и информация о bash.

4.4. Установка рабочего окружения

Настроим хорошо работающее окружение. Создадим два файла для оболочки bash. При входе в систему как пользователь lfs выполняем следующую команду для создания нового файла .bash_profile:

cat > ~/.bash_profile <<"EOF"
exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash
EOF


Когда выполнен вход под пользователем lfs, при инициализации оболочки login, будет читать данные из файла /etc/profile хост-системы (который возможно будет содержать некоторые настройки и дополнительные переменные), и затем данные из файла .bash_profile. Команда exec env -i.../bin/bash в файле .bash_profile заменяет запущенную оболочку новой полностью пустой средой, кроме таких переменных, как HOME, TERM, и PS1. Такой подход гарантирует, что нежелательные и потенциально опасные переменные окружения хост-системы не попадут в среду сборки. В результате чего мы получаем чистое окружение.
Новый экземпляр оболочки - это non-login оболочка, которая не выполняет чтение файла /etc/profile или .bash_profile, но выполняет чтение из файла .bashrc. Создадим файл .bashrc:

cat > ~/.bashrc << "EOF"
set +h
umask 022
LFS=/mnt/lfs
LC_ALL=POSIX
LFS_TGT=$(uname -m)-lfs-linux-gnu
PATH=/tools/bin:/bin:/usr/bin
export LFS LC_ALL LFS_TGT PATH
EOF


Команда set +h отключает хеш-функцию bash. Хеширование полезно когда bash использует хеш-таблицу для хранения полного пути исполняемых файлов чтобы избежать поиска в переменной окружения PATH при каждом обращении. Однако новые инструменты должны быть использованы сразу после их установки. При выключении хеш-функции оболочка будет всегда искать переменную окружения PATH когда программу необходимо запустить. Таким образом, оболочка будет выполнять поиск скомпилированных инструментов в каталоге $LFS/tools, как только они станут доступны без запоминания предыдущей версии той же программы в другом расположении.
Указание для значения 022 маски создания файлов пользователя (umask) для создания новых файлов и каталогов позволяет выполнять запись только их владельцу, но они останутся доступными на чтение и выполнение для остальных пользователей (при условии, что режимы по умолчанию используют системный вызов open(2), новые файлы получат разрешение 644 а каталоги 755).
Переменная окружения LFS должны указывать на выбранную точку монтирования.
Переменная LC_ALL управляет локализацией некоторых программ, и формирует сообщения в соответствии с соглашениями локализаций указанной страны. Если указать значение LC_ALL в «POSIX» или «C» (что одно и тоже) гарантирует, что все будет работает так, как ожидается в chroot окружении.
Переменная LFS_TGT содержит совместимое описание компьютера, которая будет использоваться при сборке кросс-компилятора и компоновщика и затем при кросс-компиляции временного набора инструментов. Более подробная информация содержится в разделе.
Указание значения /tools/bin перед стандартным содержимым переменной PATH дает возможность оболочке сразу использовать программы и библиотеки, которые были установлены в этот каталог. В сочетании с отключением хеширования, снижается риск, что старые программы будут использованы хост-системой когда те же программы будут доступны в среде окружения.
Чтобы полностью подготовить среду для временных инструментов, указываем источник только что созданного профиля пользователя:

source ~/.bash_profile

Время компиляции пакета может быть сокращено за счет выполнения "параллельной сборки". Для этого можно установить соответствующую переменную окружения или непосредственно указать программе make количество доступных процессоров.

export MAKEFLAGS='-j 2'

или каждый раз производить сборку так:

make -j2

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

5.3. Общие инструкции по компиляции

Еще раз выполним проверку, и убедимся, что переменная окружения LFS установлена правильно:

echo $LFS

Убедмся что вывод указывает на путь к точке монтирования раздела LFS, /mnt/lfs
Предполагается, что все необходимые символические ссылки ,указанны правильно:
bash используемая оболочка.
sh символическая ссылка на bash.
/usr/bin/awk символическая ссылка на gawk.
/usr/bin/yacc символическая ссылка на bison или файл сценария, которая будет выполняться программой bison.
Чтобы выполнить процесс сборки:
Сохраняем все файлы исходных кодов пакетов и патчи в каталог, который будет доступен из среды chroot, например /mnt/lfs/sources/. Не следует сохранять исходные коды пакетов и патчи в каталог /mnt/lfs/tools/.
Перейдим в каталог с исходными кодами.
Для каждого пакета используем команду tar для распаковки пакета, который необходимо скомпилировать. Убедимся, что выполняются команды пользователем lfs когда выполняем распаковку пакета.
Переходим в каталог, который был создан в процессе распаковки пакета.
Следуем инструкциям, чтобы выполнить сборку пакета.
Возвращаемся обратно в каталог с исходными кодами и патчами.
Удаляем каталог созданный в процессе распаковки пакета, если инструкции не указывают на другие действия.

хост-система

Продаются
книги

Оставить отзыв

Установи и
БУДЕШЬ СЧАСТЛИВ!

Спасибо, Господи, что взял деньгами...

Приму в добрые руки!
Bitcoin 3LN3XUH45XvnRWCgYr4ZcB4P51zfPzKXYe
Dogecoin DL1LyCQkKEUrgBBuWBbgvzb2RR5yeW5RQ9
Litecoin ltc1qr5ntqxafw9jcmq5jfgdhrm0uq306mqntntmhwf
Ethereum 0x0A476b0Fa1DF5a97c911AF4271897153800D23Db
Ryo RYoLsdrYL7sTGXUrtvC9BLLTqTq3YfHdLga33GyhBy4sJ9zV7P8N49RKZmZpU563QsbBLC1UobmCTcwp1QnD6pAXStEtyxVerqn
Monero 4B8tc66Y136YHHEGSioVnpSAW7H5qU5W5MSaXH9RX2QSW6Uy6fFba2S7SndPsJqCXaH7Q4mLduGgZ1UXDx1FAgpoK4Rzvow
Scrooge
Dollar
Ruble
Ruble
Gold