From 23a5e434f80a7023d06ea8999f97e2e60442878f Mon Sep 17 00:00:00 2001 From: 0xTux <0xTux@pm.me> Date: Fri, 11 Feb 2022 23:59:50 +0530 Subject: [PATCH] initial commit --- LICENSE | 21 ++ README.md | 3 + .../fonts/conf.d/10-powerline-symbols.conf | 105 +++++++ airootfs/etc/fstab | 0 airootfs/etc/hostname | 1 + airootfs/etc/locale.conf | 1 + airootfs/etc/machine-id | 0 airootfs/etc/skel/.bash_profile | 7 + airootfs/etc/skel/.bashrc | 49 +++ airootfs/etc/skel/.vimrc | 3 + airootfs/etc/skel/.xinitrc | 15 + airootfs/etc/skel/.xsession | 9 + airootfs/etc/sudoers.d/g_wheel | 1 + airootfs/etc/udev/rules.d/81-dhcpcd.rules | 1 + airootfs/root/customize_airootfs.sh | 38 +++ build.sh | 279 ++++++++++++++++++ efiboot/loader/entries/archiso-x86_64-cd.conf | 5 + .../loader/entries/archiso-x86_64-usb.conf | 5 + .../loader/entries/uefi-shell-v1-x86_64.conf | 2 + .../loader/entries/uefi-shell-v2-x86_64.conf | 2 + efiboot/loader/loader.conf | 2 + isolinux/isolinux.cfg | 6 + mkinitcpio.conf | 2 + packages.both | 157 ++++++++++ packages.i686 | 0 packages.x86_64 | 0 pacman.conf | 88 ++++++ syslinux/archiso.cfg | 11 + syslinux/archiso_head.cfg | 25 ++ syslinux/archiso_pxe.cfg | 36 +++ syslinux/archiso_sys.cfg | 13 + syslinux/archiso_tail.cfg | 27 ++ syslinux/splash.png | Bin 0 -> 53545 bytes syslinux/syslinux.cfg | 5 + 34 files changed, 919 insertions(+) create mode 100644 LICENSE create mode 100644 README.md create mode 100644 airootfs/etc/fonts/conf.d/10-powerline-symbols.conf create mode 100644 airootfs/etc/fstab create mode 100644 airootfs/etc/hostname create mode 100644 airootfs/etc/locale.conf create mode 100644 airootfs/etc/machine-id create mode 100644 airootfs/etc/skel/.bash_profile create mode 100644 airootfs/etc/skel/.bashrc create mode 100644 airootfs/etc/skel/.vimrc create mode 100644 airootfs/etc/skel/.xinitrc create mode 100644 airootfs/etc/skel/.xsession create mode 100644 airootfs/etc/sudoers.d/g_wheel create mode 100644 airootfs/etc/udev/rules.d/81-dhcpcd.rules create mode 100644 airootfs/root/customize_airootfs.sh create mode 100644 build.sh create mode 100644 efiboot/loader/entries/archiso-x86_64-cd.conf create mode 100644 efiboot/loader/entries/archiso-x86_64-usb.conf create mode 100644 efiboot/loader/entries/uefi-shell-v1-x86_64.conf create mode 100644 efiboot/loader/entries/uefi-shell-v2-x86_64.conf create mode 100644 efiboot/loader/loader.conf create mode 100644 isolinux/isolinux.cfg create mode 100644 mkinitcpio.conf create mode 100644 packages.both create mode 100644 packages.i686 create mode 100644 packages.x86_64 create mode 100644 pacman.conf create mode 100644 syslinux/archiso.cfg create mode 100644 syslinux/archiso_head.cfg create mode 100644 syslinux/archiso_pxe.cfg create mode 100644 syslinux/archiso_sys.cfg create mode 100644 syslinux/archiso_tail.cfg create mode 100644 syslinux/splash.png create mode 100644 syslinux/syslinux.cfg diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..a4c3478 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017 Appletneo + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..5cd92f5 --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# tuxOS + +64-bit source code for the tuxOS diff --git a/airootfs/etc/fonts/conf.d/10-powerline-symbols.conf b/airootfs/etc/fonts/conf.d/10-powerline-symbols.conf new file mode 100644 index 0000000..7e34a12 --- /dev/null +++ b/airootfs/etc/fonts/conf.d/10-powerline-symbols.conf @@ -0,0 +1,105 @@ + + + + + + monospace + PowerlineSymbols + + + Droid Sans Mono + PowerlineSymbols + + + Droid Sans Mono Slashed + PowerlineSymbols + + + Droid Sans Mono Dotted + PowerlineSymbols + + + DejaVu Sans Mono + PowerlineSymbols + + + DejaVu Sans Mono + PowerlineSymbols + + + Envy Code R + PowerlineSymbols + + + Inconsolata + PowerlineSymbols + + + Lucida Console + PowerlineSymbols + + + Monaco + PowerlineSymbols + + + Pragmata + PowerlineSymbols + + + PragmataPro + PowerlineSymbols + + + Menlo + PowerlineSymbols + + + Source Code Pro + PowerlineSymbols + + + Consolas + PowerlineSymbols + + + Anonymous pro + PowerlineSymbols + + + Bitstream Vera Sans Mono + PowerlineSymbols + + + Liberation Mono + PowerlineSymbols + + + Ubuntu Mono + PowerlineSymbols + + + Meslo LG L + PowerlineSymbols + + + Meslo LG L DZ + PowerlineSymbols + + + Meslo LG M + PowerlineSymbols + + + Meslo LG M DZ + PowerlineSymbols + + + Meslo LG S + PowerlineSymbols + + + Meslo LG S DZ + PowerlineSymbols + + diff --git a/airootfs/etc/fstab b/airootfs/etc/fstab new file mode 100644 index 0000000..e69de29 diff --git a/airootfs/etc/hostname b/airootfs/etc/hostname new file mode 100644 index 0000000..885c883 --- /dev/null +++ b/airootfs/etc/hostname @@ -0,0 +1 @@ +tuxOS diff --git a/airootfs/etc/locale.conf b/airootfs/etc/locale.conf new file mode 100644 index 0000000..01ec548 --- /dev/null +++ b/airootfs/etc/locale.conf @@ -0,0 +1 @@ +LANG=en_US.UTF-8 diff --git a/airootfs/etc/machine-id b/airootfs/etc/machine-id new file mode 100644 index 0000000..e69de29 diff --git a/airootfs/etc/skel/.bash_profile b/airootfs/etc/skel/.bash_profile new file mode 100644 index 0000000..a0ef212 --- /dev/null +++ b/airootfs/etc/skel/.bash_profile @@ -0,0 +1,7 @@ +# +# ~/.bash_profile +# + +[[ -f ~/.bashrc ]] && . ~/.bashrc + +[[ -z $DISPLAY && $XDG_VTNR -eq 1 ]] && exec startx \ No newline at end of file diff --git a/airootfs/etc/skel/.bashrc b/airootfs/etc/skel/.bashrc new file mode 100644 index 0000000..3ad765c --- /dev/null +++ b/airootfs/etc/skel/.bashrc @@ -0,0 +1,49 @@ +# +# ~/.bashrc +# + +# If not running interactively, don't do anything +[[ $- != *i* ]] && return + +# environment variables +export EDITOR="$(if [[ -n $DISPLAY ]]; then echo 'leafpad'; else echo 'nano'; fi)" # leafpad, nano + +PS1='\[\e[0;32m\]\u\[\e[m\] \[\e[1;34m\]\w\[\e[m\] \[\e[1;32m\]\$\[\e[m\] \[\e[1;37m\]' + +# pacman aliases (if desired, adapt for your favourite AUR helper) +alias pac="sudo /usr/bin/pacman -S" # default action - install one or more packages +alias pacu="sudo /usr/bin/pacman -Syu" # '[u]pdate' - upgrade all packages to their newest version +alias pacr="sudo /usr/bin/pacman -Rns" # '[r]emove' - uninstall one or more packages +alias pacs="/usr/bin/pacman -Ss" # '[s]earch' - search for a package using one or more keywords +alias paci="/usr/bin/pacman -Si" # '[i]nfo' - show information about a package +alias paclo="/usr/bin/pacman -Qdt" # '[l]ist [o]rphans' - list all packages which are orphaned +alias pacc="sudo /usr/bin/pacman -Scc" # '[c]lean cache' - delete all not currently installed package files +alias paclf="/usr/bin/pacman -Ql" # '[l]ist [f]iles' - list all files installed by a given package +alias pacexpl="sudo /usr/bin/pacman -D --asexp" # 'mark as [expl]icit' - mark one or more packages as explicitly installed +alias pacimpl="sudo /usr/bin/pacman -D --asdep" # 'mark as [impl]icit' - mark one or more packages as non explicitly installed + +# '[r]emove [o]rphans' - recursively remove ALL orphaned packages +alias pacro="/usr/bin/pacman -Qtdq > /dev/null && sudo /usr/bin/pacman -Rns \$(/usr/bin/pacman -Qtdq | sed -e ':a;N;$!ba;s/\n/ /g')" + +# Custom +alias led='leafpad ~/.bashrc' +alias bsu='source ~/.bashrc' +alias psync='sudo pacman -Syy' +alias paco='sudo pacman -Sc && sudo pacman-optimize' +alias pcf='profile-cleaner f' +alias pcc='profile-cleaner c' +alias pcg='profile-cleaner gc' +alias yd='youtube-dl' +alias lcp='sudo localepurge' +alias lcc='sudo /usr/bin/localepurge-config' +alias speed='speedtest-cli' +alias q='exit' +alias md='sudo updatedb' +alias fig='sudo leafpad /etc/pacman.conf' +alias yrt='yaourt -S' + +#powerline +powerline-daemon -q +POWERLINE_BASH_CONTINUATION=1 +POWERLINE_BASH_SELECT=1 +. /usr/lib/python3.6/site-packages/powerline/bindings/bash/powerline.sh \ No newline at end of file diff --git a/airootfs/etc/skel/.vimrc b/airootfs/etc/skel/.vimrc new file mode 100644 index 0000000..0e98664 --- /dev/null +++ b/airootfs/etc/skel/.vimrc @@ -0,0 +1,3 @@ +set rtp+=/usr/lib/python3.6/site-packages/powerline/bindings/vim/ +set laststatus=2 +set t_Co=256 \ No newline at end of file diff --git a/airootfs/etc/skel/.xinitrc b/airootfs/etc/skel/.xinitrc new file mode 100644 index 0000000..1f3f5c2 --- /dev/null +++ b/airootfs/etc/skel/.xinitrc @@ -0,0 +1,15 @@ + +#!/bin/sh +# +# ~/.xinitrc +# +# Executed by startx (run your window manager from here) + +if [ -d /etc/X11/xinit/xinitrc.d ]; then + for f in /etc/X11/xinit/xinitrc.d/*; do + [ -x "$f" ] && . "$f" + done + unset f +fi + +exec i3 diff --git a/airootfs/etc/skel/.xsession b/airootfs/etc/skel/.xsession new file mode 100644 index 0000000..e4aaa14 --- /dev/null +++ b/airootfs/etc/skel/.xsession @@ -0,0 +1,9 @@ +#!/bin/sh + +# +# ~/.xsession +# +# Executed by xdm/gdm/kdm at login +# + +/bin/bash --login -i ~/.xinitrc \ No newline at end of file diff --git a/airootfs/etc/sudoers.d/g_wheel b/airootfs/etc/sudoers.d/g_wheel new file mode 100644 index 0000000..03c473b --- /dev/null +++ b/airootfs/etc/sudoers.d/g_wheel @@ -0,0 +1 @@ +%wheel ALL=(ALL) NOPASSWD: ALL \ No newline at end of file diff --git a/airootfs/etc/udev/rules.d/81-dhcpcd.rules b/airootfs/etc/udev/rules.d/81-dhcpcd.rules new file mode 100644 index 0000000..1c4053c --- /dev/null +++ b/airootfs/etc/udev/rules.d/81-dhcpcd.rules @@ -0,0 +1 @@ +ACTION=="add", SUBSYSTEM=="net", ENV{INTERFACE}=="en*|eth*", ENV{SYSTEMD_WANTS}="dhcpcd@$name.service" diff --git a/airootfs/root/customize_airootfs.sh b/airootfs/root/customize_airootfs.sh new file mode 100644 index 0000000..bedbc81 --- /dev/null +++ b/airootfs/root/customize_airootfs.sh @@ -0,0 +1,38 @@ +#!/bin/bash + +set -e -u +sed -i 's/#\(en_US\.UTF-8\)/\1/' /etc/locale.gen +locale-gen +ln -sf /usr/share/zoneinfo/UTC /etc/localtime +usermod -s /usr/bin/bash root +cp -aT /etc/skel/ /root/ + +#Create Liveuser +useradd -m -p "" -g users -G "adm,audio,floppy,log,network,rfkill,scanner,storage,optical,power,wheel" -s /bin/bash liveuser +#chmod 700 /root +chown -R liveuser:users /home/liveuser + +#Load Appletneo Configuration +#cd /usr/bin +#dconf load / < desktop.dconf +#cd - + +#tuxOS Name +sed -i.bak 's/Arch Linux/tux OS/g' /usr/lib/os-release +sed -i.bak 's/ID=arch/ID=tux/g' /usr/lib/os-release +sed -i.bak 's/ID_LIKE=archlinux/ID_LIKE=tuxlinux/g' /usr/lib/os-release +sed -i.bak 's/www.archlinux.org/www.appletneo.com/g' /usr/lib/os-release +sed -i.bak 's/bbs.archlinux.org/www.appletneo.com/g' /usr/lib/os-release +sed -i.bak 's/bugs.archlinux.org/www.appletneo.com/g' /usr/lib/os-release +#cp /usr/lib/os-release /etc/os-release + +sed -i 's/#\(PermitRootLogin \).\+/\1yes/' /etc/ssh/sshd_config +sed -i "s/#Server/Server/g" /etc/pacman.d/mirrorlist +sed -i 's/#\(Storage=\)auto/\1volatile/' /etc/systemd/journald.conf + +sed -i 's/#\(HandleSuspendKey=\)suspend/\1ignore/' /etc/systemd/logind.conf +sed -i 's/#\(HandleHibernateKey=\)hibernate/\1ignore/' /etc/systemd/logind.conf +sed -i 's/#\(HandleLidSwitch=\)suspend/\1ignore/' /etc/systemd/logind.conf + +#systemctl enable pacman-init.service choose-mirror.service +systemctl set-default multi-user.target diff --git a/build.sh b/build.sh new file mode 100644 index 0000000..29b44db --- /dev/null +++ b/build.sh @@ -0,0 +1,279 @@ +#!/bin/bash + +set -e -u + +iso_name=tuxOS +iso_label="tuxOS_$(date +%Y%m)" +iso_version=$(date +%Y.%m.%d) +install_dir=arch +work_dir=work +out_dir=out +gpg_key= + +arch=$(uname -m) +verbose="" +script_path=$(readlink -f ${0%/*}) + +_usage () +{ + echo "usage ${0} [options]" + echo + echo " General options:" + echo " -N Set an iso filename (prefix)" + echo " Default: ${iso_name}" + echo " -V Set an iso version (in filename)" + echo " Default: ${iso_version}" + echo " -L Set an iso label (disk label)" + echo " Default: ${iso_label}" + echo " -D Set an install_dir (directory inside iso)" + echo " Default: ${install_dir}" + echo " -w Set the working directory" + echo " Default: ${work_dir}" + echo " -o Set the output directory" + echo " Default: ${out_dir}" + echo " -v Enable verbose output" + echo " -h This help message" + exit ${1} +} + +# Helper function to run make_*() only one time per architecture. +run_once() { + if [[ ! -e ${work_dir}/build.${1}_${arch} ]]; then + $1 + touch ${work_dir}/build.${1}_${arch} + fi +} + +# Setup custom pacman.conf with current cache directories. +make_pacman_conf() { + local _cache_dirs + _cache_dirs=($(pacman -v 2>&1 | grep '^Cache Dirs:' | sed 's/Cache Dirs:\s*//g')) + sed -r "s|^#?\\s*CacheDir.+|CacheDir = $(echo -n ${_cache_dirs[@]})|g" ${script_path}/pacman.conf > ${work_dir}/pacman.conf +} + +# Base installation, plus needed packages (airootfs) +make_basefs() { + setarch ${arch} mkarchiso ${verbose} -w "${work_dir}/${arch}" -C "${work_dir}/pacman.conf" -D "${install_dir}" init + setarch ${arch} mkarchiso ${verbose} -w "${work_dir}/${arch}" -C "${work_dir}/pacman.conf" -D "${install_dir}" -p "haveged intel-ucode memtest86+ mkinitcpio-nfs-utils nbd zsh" install +} + +# Additional packages (airootfs) +make_packages() { + setarch ${arch} mkarchiso ${verbose} -w "${work_dir}/${arch}" -C "${work_dir}/pacman.conf" -D "${install_dir}" -p "$(grep -h -v ^# ${script_path}/packages.{both,${arch}})" install +} + +# Needed packages for x86_64 EFI boot +make_packages_efi() { + setarch ${arch} mkarchiso ${verbose} -w "${work_dir}/${arch}" -C "${work_dir}/pacman.conf" -D "${install_dir}" -p "efitools" install +} + +# Copy mkinitcpio archiso hooks and build initramfs (airootfs) +make_setup_mkinitcpio() { + local _hook + mkdir -p ${work_dir}/${arch}/airootfs/etc/initcpio/hooks + mkdir -p ${work_dir}/${arch}/airootfs/etc/initcpio/install + for _hook in archiso archiso_shutdown archiso_pxe_common archiso_pxe_nbd archiso_pxe_http archiso_pxe_nfs archiso_loop_mnt; do + cp /usr/lib/initcpio/hooks/${_hook} ${work_dir}/${arch}/airootfs/etc/initcpio/hooks + cp /usr/lib/initcpio/install/${_hook} ${work_dir}/${arch}/airootfs/etc/initcpio/install + done + sed -i "s|/usr/lib/initcpio/|/etc/initcpio/|g" ${work_dir}/${arch}/airootfs/etc/initcpio/install/archiso_shutdown + cp /usr/lib/initcpio/install/archiso_kms ${work_dir}/${arch}/airootfs/etc/initcpio/install + cp /usr/lib/initcpio/archiso_shutdown ${work_dir}/${arch}/airootfs/etc/initcpio + cp ${script_path}/mkinitcpio.conf ${work_dir}/${arch}/airootfs/etc/mkinitcpio-archiso.conf + gnupg_fd= + if [[ ${gpg_key} ]]; then + gpg --export ${gpg_key} >${work_dir}/gpgkey + exec 17<>${work_dir}/gpgkey + fi + ARCHISO_GNUPG_FD=${gpg_key:+17} setarch ${arch} mkarchiso ${verbose} -w "${work_dir}/${arch}" -C "${work_dir}/pacman.conf" -D "${install_dir}" -r 'mkinitcpio -c /etc/mkinitcpio-archiso.conf -k /boot/vmlinuz-linux -g /boot/archiso.img' run + if [[ ${gpg_key} ]]; then + exec 17<&- + fi +} + +# Customize installation (airootfs) +make_customize_airootfs() { + cp -af ${script_path}/airootfs ${work_dir}/${arch} + + curl -o ${work_dir}/${arch}/airootfs/etc/pacman.d/mirrorlist 'https://www.archlinux.org/mirrorlist/?country=all&protocol=http&use_mirror_status=on' + + lynx -dump -nolist 'https://wiki.archlinux.org/index.php/Installation_Guide?action=render' >> ${work_dir}/${arch}/airootfs/root/install.txt + + setarch ${arch} mkarchiso ${verbose} -w "${work_dir}/${arch}" -C "${work_dir}/pacman.conf" -D "${install_dir}" -r '/root/customize_airootfs.sh' run + rm ${work_dir}/${arch}/airootfs/root/customize_airootfs.sh +} + +# Prepare kernel/initramfs ${install_dir}/boot/ +make_boot() { + mkdir -p ${work_dir}/iso/${install_dir}/boot/${arch} + cp ${work_dir}/${arch}/airootfs/boot/archiso.img ${work_dir}/iso/${install_dir}/boot/${arch}/archiso.img + cp ${work_dir}/${arch}/airootfs/boot/vmlinuz-linux ${work_dir}/iso/${install_dir}/boot/${arch}/vmlinuz +} + +# Add other aditional/extra files to ${install_dir}/boot/ +make_boot_extra() { + cp ${work_dir}/${arch}/airootfs/boot/memtest86+/memtest.bin ${work_dir}/iso/${install_dir}/boot/memtest + cp ${work_dir}/${arch}/airootfs/usr/share/licenses/common/GPL2/license.txt ${work_dir}/iso/${install_dir}/boot/memtest.COPYING + cp ${work_dir}/${arch}/airootfs/boot/intel-ucode.img ${work_dir}/iso/${install_dir}/boot/intel_ucode.img + cp ${work_dir}/${arch}/airootfs/usr/share/licenses/intel-ucode/LICENSE ${work_dir}/iso/${install_dir}/boot/intel_ucode.LICENSE +} + +# Prepare /${install_dir}/boot/syslinux +make_syslinux() { + mkdir -p ${work_dir}/iso/${install_dir}/boot/syslinux + for _cfg in ${script_path}/syslinux/*.cfg; do + sed "s|%ARCHISO_LABEL%|${iso_label}|g; + s|%INSTALL_DIR%|${install_dir}|g" ${_cfg} > ${work_dir}/iso/${install_dir}/boot/syslinux/${_cfg##*/} + done + cp ${script_path}/syslinux/splash.png ${work_dir}/iso/${install_dir}/boot/syslinux + cp ${work_dir}/${arch}/airootfs/usr/lib/syslinux/bios/*.c32 ${work_dir}/iso/${install_dir}/boot/syslinux + cp ${work_dir}/${arch}/airootfs/usr/lib/syslinux/bios/lpxelinux.0 ${work_dir}/iso/${install_dir}/boot/syslinux + cp ${work_dir}/${arch}/airootfs/usr/lib/syslinux/bios/memdisk ${work_dir}/iso/${install_dir}/boot/syslinux + mkdir -p ${work_dir}/iso/${install_dir}/boot/syslinux/hdt + gzip -c -9 ${work_dir}/${arch}/airootfs/usr/share/hwdata/pci.ids > ${work_dir}/iso/${install_dir}/boot/syslinux/hdt/pciids.gz + gzip -c -9 ${work_dir}/${arch}/airootfs/usr/lib/modules/*-ARCH/modules.alias > ${work_dir}/iso/${install_dir}/boot/syslinux/hdt/modalias.gz +} + +# Prepare /isolinux +make_isolinux() { + mkdir -p ${work_dir}/iso/isolinux + sed "s|%INSTALL_DIR%|${install_dir}|g" ${script_path}/isolinux/isolinux.cfg > ${work_dir}/iso/isolinux/isolinux.cfg + cp ${work_dir}/${arch}/airootfs/usr/lib/syslinux/bios/isolinux.bin ${work_dir}/iso/isolinux/ + cp ${work_dir}/${arch}/airootfs/usr/lib/syslinux/bios/isohdpfx.bin ${work_dir}/iso/isolinux/ + cp ${work_dir}/${arch}/airootfs/usr/lib/syslinux/bios/ldlinux.c32 ${work_dir}/iso/isolinux/ +} + +# Prepare /EFI +make_efi() { + mkdir -p ${work_dir}/iso/EFI/boot + cp ${work_dir}/x86_64/airootfs/usr/share/efitools/efi/PreLoader.efi ${work_dir}/iso/EFI/boot/bootx64.efi + cp ${work_dir}/x86_64/airootfs/usr/share/efitools/efi/HashTool.efi ${work_dir}/iso/EFI/boot/ + + cp ${work_dir}/x86_64/airootfs/usr/lib/systemd/boot/efi/systemd-bootx64.efi ${work_dir}/iso/EFI/boot/loader.efi + + mkdir -p ${work_dir}/iso/loader/entries + cp ${script_path}/efiboot/loader/loader.conf ${work_dir}/iso/loader/ + cp ${script_path}/efiboot/loader/entries/uefi-shell-v2-x86_64.conf ${work_dir}/iso/loader/entries/ + cp ${script_path}/efiboot/loader/entries/uefi-shell-v1-x86_64.conf ${work_dir}/iso/loader/entries/ + + sed "s|%ARCHISO_LABEL%|${iso_label}|g; + s|%INSTALL_DIR%|${install_dir}|g" \ + ${script_path}/efiboot/loader/entries/archiso-x86_64-usb.conf > ${work_dir}/iso/loader/entries/archiso-x86_64.conf + + # EFI Shell 2.0 for UEFI 2.3+ + curl -o ${work_dir}/iso/EFI/shellx64_v2.efi https://raw.githubusercontent.com/tianocore/edk2/master/ShellBinPkg/UefiShell/X64/Shell.efi + # EFI Shell 1.0 for non UEFI 2.3+ + curl -o ${work_dir}/iso/EFI/shellx64_v1.efi https://raw.githubusercontent.com/tianocore/edk2/master/EdkShellBinPkg/FullShell/X64/Shell_Full.efi +} + +# Prepare efiboot.img::/EFI for "El Torito" EFI boot mode +make_efiboot() { + mkdir -p ${work_dir}/iso/EFI/archiso + truncate -s 64M ${work_dir}/iso/EFI/archiso/efiboot.img + mkfs.fat -n ARCHISO_EFI ${work_dir}/iso/EFI/archiso/efiboot.img + + mkdir -p ${work_dir}/efiboot + mount ${work_dir}/iso/EFI/archiso/efiboot.img ${work_dir}/efiboot + + mkdir -p ${work_dir}/efiboot/EFI/archiso + cp ${work_dir}/iso/${install_dir}/boot/x86_64/vmlinuz ${work_dir}/efiboot/EFI/archiso/vmlinuz.efi + cp ${work_dir}/iso/${install_dir}/boot/x86_64/archiso.img ${work_dir}/efiboot/EFI/archiso/archiso.img + + cp ${work_dir}/iso/${install_dir}/boot/intel_ucode.img ${work_dir}/efiboot/EFI/archiso/intel_ucode.img + + mkdir -p ${work_dir}/efiboot/EFI/boot + cp ${work_dir}/x86_64/airootfs/usr/share/efitools/efi/PreLoader.efi ${work_dir}/efiboot/EFI/boot/bootx64.efi + cp ${work_dir}/x86_64/airootfs/usr/share/efitools/efi/HashTool.efi ${work_dir}/efiboot/EFI/boot/ + + cp ${work_dir}/x86_64/airootfs/usr/lib/systemd/boot/efi/systemd-bootx64.efi ${work_dir}/efiboot/EFI/boot/loader.efi + + mkdir -p ${work_dir}/efiboot/loader/entries + cp ${script_path}/efiboot/loader/loader.conf ${work_dir}/efiboot/loader/ + cp ${script_path}/efiboot/loader/entries/uefi-shell-v2-x86_64.conf ${work_dir}/efiboot/loader/entries/ + cp ${script_path}/efiboot/loader/entries/uefi-shell-v1-x86_64.conf ${work_dir}/efiboot/loader/entries/ + + sed "s|%ARCHISO_LABEL%|${iso_label}|g; + s|%INSTALL_DIR%|${install_dir}|g" \ + ${script_path}/efiboot/loader/entries/archiso-x86_64-cd.conf > ${work_dir}/efiboot/loader/entries/archiso-x86_64.conf + + cp ${work_dir}/iso/EFI/shellx64_v2.efi ${work_dir}/efiboot/EFI/ + cp ${work_dir}/iso/EFI/shellx64_v1.efi ${work_dir}/efiboot/EFI/ + + umount -d ${work_dir}/efiboot +} + +# Build airootfs filesystem image +make_prepare() { + cp -a -l -f ${work_dir}/${arch}/airootfs ${work_dir} + setarch ${arch} mkarchiso ${verbose} -w "${work_dir}" -D "${install_dir}" pkglist + setarch ${arch} mkarchiso ${verbose} -w "${work_dir}" -D "${install_dir}" ${gpg_key:+-g ${gpg_key}} prepare + rm -rf ${work_dir}/airootfs + # rm -rf ${work_dir}/${arch}/airootfs (if low space, this helps) +} + +# Build ISO +make_iso() { + mkarchiso ${verbose} -w "${work_dir}" -D "${install_dir}" -L "${iso_label}" -o "${out_dir}" iso "${iso_name}-${iso_version}-x86_64.iso" +} + +if [[ ${EUID} -ne 0 ]]; then + echo "This script must be run as root." + _usage 1 +fi + +if [[ ${arch} != x86_64 ]]; then + echo "This script needs to be run on x86_64" + _usage 1 +fi + +while getopts 'N:V:L:D:w:o:g:vh' arg; do + case "${arg}" in + N) iso_name="${OPTARG}" ;; + V) iso_version="${OPTARG}" ;; + L) iso_label="${OPTARG}" ;; + D) install_dir="${OPTARG}" ;; + w) work_dir="${OPTARG}" ;; + o) out_dir="${OPTARG}" ;; + g) gpg_key="${OPTARG}" ;; + v) verbose="-v" ;; + h) _usage 0 ;; + *) + echo "Invalid argument '${arg}'" + _usage 1 + ;; + esac +done + +mkdir -p ${work_dir} + +run_once make_pacman_conf + +# Do all stuff for each airootfs +for arch in x86_64; do + run_once make_basefs + run_once make_packages +done + +run_once make_packages_efi + +for arch in x86_64; do + run_once make_setup_mkinitcpio + run_once make_customize_airootfs +done + +for arch in x86_64; do + run_once make_boot +done + +# Do all stuff for "iso" +run_once make_boot_extra +run_once make_syslinux +run_once make_isolinux +run_once make_efi +run_once make_efiboot + +for arch in x86_64; do + run_once make_prepare +done + +run_once make_iso diff --git a/efiboot/loader/entries/archiso-x86_64-cd.conf b/efiboot/loader/entries/archiso-x86_64-cd.conf new file mode 100644 index 0000000..9cf2efa --- /dev/null +++ b/efiboot/loader/entries/archiso-x86_64-cd.conf @@ -0,0 +1,5 @@ +title Appletneo OS x86_64 UEFI CD +linux /EFI/archiso/vmlinuz.efi +initrd /EFI/archiso/intel_ucode.img +initrd /EFI/archiso/archiso.img +options archisobasedir=%INSTALL_DIR% archisolabel=%ARCHISO_LABEL% diff --git a/efiboot/loader/entries/archiso-x86_64-usb.conf b/efiboot/loader/entries/archiso-x86_64-usb.conf new file mode 100644 index 0000000..a8bc954 --- /dev/null +++ b/efiboot/loader/entries/archiso-x86_64-usb.conf @@ -0,0 +1,5 @@ +title Appletneo OS x86_64 UEFI USB +linux /%INSTALL_DIR%/boot/x86_64/vmlinuz +initrd /%INSTALL_DIR%/boot/intel_ucode.img +initrd /%INSTALL_DIR%/boot/x86_64/archiso.img +options archisobasedir=%INSTALL_DIR% archisolabel=%ARCHISO_LABEL% diff --git a/efiboot/loader/entries/uefi-shell-v1-x86_64.conf b/efiboot/loader/entries/uefi-shell-v1-x86_64.conf new file mode 100644 index 0000000..9597ff2 --- /dev/null +++ b/efiboot/loader/entries/uefi-shell-v1-x86_64.conf @@ -0,0 +1,2 @@ +title UEFI Shell x86_64 v1 +efi /EFI/shellx64_v1.efi diff --git a/efiboot/loader/entries/uefi-shell-v2-x86_64.conf b/efiboot/loader/entries/uefi-shell-v2-x86_64.conf new file mode 100644 index 0000000..0dde77a --- /dev/null +++ b/efiboot/loader/entries/uefi-shell-v2-x86_64.conf @@ -0,0 +1,2 @@ +title UEFI Shell x86_64 v2 +efi /EFI/shellx64_v2.efi diff --git a/efiboot/loader/loader.conf b/efiboot/loader/loader.conf new file mode 100644 index 0000000..62c4a83 --- /dev/null +++ b/efiboot/loader/loader.conf @@ -0,0 +1,2 @@ +timeout 3 +default archiso-x86_64 diff --git a/isolinux/isolinux.cfg b/isolinux/isolinux.cfg new file mode 100644 index 0000000..10fd285 --- /dev/null +++ b/isolinux/isolinux.cfg @@ -0,0 +1,6 @@ +PATH /%INSTALL_DIR%/boot/syslinux/ +DEFAULT loadconfig + +LABEL loadconfig + CONFIG /%INSTALL_DIR%/boot/syslinux/archiso.cfg + APPEND /%INSTALL_DIR%/ diff --git a/mkinitcpio.conf b/mkinitcpio.conf new file mode 100644 index 0000000..d6fa64a --- /dev/null +++ b/mkinitcpio.conf @@ -0,0 +1,2 @@ +HOOKS="base udev memdisk archiso_shutdown archiso archiso_loop_mnt archiso_kms block pcmcia filesystems keyboard" +COMPRESSION="xz" diff --git a/packages.both b/packages.both new file mode 100644 index 0000000..9ae420f --- /dev/null +++ b/packages.both @@ -0,0 +1,157 @@ +##xorg-Packages +xorg-fonts +xorg-server +xorg-server-common +xorg-xinit +xorg-xkill +boost +boost-libs +icu +libmtp +xz +xterm + +##System +xf86-video-ati +xf86-video-dummy +xf86-video-fbdev +xf86-video-nouveau +xf86-video-openchrome +xf86-video-vesa +xf86-video-vmware +xf86-video-voodoo +xf86-input-libinput +xf86-input-synaptics +xf86-input-keyboard +xf86-input-vmmouse +xf86-input-mouse +laptop-detect +mlocate +reflector +tracker +linux-headers +broadcom-wl-dkms +lightdm + +##VBox +virtualbox-guest-modules-arch +virtualbox-guest-utils + +##GUI +i3 + +##Themes +numix-gtk-theme +arc-gtk-theme +arc-icon-theme + +##Fonts +ttf-dejavu +ttf-liberation +cantarell-fonts + +##Environment +bash-completion +ncdu +speedtest-cli +pulseaudio +pulseaudio-alsa +pavucontrol +volumeicon +powerline +python + +##Applications +vlc +gparted +leafpad +youtube-dl +p7zip +python-pip +neofetch + +##File-Management +xdg-user-dirs +gvfs +gamin +tumbler + +##System-Packages +arch-install-scripts +b43-fwcutter +btrfs-progs +clonezilla +crda +darkhttpd +ddrescue +dhclient +dialog +dmraid +dnsmasq +dnsutils +dosfstools +elinks +ethtool +exfat-utils +f2fs-tools +fsarchiver +gnu-netcat +gpm +gptfdisk +grml-zsh-config +grub +hdparm +ipw2100-fw +ipw2200-fw +irssi +lftp +linux-atm +lsscsi +mc +mtools +ndisc6 +nfs-utils +nilfs-utils +nmap +ntfs-3g +ntp +openconnect +openssh +openvpn +partclone +parted +partimage +ppp +pptpclient +refind-efi +rfkill +rp-pppoe +rsync +sdparm +sg3_utils +smartmontools +speedtouch +sudo +tcpdump +testdisk +usb_modeswitch +vim-minimal +vpnc +wget +wireless_tools +wpa_actiond +wvdial +xl2tpd +zd1211-firmware +make +m4 +autoconf +automake +binutils +bison +fakeroot +flex +gcc +patch +perl-error +git \ No newline at end of file diff --git a/packages.i686 b/packages.i686 new file mode 100644 index 0000000..e69de29 diff --git a/packages.x86_64 b/packages.x86_64 new file mode 100644 index 0000000..e69de29 diff --git a/pacman.conf b/pacman.conf new file mode 100644 index 0000000..36714d9 --- /dev/null +++ b/pacman.conf @@ -0,0 +1,88 @@ +# +# /etc/pacman.conf +# +# See the pacman.conf(5) manpage for option and repository directives + +# +# GENERAL OPTIONS +# +[options] +# The following paths are commented out with their default values listed. +# If you wish to use different paths, uncomment and update the paths. +#RootDir = / +#DBPath = /var/lib/pacman/ +#CacheDir = /var/cache/pacman/pkg/ +#LogFile = /var/log/pacman.log +#GPGDir = /etc/pacman.d/gnupg/ +HoldPkg = pacman glibc +#XferCommand = /usr/bin/curl -C - -f %u > %o +#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u +#CleanMethod = KeepInstalled +#UseDelta = 0.7 +Architecture = auto + +# Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup +#IgnorePkg = +#IgnoreGroup = + +#NoUpgrade = +#NoExtract = + +# Misc options +#UseSyslog +#Color +#TotalDownload +# We cannot check disk space from within a chroot environment +#CheckSpace +#VerbosePkgLists + +# By default, pacman accepts packages signed by keys that its local keyring +# trusts (see pacman-key and its man page), as well as unsigned packages. +SigLevel = Required DatabaseOptional +LocalFileSigLevel = Optional +#RemoteFileSigLevel = Required + +# NOTE: You must run `pacman-key --init` before first using pacman; the local +# keyring can then be populated with the keys of all official Arch Linux +# packagers with `pacman-key --populate archlinux`. + +# +# REPOSITORIES +# - can be defined here or included from another file +# - pacman will search repositories in the order defined here +# - local/custom mirrors can be added here or in separate files +# - repositories listed first will take precedence when packages +# have identical names, regardless of version number +# - URLs will have $repo replaced by the name of the current repo +# - URLs will have $arch replaced by the name of the architecture +# +# Repository entries are of the format: +# [repo-name] +# Server = ServerName +# Include = IncludePath +# +# The header [repo-name] is crucial - it must be present and +# uncommented to enable the repo. +# + +# The testing repositories are disabled by default. To enable, uncomment the +# repo name header and Include lines. You can add preferred servers immediately +# after the header, and they will be used before the default mirrors. + +#[testing] +#Include = /etc/pacman.d/mirrorlist + +[core] +Include = /etc/pacman.d/mirrorlist + +[extra] +Include = /etc/pacman.d/mirrorlist + +#[community-testing] +#Include = /etc/pacman.d/mirrorlist + +[community] +Include = /etc/pacman.d/mirrorlist + +[multilib] +Include = /etc/pacman.d/mirrorlist \ No newline at end of file diff --git a/syslinux/archiso.cfg b/syslinux/archiso.cfg new file mode 100644 index 0000000..40d8b34 --- /dev/null +++ b/syslinux/archiso.cfg @@ -0,0 +1,11 @@ +DEFAULT select + +LABEL select +COM32 boot/syslinux/whichsys.c32 +APPEND -pxe- pxe -sys- sys -iso- sys + +LABEL pxe +CONFIG boot/syslinux/archiso_pxe.cfg + +LABEL sys +CONFIG boot/syslinux/archiso_sys.cfg diff --git a/syslinux/archiso_head.cfg b/syslinux/archiso_head.cfg new file mode 100644 index 0000000..f261049 --- /dev/null +++ b/syslinux/archiso_head.cfg @@ -0,0 +1,25 @@ +SERIAL 0 38400 +UI boot/syslinux/vesamenu.c32 +MENU TITLE Appletneo OS +MENU BACKGROUND boot/syslinux/splash.png + +MENU WIDTH 78 +MENU MARGIN 4 +MENU ROWS 7 +MENU VSHIFT 10 +MENU TABMSGROW 14 +MENU CMDLINEROW 14 +MENU HELPMSGROW 16 +MENU HELPMSGENDROW 29 + +# Refer to http://syslinux.zytor.com/wiki/index.php/Doc/menu + +MENU COLOR border 30;44 #40ffffff #a0000000 std +MENU COLOR title 1;36;44 #9033ccff #a0000000 std +MENU COLOR sel 7;37;40 #e0ffffff #20ffffff all +MENU COLOR unsel 37;44 #50ffffff #a0000000 std +MENU COLOR help 37;40 #c0ffffff #a0000000 std +MENU COLOR timeout_msg 37;40 #80ffffff #00000000 std +MENU COLOR timeout 1;37;40 #c0ffffff #00000000 std +MENU COLOR msg07 37;40 #90ffffff #a0000000 std +MENU COLOR tabmsg 31;40 #30ffffff #00000000 std diff --git a/syslinux/archiso_pxe.cfg b/syslinux/archiso_pxe.cfg new file mode 100644 index 0000000..8d893ce --- /dev/null +++ b/syslinux/archiso_pxe.cfg @@ -0,0 +1,36 @@ +INCLUDE boot/syslinux/archiso_head.cfg + +LABEL arch64_nbd +TEXT HELP +Boot the Appletneo OS (x86_64) live medium (Using NBD). +It allows you to install Arch Linux or perform system maintenance. +ENDTEXT +MENU LABEL Boot Appletneo OS (x86_64) (NBD) +LINUX boot/x86_64/vmlinuz +INITRD boot/intel_ucode.img,boot/x86_64/archiso.img +APPEND archisobasedir=%INSTALL_DIR% archisolabel=%ARCHISO_LABEL% archiso_nbd_srv=${pxeserver} +SYSAPPEND 3 + +LABEL arch64_nfs +TEXT HELP +Boot the Appletneo OS (x86_64) live medium (Using NFS). +It allows you to install Arch Linux or perform system maintenance. +ENDTEXT +MENU LABEL Boot Appletneo OS (x86_64) (NFS) +LINUX boot/x86_64/vmlinuz +INITRD boot/intel_ucode.img,boot/x86_64/archiso.img +APPEND archisobasedir=%INSTALL_DIR% archiso_nfs_srv=${pxeserver}:/run/archiso/bootmnt +SYSAPPEND 3 + +LABEL arch64_http +TEXT HELP +Boot the Appletneo OS (x86_64) live medium (Using HTTP). +It allows you to install Arch Linux or perform system maintenance. +ENDTEXT +MENU LABEL Boot Appletneo OS (x86_64) (HTTP) +LINUX boot/x86_64/vmlinuz +INITRD boot/intel_ucode.img,boot/x86_64/archiso.img +APPEND archisobasedir=%INSTALL_DIR% archiso_http_srv=http://${pxeserver}/ +SYSAPPEND 3 + +INCLUDE boot/syslinux/archiso_tail.cfg diff --git a/syslinux/archiso_sys.cfg b/syslinux/archiso_sys.cfg new file mode 100644 index 0000000..a1a2cd6 --- /dev/null +++ b/syslinux/archiso_sys.cfg @@ -0,0 +1,13 @@ +INCLUDE boot/syslinux/archiso_head.cfg + +LABEL arch64 +TEXT HELP +Boot the Appletneo OS (x86_64) live medium. +It allows you to install Arch Linux or perform system maintenance. +ENDTEXT +MENU LABEL Boot Appletneo OS (x86_64) +LINUX boot/x86_64/vmlinuz +INITRD boot/intel_ucode.img,boot/x86_64/archiso.img +APPEND archisobasedir=%INSTALL_DIR% archisolabel=%ARCHISO_LABEL% + +INCLUDE boot/syslinux/archiso_tail.cfg diff --git a/syslinux/archiso_tail.cfg b/syslinux/archiso_tail.cfg new file mode 100644 index 0000000..e85d8e1 --- /dev/null +++ b/syslinux/archiso_tail.cfg @@ -0,0 +1,27 @@ +LABEL existing +TEXT HELP +Boot an existing operating system. +Press TAB to edit the disk and partition number to boot. +ENDTEXT +MENU LABEL Boot existing OS +COM32 boot/syslinux/chain.c32 +APPEND hd0 0 + +# http://www.memtest.org/ +LABEL memtest +MENU LABEL Run Memtest86+ (RAM test) +LINUX boot/memtest + +# http://hdt-project.org/ +LABEL hdt +MENU LABEL Hardware Information (HDT) +COM32 boot/syslinux/hdt.c32 +APPEND modules_alias=boot/syslinux/hdt/modalias.gz pciids=boot/syslinux/hdt/pciids.gz + +LABEL reboot +MENU LABEL Reboot +COM32 boot/syslinux/reboot.c32 + +LABEL poweroff +MENU LABEL Power Off +COM32 boot/syslinux/poweroff.c32 diff --git a/syslinux/splash.png b/syslinux/splash.png new file mode 100644 index 0000000000000000000000000000000000000000..303fb33cc4e4f0874cc5da340d1550b192b95a55 GIT binary patch literal 53545 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