cd /mnt mkdir -pv {etc,var,tools,usr/{bin,lib,lib64,sbin}} for i in bin lib lib64 sbin; do ln -sv usr/$i $i done groupadd futura useradd -s /bin/bash -g futura -m -k /dev/null futura chown -v futura {usr{,/*},lib,lib64,var,etc,bin,sbin,tools} su - futura cat > ~/.bash_profile << "EOF" exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash EOF cat > ~/.bashrc << "EOF" set +h umask 022 FUTURA=/mnt LC_ALL=POSIX FUTURA_TGT=${CHOST} PATH=/usr/bin if [ ! -L /bin ]; then PATH=/bin:$PATH; fi PATH=$FUTURA/tools/bin:$PATH CONFIG_SITE=$FUTURA/usr/share/config.site export FUTURA LC_ALL FUTURA_TGT PATH CONFIG_SITE export MAKEFLAGS=-j$(nproc) EOF # 5.2. Binutils-2.43.1 - 第一é tar xf binutils-2.43.1.tar.xz cd binutils-2.43.1 mkdir -v build cd build ../configure --prefix=$FUTURA/tools \ --with-sysroot=$FUTURA \ --target=$FUTURA_TGT \ --disable-nls \ --enable-gprofng=no \ --disable-werror \ --enable-new-dtags \ --enable-default-hash-style=gnu \ --libdir=$FUTURA/tools/lib64 && make && make install cd ../../ rm -rf binutils-2.43.1 # 5.3. GCC-14.2.0 - 第一é tar xf gcc-14.2.0.tar.xz cd gcc-14.2.0 tar -xf ../mpfr-4.2.1.tar.xz mv -v mpfr-4.2.1 mpfr tar -xf ../gmp-6.3.0.tar.xz mv -v gmp-6.3.0 gmp tar -xf ../mpc-1.3.1.tar.gz mv -v mpc-1.3.1 mpc mkdir -v build cd build ../configure \ --target=$FUTURA_TGT \ --prefix=$FUTURA/tools \ --with-glibc-version=2.40 \ --with-sysroot=$FUTURA \ --with-newlib \ --without-headers \ --enable-default-pie \ --enable-default-ssp \ --disable-nls \ --disable-shared \ --disable-multilib \ --disable-threads \ --disable-libatomic \ --disable-libgomp \ --disable-libquadmath \ --disable-libssp \ --disable-libvtv \ --disable-libstdcxx \ --enable-languages=c,c++ \ --libdir=$FUTURA/tools/lib64 && make && make install cd .. cat gcc/limitx.h gcc/glimits.h gcc/limity.h > \ `dirname $($FUTURA_TGT-gcc -print-libgcc-file-name)`/include/limits.h cd .. rm -rf gcc-14.2.0 # 5.4. Linux-6.11.6 API 头文件 tar xf linux-6.11.7.tar.xz cd linux-6.11.7 make mrproper make headers find usr/include -type f ! -name '*.h' -delete cp -rv usr/include $FUTURA/usr cd .. rm -rf linux-6.11.7 # 5.5. Glibc-2.40 tar xf glibc-2.40.tar.xz cd glibc-2.40 patch -Np1 -i ../glibc-2.40-fhs-1.patch mkdir -v build cd build echo "slibdir=/usr/lib64" >> configparms echo "rtlddir=/usr/lib64" >> configparms echo "sbindir=/usr/bin" >> configparms echo "rootsbindir=/usr/sbin" >> configparms echo "complocaledir=/usr/lib/locale" >> configparms ../configure \ --prefix=/usr \ --host=$FUTURA_TGT \ --build=$FUTURA_TGT \ --enable-kernel=4.19 \ --with-headers=$FUTURA/usr/include \ --disable-nscd \ --libdir=/usr/lib64 \ --disable-timezone-tools make && make DESTDIR=$FUTURA install echo 'int main(){}' | $FUTURA_TGT-gcc -xc - readelf -l a.out | grep ld-linux rm -v a.out cd ../../ rm -rf glibc-2.40 # 5.6. GCC-14.2.0 ä¸çš„ Libstdc++ tar xf gcc-14.2.0.tar.xz cd gcc-14.2.0 mkdir -v build cd build ../libstdc++-v3/configure \ --host=$FUTURA_TGT \ --build=$FUTURA_TGT \ --prefix=/usr \ --disable-multilib \ --disable-nls \ --disable-libstdcxx-pch \ --with-gxx-include-dir=/tools/$FUTURA_TGT/include/c++/14.2.0 \ --libdir=/usr/lib64 make make DESTDIR=$FUTURA install rm -v $FUTURA/usr/lib64/lib{stdc++{,exp,fs},supc++}.la cd ../../ rm -rf gcc-14.2.0 # 6.2. M4-1.4.19 tar xf m4-1.4.19.tar.xz cd m4-1.4.19 ./configure --prefix=/usr \ --host=$FUTURA_TGT \ --build=$FUTURA_TGT \ --libdir=/usr/lib64 make make DESTDIR=$FUTURA install cd .. rm -rf m4-1.4.19 # 6.3. Ncurses-6.5 tar xf ncurses-6.5.tar.gz cd ncurses-6.5 mkdir build pushd build ../configure AWK=gawk make -C include make -C progs tic popd ./configure --prefix=/usr \ --host=$FUTURA_TGT \ --build=$FUTURA_TGT \ --mandir=/usr/share/man \ --with-manpage-format=normal \ --with-shared \ --without-normal \ --with-cxx-shared \ --without-debug \ --without-ada \ --disable-stripping \ AWK=gawk \ --libdir=/usr/lib64 make make DESTDIR=$FUTURA TIC_PATH=$(pwd)/build/progs/tic install ln -sv libncursesw.so $FUTURA/usr/lib64/libncurses.so sed -e 's/^#if.*XOPEN.*$/#if 1/' \ -i $FUTURA/usr/include/curses.h cd ../ rm -rf ncurses-6.5 # 6.4. Bash-5.2.37 tar xf bash-5.2.37.tar.gz cd bash-5.2.37 ./configure --prefix=/usr \ --build=$FUTURA_TGT \ --host=$FUTURA_TGT \ --without-bash-malloc \ --libdir=/usr/lib64 make make DESTDIR=$FUTURA install ln -sv bash $FUTURA/bin/sh cd .. rm -rf bash-5.2.37 # 6.5. Coreutils-9.5 tar xf coreutils-9.5.tar.xz cd coreutils-9.5 ./configure --prefix=/usr \ --host=$FUTURA_TGT \ --build=$FUTURA_TGT \ --enable-install-program=hostname \ --enable-no-install-program=kill,uptime \ --libdir=/usr/lib64 make make DESTDIR=$FUTURA install mv -v $FUTURA/usr/bin/chroot $FUTURA/usr/sbin mkdir -pv $FUTURA/usr/share/man/man8 mv -v $FUTURA/usr/share/man/man1/chroot.1 $FUTURA/usr/share/man/man8/chroot.8 sed -i 's/"1"/"8"/' $FUTURA/usr/share/man/man8/chroot.8 cd ../ rm -rf coreutils-9.5 # 6.6. Diffutils-3.10 tar xf diffutils-3.10.tar.xz cd diffutils-3.10 ./configure --prefix=/usr \ --host=$FUTURA_TGT \ --build=$FUTURA_TGT \ --libdir=/usr/lib64 make make DESTDIR=$FUTURA install cd .. rm -rf diffutils-3.10 # 6.7. File-5.45 tar xf file-5.45.tar.gz cd file-5.45 mkdir build pushd build ../configure --disable-bzlib \ --disable-libseccomp \ --disable-xzlib \ --disable-zlib make popd ./configure --prefix=/usr \ --host=$FUTURA_TGT \ --build=$FUTURA_TGT \ --libdir=/usr/lib64 make make DESTDIR=$FUTURA install rm -v $FUTURA/usr/lib64/libmagic.la cd .. rm -rf file-5.45 # 6.8. Findutils-4.10.0 tar xf findutils-4.10.0.tar.xz cd findutils-4.10.0 ./configure --prefix=/usr \ --localstatedir=/var/lib/locate \ --host=$FUTURA_TGT \ --build=$FUTURA_TGT \ --libdir=/usr/lib64 make make DESTDIR=$FUTURA install cd .. rm -rf findutils-4.10.0 # 6.9. Gawk-5.3.1 tar xf gawk-5.3.1.tar.xz cd gawk-5.3.1 sed -i 's/extras//' Makefile.in ./configure --prefix=/usr \ --host=$FUTURA_TGT \ --build=$FUTURA_TGT \ --libdir=/usr/lib64 make make DESTDIR=$FUTURA install cd .. rm -rf gawk-5.3.1 # 6.10. Grep-3.11 tar xf grep-3.11.tar.xz cd grep-3.11 ./configure --prefix=/usr \ --host=$FUTURA_TGT \ --build=$FUTURA_TGT \ --libdir=/usr/lib64 make make DESTDIR=$FUTURA install cd .. rm -rf grep-3.11 # 6.11. Gzip-1.13 tar xf gzip-1.13.tar.xz cd gzip-1.13 ./configure --prefix=/usr \ --host=$FUTURA_TGT \ --build=$FUTURA_TGT \ --libdir=/usr/lib64 make make DESTDIR=$FUTURA install cd .. rm -rf gzip-1.13 # 6.12. Make-4.4.1 tar xf make-4.4.1.tar.gz cd make-4.4.1 ./configure --prefix=/usr \ --without-guile \ --host=$FUTURA_TGT \ --build=$FUTURA_TGT \ --libdir=/usr/lib64 make make DESTDIR=$FUTURA install cd .. rm -rf make-4.4.1 # 6.13. Patch-2.7.6 tar xf patch-2.7.6.tar.xz cd patch-2.7.6 ./configure --prefix=/usr \ --host=$FUTURA_TGT \ --build=$FUTURA_TGT \ --libdir=/usr/lib64 make make DESTDIR=$FUTURA install cd .. rm -rf patch-2.7.6 # 6.14. Sed-4.9 tar xf sed-4.9.tar.xz cd sed-4.9 ./configure --prefix=/usr \ --host=$FUTURA_TGT \ --build=$FUTURA_TGT \ --libdir=/usr/lib64 make make DESTDIR=$FUTURA install cd .. rm -rf sed-4.9 # 6.15. Tar-1.35 tar xf tar-1.35.tar.xz cd tar-1.35 ./configure --prefix=/usr \ --host=$FUTURA_TGT \ --build=$FUTURA_TGT \ --libdir=/usr/lib64 make make DESTDIR=$FUTURA install cd .. rm -rf tar-1.35 # 6.16. Xz-5.6.3 tar xf xz-5.6.3.tar.xz cd xz-5.6.3 ./configure --prefix=/usr \ --host=$FUTURA_TGT \ --build=$FUTURA_TGT \ --disable-static \ --disable-doc \ --libdir=/usr/lib64 make make DESTDIR=$FUTURA install rm -v $FUTURA/usr/lib64/liblzma.la cd .. rm -rf xz-5.6.3 # 6.17. Binutils-2.43.1 - 第二é tar xf binutils-2.43.1.tar.xz cd binutils-2.43.1 sed '6009s/$add_dir//' -i ltmain.sh mkdir -v build cd build ../configure \ --prefix=/usr \ --build=$FUTURA_TGT \ --host=$FUTURA_TGT \ --target=$FUTURA_TGT \ --disable-nls \ --enable-shared \ --enable-gprofng=no \ --disable-werror \ --enable-64-bit-bfd \ --enable-new-dtags \ --enable-default-hash-style=gnu \ --libdir=/usr/lib64 make make DESTDIR=$FUTURA install rm -v $FUTURA/usr/lib64/lib{bfd,ctf,ctf-nobfd,opcodes,sframe}.{a,la} cd ../../ rm -rf binutils-2.43.1 # 6.18. GCC-14.2.0 - 第二é tar xf gcc-14.2.0.tar.xz cd gcc-14.2.0 tar -xf ../mpfr-4.2.1.tar.xz mv -v mpfr-4.2.1 mpfr tar -xf ../gmp-6.3.0.tar.xz mv -v gmp-6.3.0 gmp tar -xf ../mpc-1.3.1.tar.gz mv -v mpc-1.3.1 mpc sed '/thread_header =/s/@.*@/gthr-posix.h/' \ -i libgcc/Makefile.in libstdc++-v3/include/Makefile.in mkdir -v build cd build ../configure \ --build=$FUTURA_TGT \ --host=$FUTURA_TGT \ --target=$FUTURA_TGT \ LDFLAGS_FOR_TARGET=-L$PWD/$FUTURA_TGT/libgcc \ --prefix=/usr \ --with-build-sysroot=$FUTURA \ --enable-default-pie \ --enable-default-ssp \ --disable-nls \ --disable-multilib \ --disable-libatomic \ --disable-libgomp \ --disable-libquadmath \ --disable-libsanitizer \ --disable-libssp \ --disable-libvtv \ --enable-languages=c,c++ \ --libdir=/usr/lib64 && make && make DESTDIR=$FUTURA install && ln -sv gcc $FUTURA/usr/bin/cc cd ../../ rm-rf gcc-14.2.0 # 7.2. 改å˜æ‰€æœ‰è€… exit chown --from futura -R root:root /mnt/{usr,lib,lib64,var,etc,bin,sbin,tools} # 7.3. å‡†å¤‡è™šæ‹Ÿå†…æ ¸æ–‡ä»¶ç³»ç»Ÿ mkdir -pv /mnt/{dev,proc,sys,run} mount -v --bind /dev /mnt/dev mount -vt devpts devpts -o gid=5,mode=0620 /mnt/dev/pts mount -vt proc proc /mnt/proc mount -vt sysfs sysfs /mnt/sys mount -vt tmpfs tmpfs /mnt/run if [ -h /mnt/dev/shm ]; then install -v -d -m 1777 /mnt$(realpath /dev/shm) else mount -vt tmpfs -o nosuid,nodev tmpfs /mnt/dev/shm fi chroot "/mnt" /usr/bin/env -i \ HOME=/root \ TERM="$TERM" \ PS1='(futura chroot) \u:\w\$ ' \ PATH=/usr/bin:/usr/sbin \ MAKEFLAGS="-j$(nproc)" \ CHOST=${CHOST} \ /bin/bash --login mkdir -pv /{boot,home,mnt,opt,srv} mkdir -pv /etc/{opt,sysconfig} mkdir -pv /usr/lib/firmware mkdir -pv /media/{floppy,cdrom} mkdir -pv /usr/include mkdir -pv /usr/lib/locale mkdir -pv /usr/share/{color,dict,doc,info,locale,man} mkdir -pv /usr/share/{misc,terminfo,zoneinfo} mkdir -pv /usr/share/man/man{1..8} mkdir -pv /var/{cache,local,log,mail,opt,spool} mkdir -pv /var/lib/{color,misc,locate} ln -sfv /run /var/run ln -sfv /run/lock /var/lock install -dv -m 0750 /root install -dv -m 1777 /tmp /var/tmp ln -sv /proc/self/mounts /etc/mtab cat > /etc/passwd << "EOF" root:x:0:0:root:/root:/bin/bash futura:x:1000:1000::/home/futura:/bin/bash EOF cat > /etc/group << "EOF" root:x:0: futura:x:1000 EOF install -o futura -g futura -d /home/futura localedef -i C -f UTF-8 C.UTF-8 exec /usr/bin/bash --login touch /var/log/{btmp,lastlog,faillog,wtmp} chgrp -v utmp /var/log/lastlog chmod -v 664 /var/log/lastlog chmod -v 600 /var/log/btmp # 7.7. Gettext-0.22.5 tar xf gettext-0.22.5.tar.xz cd gettext-0.22.5 ./configure --prefix=/usr \ --disable-shared \ --libdir=/usr/lib64 \ --{build,host}=${CHOST} make cp -v gettext-tools/src/{msgfmt,msgmerge,xgettext} /usr/bin cd .. rm -rf gettext-0.22.5 # 7.8. Bison-3.8.2 tar xf bison-3.8.2.tar.xz cd bison-3.8.2 ./configure --prefix=/usr \ --docdir=/usr/share/doc/bison-3.8.2 \ --libdir=/usr/lib64 \ --{build,host}=${CHOST} make make install cd .. rm -rf bison-3.8.2 # 7.9. Perl-5.40.0 tar xf perl-5.40.0.tar.xz cd perl-5.40.0 sh Configure -des \ -D prefix=/usr \ -D vendorprefix=/usr \ -D useshrplib \ -D privlib=/usr/lib64/perl5/5.40/core_perl \ -D archlib=/usr/lib64/perl5/5.40/core_perl \ -D sitelib=/usr/lib64/perl5/5.40/site_perl \ -D sitearch=/usr/lib64/perl5/5.40/site_perl \ -D vendorlib=/usr/lib64/perl5/5.40/vendor_perl \ -D vendorarch=/usr/lib64/perl5/5.40/vendor_perl \ -D cc=${CHOST}-gcc make make install cd .. rm -rf perl-5.40.0 # libarchive-3.7.7 tar xf libarchive-3.7.7.tar.xz cd libarchive-3.7.7 ./configure --prefix=/usr \ --disable-static \ --libdir=/usr/lib64 \ --{build,host}=${CHOST} make make install cd .. rm -rf libarchive-3.7.7 # Zlib-1.3.1 tar xf zlib-1.3.1.tar.gz cd zlib-1.3.1 CC="${CHOST}-gcc" ./configure --prefix=/usr --libdir=/usr/lib64 make make install rm -fv /usr/lib64/libz.a cd .. rm -rf zlib-1.3.1 # OpenSSL-3.4.0 tar xf openssl-3.4.0.tar.gz cd openssl-3.4.0 CC="${CHOST}-gcc" \ ./config --prefix=/usr \ --openssldir=/etc/ssl \ --libdir=lib64 \ shared \ zlib-dynamic \ linux-x86_64 make sed -i '/INSTALL_LIBS/s/libcrypto.a libssl.a//' Makefile make MANSUFFIX=ssl install cd .. rm -rf openssl-3.4.0 # cURL-8.11.0 tar xf curl-8.11.0.tar.xz cd curl-8.11.0 ./configure --prefix=/usr \ --disable-static \ --with-openssl \ --without-libpsl \ --libdir=/usr/lib64 \ --{build,host}=${CHOST} make make install cd .. rm -rf curl-8.11.0 # Libcap-2.71 tar xf libcap-2.71.tar.xz cd libcap-2.71 sed -i '/install -m.*STA/d' libcap/Makefile make CC="${CHOST}-gcc" prefix=/usr lib=lib64 make CC="${CHOST}-gcc" prefix=/usr lib=lib64 install cd .. rm -rf libcap-1.71 # fakeroot-1.36 tar xf fakeroot_1.36.orig.tar.gz cd fakeroot-1.36 ./configure --prefix=/usr \ --libdir=/usr/lib64 \ --disable-static \ --with-ipc=sysv \ --{build,host}=${CHOST} make make install cd .. rm -rf fakeroot-1.36 # Libffi-3.4.6 tar xf libffi-3.4.6.tar.gz cd libffi-3.4.6 ./configure --prefix=/usr \ --disable-static \ --with-gcc-arch=native \ --disable-exec-static-tramp \ --libdir=/usr/lib64 \ --{build,host}=${CHOST} make make install cd .. rm -rf libffi-3.4.6 # Pkgconf-2.3.0 tar xf pkgconf-2.3.0.tar.xz cd pkgconf-2.3.0 ./configure --prefix=/usr \ --disable-static \ --docdir=/usr/share/doc/pkgconf-2.3.0 \ --libdir=/usr/lib64 \ --{build,host}=${CHOST} && make && make install && ln -sv pkgconf /usr/bin/pkg-config ln -sv pkgconf /usr/bin/${CHOST}-pkg-config ln -sv pkgconf.1 /usr/share/man/man1/pkg-config.1 cd .. rm -rf pkgconf-2.3.0 # Python-3.13.0 tar xf Python-3.13.0.tar.xz cd Python-3.13.0 patch -Np1 -i ../python-3.13.0-site-packages-lib64.patch ./configure --prefix=/usr \ --enable-shared \ --without-ensurepip \ --with-platlibdir=lib64 \ --libdir=/usr/lib64 \ --{build,host}=${CHOST} && make && make install cd .. rm -rf Python-3.13.0 # Ninja-1.12.1 tar xf ninja-1.12.1.tar.gz cd ninja-1.12.1 python3 configure.py --bootstrap install -vm755 ninja /usr/bin/ cd .. rm -rf ninja-1.12.1 # Meson-1.6.0 tar xf meson-1.6.0.tar.gz cd meson-1.6.0 cp meson.py /usr/bin/meson cp -rv mesonbuild /usr/bin install -vdm755 /usr/share/meson/cross cat > /usr/share/meson/cross/meson_crossfile << EOF [binaries] c = 'x86_64-futura-linux-gnu-gcc' cpp = 'x86_64-futura-linux-gnu-g++' ar = 'x86_64-futura-linux-gnu-gcc-ar' nm = 'x86_64-futura-linux-gnu-gcc-nm' ranlib = 'x86_64-futura-linux-gnu-gcc-ranlib' pkg-config = 'x86_64-futura-linux-gnu-pkg-config' [properties] needs_exe_wrapper = true [host_machine] system = 'linux' cpu_family = 'x86_64' cpu = 'x86_64' endian = 'little' EOF cat > /usr/bin/futura-meson << EOF exec meson setup --cross-file=meson_crossfile "\$@" EOF chmod +x /usr/bin/futura-meson cd .. rm -rf meson-1.6.0 # pacman-7.0.0 tar xf pacman-v7.0.0.tar.gz cd pacman-v7.0.0 futura-meson build \ --prefix=/usr \ --libdir=/usr/lib64 \ --buildtype=plain \ -Dcrypto=openssl \ -Ddoc=disabled \ -Dgpgme=disabled \ -Dscriptlet-shell=/usr/bin/bash \ -Dldconfig=/usr/sbin/ldconfig && meson compile -C build && meson install -C build cd .. rm -rf pacman-v7.0.0 # 7.11. Texinfo-7.1.1 tar xf texinfo-7.1.1.tar.xz cd texinfo-7.1.1 ./configure --prefix=/usr \ --libdir=/usr/lib64 \ --{build,host}=${CHOST} && make && make install cd .. rm -rf texinfo-7.1.1 # 7.12. Util-linux-2.40.2 tar xf util-linux-2.40.2.tar.xz cd util-linux-2.40.2 mkdir -pv /var/lib/hwclock ./configure --prefix=/usr \ --libdir=/usr/lib64 \ --runstatedir=/run \ --disable-chfn-chsh \ --disable-login \ --disable-nologin \ --disable-su \ --disable-setpriv \ --disable-runuser \ --disable-pylibmount \ --disable-static \ --disable-liblastlog2 \ --without-python \ ADJTIME_PATH=/var/lib/hwclock/adjtime \ --bindir=/usr/bin \ --sbindir=/usr/sbin \ --docdir=/usr/share/doc/util-linux-2.40.2 && make && make install cd .. rm -rf util-linux-2.40.2 # vim-9.1.0848 tar xf vim-9.1.0848.tar.gz cd vim-9.1.0848 echo '#define SYS_VIMRC_FILE "/etc/vimrc"' >> src/feature.h ./configure --prefix=/usr \ --libdir=/usr/lib64 \ --{build,host}=${CHOST} && make && make install cat > /etc/vimrc << "EOF" " Begin /etc/vimrc " Ensure defaults are set before customizing settings, not after source $VIMRUNTIME/defaults.vim let skip_defaults_vim=1 set nocompatible set backspace=2 set mouse= syntax on if (&term == "xterm") || (&term == "putty") set background=dark endif set tabstop=4 set shiftwidth=4 set expandtab set autoindent set smartindent " End /etc/vimrc EOF cd .. rm -rf vim-9.1.0848 # 7.13. 清ç†å’Œå¤‡ä»½ä¸´æ—¶ç³»ç»Ÿ rm -rf /usr/share/{info,man,doc}/* find /usr/{lib64,libexec} -name \*.la -delete rm -rf /tools install -vdm755 /usr/share/gdb/auto-load/usr/lib64 mv -v /usr/lib64/*gdb.py /usr/share/gdb/auto-load/usr/lib64 # 7.13.2. 备份 exit mountpoint -q /mnt/dev/shm && umount /mnt/dev/shm umount /mnt/dev/pts umount /mnt/{sys,proc,run,dev} cd /mnt tar -cJpf $HOME/futura-temp-tools-systemd-pacman-202411142247.tar.xz bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var sources/makepkg.conf sources/pacman.conf sources/futura-build-options.conf # 7.13.3. 还原 cd /mnt rm -rf ./* tar -xpf $HOME/futura-temp-tools-r12.2-26-systemd-pacman.tar.xz