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

Содержание:

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

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)
Контрольная сумма MD5: 53f38e7591fa57c3d2cee682be668e5b
Bash (4.4.18)
Контрольная сумма MD5: 518e2c187cc11a17040f0915dddce54e
Bc (1.07.1)
Контрольная сумма MD5: cda93857418655ea43590736fc3ca9fc
Binutils (2.31.1)
Контрольная сумма MD5: 5b7c9d4ce96f507d95c1b9a255e52418
Bison (3.0.5)
Контрольная сумма MD5: 3e54f20988ecd1b62044e25481e5f06b
Bzip2 (1.0.6)
Контрольная сумма MD5: 00b516f4704d4a7cb50a1d97e6e8e15b
Check (0.12.0)
Контрольная сумма MD5: 31b17c6075820a434119592941186f70
Coreutils (8.30)
Контрольная сумма MD5: ab06d68949758971fe744db66b572816
DejaGNU (1.6.1)
Контрольная сумма MD5: 2ac8405a4c7ca8611d004fe852966c6f
Diffutils (3.6)
Контрольная сумма MD5: 07cf286672ced26fba54cd0313bdc071
Eudev (3.2.5)
Контрольная сумма MD5: 6ca08c0e14380f87df8e8aceac123671
E2fsprogs (1.44.3)
Контрольная сумма MD5: 6bd765f3cf8f15740cdf81e71e88f2a4
Elfutils (0.173)
Контрольная сумма MD5: 35decb1ebfb90d565e4c411bee4185cc
Expat (2.2.5)
Контрольная сумма MD5: 789e297f547980fc9ecc036f9a070d49
Expect (5.45.4)
Контрольная сумма MD5: 00fce8de158422f5ccd2666512329bd2
File (5.33) может быть недоступен в указанном месте. Администраторы сайта иногда удаляют старые версии при выпуске новых. Альтернативное место загрузки, которое может иметь нужную версию, можно найти здесь.
Контрольная сумма MD5: bbe6db96e3a9ca9554dce647390540ef
Findutils (4.6.0)
Контрольная сумма MD5: 9936aa8009438ce185bea2694a997fc1
Flex (2.6.4)
Контрольная сумма MD5: 2882e3179748cc9f9c23ec593d6adc8d
Gawk (4.2.1)
Контрольная сумма MD5: 95cf553f50ec9f386b5dfcd67f30180a
GCC (8.1.0)
Контрольная сумма MD5: 65f7c65818dc540b3437605026d329fc
GDBM (1.16)
Контрольная сумма MD5: 05ee82b8f9188a8228c2384f4b9f2eac
Gettext (0.19.8.1)
Контрольная сумма MD5: df3f5690eaa30fd228537b00cb7b7590
Glibc (2.27)
Контрольная сумма MD5: 898cd5656519ffbc3a03fe811dd89e82
GMP (6.1.2)
Контрольная сумма MD5: f58fa8001d60c4c77595fbbb62b63c1d
Gperf (3.1)
Контрольная сумма MD5: 9e251c0a618ad0824b51117d5d9db87e
Grep (3.1)
Контрольная сумма MD5: feca7b3e7c7f4aab2b42ecbfc513b070
Groff (1.22.3)
Контрольная сумма MD5: cc825fa64bc7306a885f2fb2268d3ec5
GRUB (2.02)
Контрольная сумма 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)
Контрольная сумма MD5: 6f3a87fe2d97c28214fc2faab2c257d6
Kbd (2.0.4)
Контрольная сумма MD5: c1635a5a83b63aca7f97a3eab39ebaa6
Kmod (25)
Контрольная сумма MD5: 34f325cab568f842fdde4f8b2182f220
Less (530)
Контрольная сумма MD5: 6a39bccf420c946b0fd7ffc64961315b
LFS-Bootscripts (20170626)
Контрольная сумма MD5: 8a9f3d5aab3f77a70fef0773e8bc7b2b
Libcap (2.25)
Контрольная сумма MD5: 6666b839e5d46c2ad33fc8aa2ceb5f77
Libffi (3.2.1)
Контрольная сумма MD5: 83b89587607e3eb65c70d361f13bab43
Libpipeline (1.5.0)
Контрольная сумма MD5: b7437a5020190cfa84f09c412db38902
Libtool (2.4.6)
Контрольная сумма MD5: 1bfb9b923f2c1339b4d2ce1807064aa5
Linux (4.17.9)
Ядро Linux обновляется достаточно часто, по причине разрешения проблем безопасности. Необходимо использовать последний стабильный релиз 4.17.x версии ядра, если в разделе опечаток и неточностей не указано иное.
M4 (1.4.18)
Контрольная сумма MD5: 730bb15d96fffe47e148d1e09235af82
Make (4.2.1)
Контрольная сумма MD5: 15b012617e7c44c0ed482721629577ac
Man-DB (2.8.3)
Контрольная сумма MD5: 6f3055e18fdd1ce5cbbdb30403991ec7
Man-pages (4.16)
Контрольная сумма MD5: ad9f1ff81276fe8d90d077484d6d4b5e
Meson (0.47.1)
Контрольная сумма MD5: 5ed95fd4e9c7634f7cf3482d352804e7
MPC (1.1.0)
Контрольная сумма MD5: 4125404e41e482ec68282a2e687f6c73
MPFR (4.0.1)
Контрольная сумма MD5: b8dd19bd9bb1ec8831a6a582a7308073
Ninja (1.8.2)
Контрольная сумма MD5: 5fdb04461cc7f5d02536b3bfc0300166
Ncurses (6.1)
Контрольная сумма MD5: 98c889aaf8d23910d2b92d65be2e737a
OpenSSL (1.1.0h)
Контрольная сумма MD5: 5271477e4d93f4ea032b665ef095ff24
Patch (2.7.6)
Контрольная сумма MD5: 78ad9937e4caadcba1526ef1853730d5
Perl (5.28.0)
Контрольная сумма MD5: f3245183c0a08f65e94a3333995af08e
Pkg-config (0.29.2)
Контрольная сумма MD5: f6e931e319531b736fadc017f470e68a
Procps (3.3.15)
Контрольная сумма MD5: 2b0717a7cb474b3d6dfdeedfbad2eccc
Psmisc (23.1)
Контрольная сумма MD5: bbba1f701c02fb50d59540d1ff90d8d1
Python (3.7.0)
Контрольная сумма MD5: eb8c2a6b1447d50813c02714af4681f3
Python Documentation (3.7.0)
Контрольная сумма MD5: c4637cf2a9a6ebb8c5e9dc8ff13fb4cb
Readline (7.0)
Контрольная сумма MD5: 205b03a87fc83dab653b628c59b9fc91
Sed (4.5)
Контрольная сумма MD5: ade8f8c2c548bf41f74db2dcfc37e4e3
Shadow (4.6)
Контрольная сумма MD5: b491fecbf1232632c32ff8f1437fd60e
Sysklogd (1.5.1)
Контрольная сумма MD5: c70599ab0d037fde724f7210c2c8d7f8
Sysvinit (2.90) Tar (1.30)
Контрольная сумма MD5: 2d01c6cd1387be98f57a0ec4e6e35826
Tcl (8.6.8)
Контрольная сумма MD5: 81656d3367af032e0ae6157eff134f89
Texinfo (6.5)
Контрольная сумма 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)
Контрольная сумма MD5: 1739a1df312305155285f0cfa6118294
XML::Parser (2.44)
Контрольная сумма MD5: af4813fe3952362451201ced6fbce379
Xz Utils (5.2.4)
Контрольная сумма 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 когда выполняем распаковку пакета.
Переходим в каталог, который был создан в процессе распаковки пакета.
Следуем инструкциям, чтобы выполнить сборку пакета.
Возвращаемся обратно в каталог с исходными кодами и патчами.
Удаляем каталог созданный в процессе распаковки пакета, если инструкции не указывают на другие действия.

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

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

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

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

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

Scrooge
Dollar
Ruble
Ruble
Gold