Prerequisites
- Install the Arch Linux distribution for Kernels compilation
- Install the archiso (remark: archiso requires the root permissions)
- Prepare a working directory (for example: live)
# su
# mkdir live
# cd live
# cp -vr /usr/share/archiso/configs/releng/. .
Customize the boot configuration files
- add the packages to be included into the image
# nano packages.x86_64
arch-install-scripts
b43-fwcutter
broadcom-wl
btrfs-progs
crda
darkhttpd
ddrescue
dhclient
dialog
dmraid
dnsmasq
dnsutils
dosfstools
elinks
ethtool
exfat-utils
f2fs-tools
fsarchiver
gcc
gdb
git
gnu-netcat
gptfdisk
grml-zsh-config
grub
hdparm
ipw2100-fw
ipw2200-fw
irssi
lftp
linux-atm
linux-headers
lsscsi
make
mtools
ndisc6
networkmanager
nfs-utils
nilfs-utils
nmap
ntfs-3g
ntp
openconnect
openssh
openvpn
partclone
parted
partimage
ppp
pptpclient
refind-efi
rp-pppoe
rsync
sdparm
sg3_utils
smartmontools
sudo
tcpdump
testdisk
unzip
usb_modeswitch
# valgrind
vim-minimal
vpnc
wget
wireless_tools
wpa_actiond
wvdial
xl2tpd
- modify the SysLinux configuration section files with the following contents
# nano syslinux/archiso_head.cfg
SERIAL 0 38400
#UI boot/syslinux/vesamenu.c32
UI boot/syslinux/menu.c32
MENU TITLE Arch Linux (x86_64) [ CoreFreq ]
#MENU BACKGROUND boot/syslinux/splash.png
MENU WIDTH 78
MENU MARGIN 4
MENU ROWS 10
MENU VSHIFT 3
MENU TIMEOUTROW 16
MENU TABMSGROW 17
MENU CMDLINEROW 16
MENU HELPMSGROW 20
MENU HELPMSGENDROW -1
# 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
MENU CLEAR
TIMEOUT 120
# nano syslinux/archiso_pxe.cfg
INCLUDE boot/syslinux/archiso_head.cfg
LABEL arch64_nbd
TEXT HELP
Boot the Arch Linux (x86_64) live medium (Using NBD).
It allows you to install Arch Linux or perform system maintenance.
ENDTEXT
MENU LABEL Boot Arch Linux (x86_64) (NBD)
LINUX boot/x86_64/vmlinuz
INITRD boot/intel_ucode.img,boot/x86_64/archiso.img
APPEND nmi_watchdog=0 archisobasedir=%INSTALL_DIR% archisolabel=%ARCHISO_LABEL% archiso_nbd_srv=${pxeserver}
SYSAPPEND 3
LABEL arch64_nfs
TEXT HELP
Boot the Arch Linux (x86_64) live medium (Using NFS).
It allows you to install Arch Linux or perform system maintenance.
ENDTEXT
MENU LABEL Boot Arch Linux (x86_64) (NFS)
LINUX boot/x86_64/vmlinuz
INITRD boot/intel_ucode.img,boot/x86_64/archiso.img
APPEND nmi_watchdog=0 archisobasedir=%INSTALL_DIR% archiso_nfs_srv=${pxeserver}:/run/archiso/bootmnt
SYSAPPEND 3
LABEL arch64_http
TEXT HELP
Boot the Arch Linux (x86_64) live medium (Using HTTP).
It allows you to install Arch Linux or perform system maintenance.
ENDTEXT
MENU LABEL Boot Arch Linux (x86_64) (HTTP)
LINUX boot/x86_64/vmlinuz
INITRD boot/intel_ucode.img,boot/x86_64/archiso.img
APPEND nmi_watchdog=0 archisobasedir=%INSTALL_DIR% archiso_http_srv=http://${pxeserver}/
SYSAPPEND 3
INCLUDE boot/syslinux/archiso_tail.cfg
# nano syslinux/archiso_sys.cfg
INCLUDE boot/syslinux/archiso_head.cfg
LABEL arch64
TEXT HELP
Boot the Arch Linux.
[Text video mode]
ENDTEXT
MENU LABEL Boot Arch Linux [Text] [English]
LINUX boot/x86_64/vmlinuz
INITRD boot/intel_ucode.img,boot/x86_64/archiso.img
APPEND archisobasedir=%INSTALL_DIR% archisolabel=%ARCHISO_LABEL% nmi_watchdog=0 earlysh selinux=0 plymouth.enable=0 text rd.systemd.show_status=auto rd.udev.log-priority=3 consoleblank=0 vga=current nomodeset cow_spacesize=512M modprobe.blacklist=pcspkr,iTCO_wdt cpu0_hotplug
LABEL french
TEXT HELP
Demarrer Arch Linux.
[Mode video texte]
ENDTEXT
MENU LABEL Boot Arch Linux [Text] [Francais]
LINUX boot/x86_64/vmlinuz
INITRD boot/intel_ucode.img,boot/x86_64/archiso.img
APPEND archisobasedir=%INSTALL_DIR% archisolabel=%ARCHISO_LABEL% nmi_watchdog=0 earlysh locale.LANG=fr_FR.UTF-8 vconsole.keymap=fr selinux=0 plymouth.enable=0 text rd.systemd.show_status=auto rd.udev.log-priority=3 consoleblank=0 vga=current nomodeset cow_spacesize=512M modprobe.blacklist=pcspkr,iTCO_wdt cpu0_hotplug
LABEL deutch
TEXT HELP
Starten Sie den Arch Linux.
[Text video modus]
ENDTEXT
MENU LABEL Boot Arch Linux [Text] [Deutch]
LINUX boot/x86_64/vmlinuz
INITRD boot/intel_ucode.img,boot/x86_64/archiso.img
APPEND archisobasedir=%INSTALL_DIR% archisolabel=%ARCHISO_LABEL% nmi_watchdog=0 earlysh locale.LANG=de_DE.UTF-8 vconsole.keymap=de selinux=0 plymouth.enable=0 text rd.systemd.show_status=auto rd.udev.log-priority=3 consoleblank=0 vga=current nomodeset cow_spacesize=512M modprobe.blacklist=pcspkr,iTCO_wdt cpu0_hotplug
LABEL spanish
TEXT HELP
Arranque el Arch Linux.
[Modo de video de texto]
ENDTEXT
MENU LABEL Boot Arch Linux [Text] [Espanol]
LINUX boot/x86_64/vmlinuz
INITRD boot/intel_ucode.img,boot/x86_64/archiso.img
APPEND archisobasedir=%INSTALL_DIR% archisolabel=%ARCHISO_LABEL% nmi_watchdog=0 earlysh locale.LANG=es_ES.UTF-8 vconsole.keymap=es selinux=0 plymouth.enable=0 text rd.systemd.show_status=auto rd.udev.log-priority=3 consoleblank=0 vga=current nomodeset cow_spacesize=512M modprobe.blacklist=pcspkr,iTCO_wdt cpu0_hotplug
LABEL envesa
TEXT HELP
Boot the Arch Linux.
[Graphic video mode]
ENDTEXT
MENU LABEL Boot Arch Linux [VESA] [English]
LINUX boot/x86_64/vmlinuz
INITRD boot/intel_ucode.img,boot/x86_64/archiso.img
APPEND archisobasedir=%INSTALL_DIR% archisolabel=%ARCHISO_LABEL% nmi_watchdog=0 earlysh selinux=0 plymouth.enable=0 rd.systemd.show_status=auto rd.udev.log-priority=3 consoleblank=0 cow_spacesize=512M modprobe.blacklist=pcspkr,iTCO_wdt cpu0_hotplug
LABEL frvesa
TEXT HELP
Demarrer Arch Linux.
[Mode video graphique]
ENDTEXT
MENU LABEL Boot Arch Linux [VESA] [Francais]
LINUX boot/x86_64/vmlinuz
INITRD boot/intel_ucode.img,boot/x86_64/archiso.img
APPEND archisobasedir=%INSTALL_DIR% archisolabel=%ARCHISO_LABEL% nmi_watchdog=0 earlysh locale.LANG=fr_FR.UTF-8 vconsole.keymap=fr selinux=0 plymouth.enable=0 rd.systemd.show_status=auto rd.udev.log-priority=3 consoleblank=0 cow_spacesize=512M modprobe.blacklist=pcspkr,iTCO_wdt cpu0_hotplug
LABEL devesa
TEXT HELP
Starten Sie den Arch Linux.
[Grafischer videomodus]
ENDTEXT
MENU LABEL Boot Arch Linux [VESA] [Deutch]
LINUX boot/x86_64/vmlinuz
INITRD boot/intel_ucode.img,boot/x86_64/archiso.img
APPEND archisobasedir=%INSTALL_DIR% archisolabel=%ARCHISO_LABEL% nmi_watchdog=0 earlysh locale.LANG=de_DE.UTF-8 vconsole.keymap=de selinux=0 plymouth.enable=0 rd.systemd.show_status=auto rd.udev.log-priority=3 consoleblank=0 cow_spacesize=512M modprobe.blacklist=pcspkr,iTCO_wdt cpu0_hotplug
LABEL spvesa
TEXT HELP
Arranque el Arch Linux.
[Modo de video grafico]
ENDTEXT
MENU LABEL Boot Arch Linux [VESA] [Espanol]
LINUX boot/x86_64/vmlinuz
INITRD boot/intel_ucode.img,boot/x86_64/archiso.img
APPEND archisobasedir=%INSTALL_DIR% archisolabel=%ARCHISO_LABEL% nmi_watchdog=0 earlysh locale.LANG=es_ES.UTF-8 vconsole.keymap=es selinux=0 plymouth.enable=0 rd.systemd.show_status=auto rd.udev.log-priority=3 consoleblank=0 cow_spacesize=512M modprobe.blacklist=pcspkr,iTCO_wdt cpu0_hotplug
INCLUDE boot/syslinux/archiso_tail.cfg
# nano syslinux/archiso_tail.cfg
LABEL poweroff
MENU LABEL Power Off
COM32 boot/syslinux/poweroff.c32
LABEL reboot
MENU LABEL Reboot
COM32 boot/syslinux/reboot.c32
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
- isolinux remains unchanged
- modify the EFI boot configuration
# nano efiboot/loader/loader.conf
timeout 12
default archiso-x86_64
# nano efiboot/loader/entries/archiso-x86_64-cd.conf
title Arch Linux archiso 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% nmi_watchdog=0 selinux=0 rd.systemd.show_status=auto rd.udev.log-priority=3 consoleblank=0 nomodeset cow_spacesize=512M modprobe.blacklist=pcspkr,iTCO_wdt cpu0_hotplug
# nano efiboot/loader/entries/archiso-x86_64-usb.conf
title Arch Linux archiso 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% nmi_watchdog=0 selinux=0 rd.systemd.show_status=auto rd.udev.log-priority=3 consoleblank=0 nomodeset cow_spacesize=512M modprobe.blacklist=pcspkr,iTCO_wdt cpu0_hotplug
Prepare the root file system
etc
# cp -v /etc/locale.gen airootfs/etc/
# nano airootfs/etc/locale.gen
de_DE.UTF-8 UTF-8
de_DE ISO-8859-1
en_US.UTF-8 UTF-8
en_US ISO-8859-1
es_ES.UTF-8 UTF-8
es_ES ISO-8859-1
fr_FR.UTF-8 UTF-8
fr_FR ISO-8859-1
# nano airootfs/etc/locale.conf
LANG=en_US.UTF-8
LC_ALL=
- optionally makes the editor full screen with programming syntax coloring
# nano airootfs/etc/nanorc
set constantshow
set morespace
set nohelp
set nonewlines
set nowrap
set showcursor
set smarthome
set titlecolor brightwhite,red
set statuscolor brightwhite,red
set selectedcolor brightwhite,cyan
set numbercolor magenta
set keycolor brightmagenta
set functioncolor magenta
include "/usr/share/nano/*.nanorc"
# mkdir airootfs/etc/skel
# mkdir airootfs/etc/sysctl.d
- disable the Watchdog, system wide
# nano airootfs/etc/sysctl.d/99-sysctl.conf
kernel.watchdog = 0
- add the CoreFreq personal systemd boot unit ...
# nano airootfs/etc/systemd/system/early-shell.service
[Unit]
Description=Early configuration shell
ConditionKernelCommandLine=earlysh
[Service]
Type=oneshot
ExecStart=/etc/systemd/scripts/early-shell
[Install]
WantedBy=multi-user.target
- ... and the unit associated script
# nano airootfs/etc/systemd/scripts/early-shell
#!/bin/bash
KEY=`grep -oP '(?<=\bvconsole.keymap=)[^;]+' /proc/cmdline | cut -f 1 -d " "`
if [ -n "${KEY}" ]; then
localectl set-keymap ${KEY}
fi
case "${KEY}" in
( fr )
localectl set-locale "LANG=fr_FR.UTF-8" ;;
( de )
localectl set-locale "LANG=de_DE.UTF-8" ;;
( es )
localectl set-locale "LANG=es_ES.UTF-8" ;;
( * )
localectl set-locale "LANG=en_US.UTF-8" ;;
esac
if [ -f /sys/devices/cpu/rdpmc ]; then
echo 2 > /sys/devices/cpu/rdpmc
fi
# chmod +x airootfs/etc/systemd/scripts/early-shell
root
# touch airootfs/root/.hushlogin
# nano airootfs/root/.zlogin
~/.automated_script.sh
if [[ ${TTY} == "/dev/tty1" ]]; then
corefreq_menu.sh
fi
# nano airootfs/root/customize_airootfs.sh
#!/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/zsh root
cp -aT /etc/skel/ /root/
chmod 700 /root
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 early-shell.service wpa_supplicant NetworkManager
systemctl set-default multi-user.target
- add the CoreFreq helper scripts
# mkdir airootfs/root/bin
# nano airootfs/root/bin/corefreq_build_run.sh
#!/bin/bash
cd /opt/CoreFreq
make
if [[ $? == 0 ]]; then
insmod corefreqk.ko
if [[ $? == 0 ]]; then
sleep 1
./corefreqd -q &
pid=$!
sleep 1
./corefreq-cli
kill -s SIGQUIT ${pid}
sleep 1
fi
rmmod corefreqk.ko
fi
cd
# nano airootfs/root/bin/corefreq_experimental.sh
#!/bin/bash
cd /opt/CoreFreq
make
if [[ $? == 0 ]]; then
insmod corefreqk.ko Experimental=1 NMI_Disable=0
if [[ $? == 0 ]]; then
sleep 1
./corefreqd -q &
pid=$!
sleep 1
./corefreq-cli
kill -s SIGQUIT ${pid}
sleep 1
fi
rmmod corefreqk.ko
fi
cd
# nano airootfs/root/bin/corefreq_online_update.sh
#!/bin/bash
cd /opt
declare -i cloned=0
for url in https://github.com/cyring/CoreFreq.git http://github.com/cyring/CoreFreq.git
do
bak=$(stat -c "%X" CoreFreq)
mv CoreFreq CoreFreq.${bak}
git clone ${url}
if [[ $? != 0 ]]; then
mv -f CoreFreq.${bak} CoreFreq
else
cloned=1
break
fi
done
if (( cloned != 1 ))
then
wget --no-verbose http://github.com/cyring/CoreFreq/archive/master.zip -O CoreFreq.zip
if [[ $? == 0 ]]; then
bak=$(stat -c "%X" CoreFreq)
mv CoreFreq CoreFreq.${bak}
unzip -q CoreFreq.zip
if [[ $? != 0 ]]; then
mv -f CoreFreq.${bak} CoreFreq
else
mv CoreFreq-master CoreFreq
fi
rm -f CoreFreq.zip
fi
fi
cd
# nano airootfs/root/bin/corefreq_menu.sh
#!/bin/bash
HELPERS=$(ls --color -C ${HOME}/bin)
echo
echo "Starting CoreFreq in 9 seconds"
echo
echo "Helpers are: ${HELPERS}"
echo
echo -n "Press [CTRL]+[C] to abort"
sleep 9
if [[ $? == 0 ]]; then
echo
echo
corefreq_build_run.sh
fi
# chmod +x airootfs/root/bin/corefreq_build_run.sh
# chmod +x airootfs/root/bin/corefreq_experimental.sh
# chmod +x airootfs/root/bin/corefreq_online_update.sh
# chmod +x airootfs/root/bin/corefreq_menu.sh
opt
- get the CoreFreq source code from the GitHub
# mkdir -p airootfs/opt/CoreFreq
# git clone https://github.com/cyring/CoreFreq.git airootfs/opt/CoreFreq/
Build and Burn the image
- first create a cleanup script
# nano cleanup.sh
#!/bin/bash
rm out/*.iso
rm -fr work/iso
rm -v work/build.make_*
# chmod +x cleanup.sh
- now start building the image
# ./build.sh -v
- remark: the image is named with the date of the day
# cdrecord blank=fast
# cdrecord -overburn out/archlinux-2018.07.07-x86_64.iso
Boot CoreFreq
Once the CD is burned, reboot the computer selecting CDROM as the boot option.
As shown into the
Wiki, CoreFreq will be fully automatized from its compilation up to its startup.
At any time, you can exit from CoreFreq with [F4] or [CTRL] + [C]
You will be brought back to the command line where you can use the helper scripts to:
Update to the last source code (just enter
wifi to configure a wireless connection)
# corefreq_online_update.sh
Try the experimental mode (for example, the Memory Controller)
# corefreq_experimental.sh
Power off computer