6a3786f04e14c0ccfc7a1d914419fea9551e8444
2 # Copyright (C) 2016 Ian Kelling
4 # This program is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU General Public License
6 # as published by the Free Software Foundation; either version 2
7 # of the License, or (at your option) any later version.
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
14 # You should have received a copy of the GNU General Public License
15 # along with this program; if not, write to the Free Software
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
18 set -e; .
/usr
/local
/lib
/bash-bear
; set +e
20 this_file
="$(readlink -f -- "${BASH_SOURCE[0]}")"
21 readonly this_file this_dir
="${this_file%/*}"
29 (( $# >= 1 )) ||
{ echo "$0: error: need 1 or 2 arguments"; exit 1; }
31 rm -f /etc
/pacman.d
/mirrorlist
32 # https://wiki.archlinux.org/index.php/Mirrors#Sorting_mirrors
34 if [[ $mirror ]]; then
35 echo "Server = $mirror" >> /etc
/pacman.d
/mirrorlist
37 curl
-s 'https://www.archlinux.org/mirrorlist/?country=US&protocol=https&ip_version=4&ip_version=6&use_mirror_status=on' |
38 sed -r 's/^[ #]*(Server *=)/\1/' >> /etc
/pacman.d
/mirrorlist
40 .
/a
/bin
/fai
/fai-wrapper
41 export LUKS_DIR
=/root
/luks
43 partition_script
=/a
/bin
/fai
/fai
/config
/hooks
/partition.DEFAULT
44 chmod +x
$partition_script
46 export PARTITION_PROMPT
=true
48 # to be idempotent if we fail after partitioning
49 already_partitioned
=true
51 for dir
in /mnt
{,/home
,/boot
,/a
}; do
53 if [[ ! $mount_out =~
$regex ]]; then
54 already_partitioned
=false
59 if ! $already_partitioned; then
60 /a
/bin
/fai
/fai
/config
/hooks
/partition.DEFAULT
63 .
/tmp
/fai
/disk_var.sh
66 # arch doesn't need crypttab entries for initramfs crypt partititions
71 export ROOT_PARTITIONS
72 sed -ri --follow-symlinks "/^crypt_dev_\S+$rootn /d" /tmp
/fai
/crypttab
74 if ! $already_partitioned; then
75 mount
-o subvol
=root_
$DISTRO $ROOT_PARTITION /mnt
77 mount
-o subvol
=boot_
$DISTRO $BOOT_PARTITION /mnt
/boot
80 # https://wiki.archlinux.org/index.php/Dm-crypt/Device_encryption#Keyfiles
81 cp /root
/luks
/host-
$HOSTNAME /mnt
/crypto_keyfile.bin
82 chmod 600 /mnt
/crypto_keyfile.bin
85 if [[ $mirror ]]; then
86 echo "$0: 404 errors about core.db etc are normal,
87 they will succeed using the secodary mirror"
90 cp /tmp
/fai
/{fstab
,crypttab
} /mnt
/etc
91 cp /a
/bin
/fai
/encrypt
/mnt
/usr
/lib
/initcpio
/hooks
93 cp -r /root
/.
ssh /mnt
/root
99 mount
-o bind $source $mountpoint
101 bindmount
/root
/shadow
/mnt
/q
/root
/shadow
104 mkdir
-p /mnt
/etc
/ssh
105 cp /etc
/ssh
/ssh_host_
* /mnt
/etc
/ssh
107 cp /a
/bin
/fai
/arch-init-chroot
/mnt
/root
108 # for manual commands, arch-chroot /mnt bash
109 arch-chroot
/mnt
/root
/arch-init-chroot
111 # this gets mounted in chroot so we have to do it outside
112 rm -f /mnt
/etc
/resolv.conf
113 ln -s /run
/systemd
/resolve
/resolv.conf
/mnt
/etc
/resolv.conf
115 # not necsesary, but makes reboot go fast.
116 umount
-R /mnt
; sleep 1
118 # causes 255 exit code, so doing this from the caller script.