1 2 3 4 5 6 7 8 |
https://www.linuxfromscratch.org/alfs/ https://wiki.linuxfromscratch.org/alfs/wiki/SupportedBooks https://www.linuxfromscratch.org/hints/downloads/files/more_control_and_pkg_man.txt https://www.linuxfromscratch.org/blfs/downloads/ https://www.linuxfromscratch.org/faq/ https://github.com/mattwind/alfs https://github.com/ivandavidov/minimal https://www.php.net/manual/en/timezones.php Europe/Moscow |
WTF
1 2 3 4 5 6 7 |
!!! https://www.linuxfromscratch.org/alfs/ Зачем мне использовать ALFS? Прочитав книги LFS и BLFS более 2-3 раз, вы быстро оцените возможность автоматизировать задачу компиляции программного обеспечения, которое вы хотите для своих систем. Цель ALFS — автоматизировать процесс создания системы LFS. Он стремится как можно точнее следовать книге, напрямую извлекая инструкции из источников XML. По этой причине его также можно использовать в качестве проверки текущих книжных инструкций. |
Скрипт проверки готовности системы на которой мы готовим LFS
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
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 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 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` python3 --version sed --version | head -n1 tar --version | head -n1 makeinfo --version | head -n1 # texinfo version 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 |
Первым делом готовим систему где будем собирать ALFS
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
0. Устанавливаем рекомендованные пакеты для debian: apt install build-essential bison gawk git htop texinfo wget make gcc bc bison flex xorriso libelf-dev libssl-dev vim 1. Экспортируем переменные export LFS=/mnt/lfs export ALFS=/mnt/lfs/alfs 2. Готовим диск (vdb - диск на котором будем собирать lfs) fdisk /dev/vdb !!! Создаем новую ext4 parition /dev/vdb1 (option n) и делаем его загрузочным (option a) mkfs.ext4 /dev/vda1 3. Монтируем диск mkdir $LFS mount -t ext4 /dev/vdb1 $LFS 4. Создаем директории и выдаем права mkdir -pv $LFS/{etc,var,sources,tools,usr} $LFS/usr/{bin,lib,sbin} chmod -v a+wt $LFS/sources 5. Загружаем файлы lfs Список скачиваемых пакетов wget-list и список контрольных сумм пакетов md5sums: wget https://www.linuxfromscratch.org/lfs/downloads/stable-systemd/wget-list --directory-prefix=$LFS/sources wget https://www.linuxfromscratch.org/lfs/downloads/stable-systemd/md5sums --directory-prefix=$LFS/sources После этого приступаем к закачке исходников всего и вся: wget --input-file=$LFS/sources/wget-list --continue --directory-prefix=$LFS/sources 6. Проверяем скаченное: !!! Команды pushd/popd, делают следующие, !!! Команда pushd временно переводит вас в указанный в качестве параметра каталог. !!! Возврат назад происходит командой popd !!! Если чего-то не окажется, нужно пойти и скачать ручками !!! Если все ок можем продолжать pushd $LFS/sources md5sum -c md5sums popd 7. Создаем пользователя lfs и настраиваем для него окружение ln -sv $LFS/tools / groupadd lfs useradd -s /bin/bash -g lfs -m -k /dev/null lfs passwd lfs chown -v lfs $LFS 8. Переключимся в пользователя lfs su - lfs 9. profile cat > ~/.bash_profile << "EOF" exec env -i HOME=$HOME TERM=$TERM PS1='\u:w\$ ' /bin/bash EOF 10. 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 11. Переключаемся на чистое окружение exec env -i HOME=$HOME TERM=$TERM PS1='\u:W\$ ' /bin/bash 12. Обновим пользовательское окружение командой source ~/.bash_profile |
Сборка с помощью jhalfs (официальный)
1 2 3 4 5 |
su - lfs cd $LFS git clone git://git.linuxfromscratch.org/jhalfs.git jhalfs cd jhalfs make |