Рубрики
lfs

ALFS

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

!!! https://www.linuxfromscratch.org/alfs/
Зачем мне использовать ALFS?
Прочитав книги LFS и BLFS более 2-3 раз, вы быстро оцените возможность автоматизировать задачу компиляции программного обеспечения, которое вы хотите для своих систем.

Цель ALFS — автоматизировать процесс создания системы LFS. 
Он стремится как можно точнее следовать книге, напрямую извлекая инструкции из источников XML. 
По этой причине его также можно использовать в качестве проверки текущих книжных инструкций.

Скрипт проверки готовности системы на которой мы готовим LFS

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

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 (официальный)

su - lfs
cd $LFS
git clone git://git.linuxfromscratch.org/jhalfs.git jhalfs
cd jhalfs
make