-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathinstall_legacyy.sh
More file actions
154 lines (122 loc) · 4.34 KB
/
Copy pathinstall_legacyy.sh
File metadata and controls
154 lines (122 loc) · 4.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
#!/usr/bin/env bash
set -euo pipefail
# ==============================================================================
# Arch Linux BIOS Legacy Installer (LUKS2 + BTRFS + Limine)
# ==============================================================================
echo "=== Arch Linux BIOS Legacy Installer ==="
lsblk
echo ""
read -rp "Enter target disk (e.g. /dev/sda): " DISK
read -rp "Enter username: " USERNAME
read -srp "Enter user password: " USER_PASS; echo
read -srp "Enter root password: " ROOT_PASS; echo
read -srp "Enter LUKS encryption password: " LUKS_PASS; echo
# ========= TIMEZONE =========
TIMEZONE=$(curl -fsSL https://ipapi.co/timezone || echo "UTC")
# ========= PARTITIONING (MBR) =========
sgdisk --zap-all "$DISK"
parted --script "$DISK" \
mklabel msdos \
mkpart primary fat32 1MiB 1024MiB \
set 1 boot on \
mkpart primary 1024MiB 100%
# Detectar particiones según el tipo de disco
if [[ "$DISK" =~ nvme ]]; then
BOOT="${DISK}p1"
ROOT="${DISK}p2"
else
BOOT="${DISK}1"
ROOT="${DISK}2"
fi
# ========= FORMAT & LUKS =========
# Necesitamos dosfstools para FAT32
mkfs.vfat -F 32 "$BOOT"
echo -n "$LUKS_PASS" | cryptsetup luksFormat --type luks2 "$ROOT" -
echo -n "$LUKS_PASS" | cryptsetup open "$ROOT" root -
# ========= BTRFS =========
mkfs.btrfs -L ARCH_ROOT /dev/mapper/root
mount /dev/mapper/root /mnt
for sub in @ @home @var_log @pkg; do
btrfs subvolume create "/mnt/$sub"
done
umount /mnt
# ========= MOUNTING =========
BTRFS_OPTS="compress=zstd:1,noatime"
mount -o $BTRFS_OPTS,subvol=@ /dev/mapper/root /mnt
mount --mkdir -o $BTRFS_OPTS,subvol=@home /dev/mapper/root /mnt/home
mount --mkdir -o $BTRFS_OPTS,subvol=@var_log /dev/mapper/root /mnt/var/log
mount --mkdir -o $BTRFS_OPTS,subvol=@pkg /dev/mapper/root /mnt/var/cache/pacman/pkg
mkdir -p /mnt/boot
mount "$BOOT" /mnt/boot
# ========= MICROCODE & PACKAGES =========
UCODE_PKG=""
grep -q "Intel" /proc/cpuinfo && UCODE_PKG="intel-ucode"
grep -q "AMD" /proc/cpuinfo && UCODE_PKG="amd-ucode"
pacman -Sy --noconfirm archlinux-keyring
# IMPORTANTE: añadimos dosfstools para soportar la partición boot FAT32
pacstrap -K /mnt \
base base-devel linux linux-firmware \
btrfs-progs cryptsetup limine $UCODE_PKG \
dosfstools networkmanager sudo vim git \
pipewire pipewire-alsa pipewire-pulse wireplumber \
bluez bluez-utils firewalld acpid avahi rsync
genfstab -U /mnt >> /mnt/etc/fstab
parted --script "$DISK" set 1 boot on
# ========= CHROOT =========
LUKS_UUID=$(cryptsetup luksUUID "$ROOT")
arch-chroot /mnt /bin/bash -e <<EOF
DISK_TARGET="$DISK"
LUKS_ID="$LUKS_UUID"
# --- TIME & LOCALE ---
ln -sf /usr/share/zoneinfo/$TIMEZONE /etc/localtime
hwclock --systohc
sed -i 's/^#en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen
locale-gen
echo "LANG=en_US.UTF-8" > /etc/locale.conf
echo "arch" > /etc/hostname
# --- USERS ---
echo "root:$ROOT_PASS" | chpasswd
useradd -m -G wheel -s /bin/bash "$USERNAME"
echo "$USERNAME:$USER_PASS" | chpasswd
sed -i 's/^# %wheel ALL=(ALL:ALL) ALL/%wheel ALL=(ALL:ALL) ALL/' /etc/sudoers
# --- MKINITCPIO ---
# Se requiere 'encrypt' para LUKS
sed -i 's/^HOOKS=.*/HOOKS=(base udev autodetect modconf keyboard block encrypt filesystems fsck)/' /etc/mkinitcpio.conf
mkinitcpio -P
# --- LIMINE (BIOS CONFIG) ---
mkdir -p /boot/limine
cp /usr/share/limine/limine-bios.sys /boot/limine/
cp /usr/share/limine/limine-bios.sys /boot/
cat <<LIMINECONF > /boot/limine/limine.conf
timeout: 5
/Arch Linux
protocol: linux
kernel_path: boot():/vmlinuz-linux
module_path: boot():/initramfs-linux.img
cmdline: cryptdevice=UUID=\$LUKS_ID:root root=/dev/mapper/root rootflags=subvol=@ rw
LIMINECONF
# --- INSTALL TO MBR ---
# Esto graba el cargador físicamente en el disco
limine bios-install "\$DISK_TARGET"
# --- PACMAN HOOK ---
mkdir -p /etc/pacman.d/hooks
cat <<HOOK > /etc/pacman.d/hooks/99-limine.hook
[Trigger]
Operation = Install
Operation = Upgrade
Type = Package
Target = limine
[Action]
Description = Deploying Limine after upgrade...
When = PostTransaction
# Aquí grabamos el valor real del disco directamente en el archivo
Exec = /bin/sh -c "limine bios-install \$DISK_TARGET && cp /usr/share/limine/limine-bios.sys /boot/limine/"
HOOK
# --- SERVICES ---
systemctl enable NetworkManager bluetooth avahi-daemon firewalld acpid
EOF
# ========= CLEANUP =========
sync
umount -R /mnt
cryptsetup close root
echo "=== INSTALLATION COMPLETE ==="