-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathinit
More file actions
executable file
·389 lines (349 loc) · 11.4 KB
/
init
File metadata and controls
executable file
·389 lines (349 loc) · 11.4 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
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
#!/bin/sh
mknod -m 622 /dev/tty0 c 4 0
exec </dev/tty0 >/dev/tty0 2>&1
# better-initramfs project
# https://bitbucket.org/piotrkarbowski/better-initramfs
# Copyright (c) 2010-2018, Piotr Karbowski <piotr.karbowski@gmail.com>
# All rights reserved.
# Load functions.
. /functions.sh
run_hooks init
# Prepare dirs
run dodir /dev /newroot /sbin /proc /sys /etc /var/log /var/run /run /run/cryptsetup /ps4hdd
for d in /lib /usr/lib; do
# ! -e && ! -h: also skip broken symlinks
if [ -d "${d}" ] && [ ! -e "${d}64" ] && [ ! -h "${d}64" ]; then
run ln -s "${d}" "${d}64"
fi
done
unset -v d
# Basic /dev content, we need it as fast as possible.
[ ! -e /dev/console ] && run mknod /dev/console c 5 1
[ ! -e /dev/null ] && run mknod /dev/null c 1 3
[ ! -e /dev/tty ] && run mknod /dev/tty c 5 0
[ ! -e /dev/urandom ] && run mknod /dev/urandom c 1 9
[ ! -e /dev/random ] && run mknod /dev/random c 1 8
[ ! -e /dev/zero ] && run mknod /dev/zero c 1 5
# Save IFS so we can easly restore it if we ever change it.
readonly default_ifs="${IFS}"
# Basic
kernelver="$(uname -r)"
ver="$(cat /VERSION)"
emount /proc /sys
# Set the Clock from Orbis
time_from_cmdline="$(grep -o 'time=[0-9]*' /proc/cmdline | cut -d= -f2)"
if [ -n "$time_from_cmdline" ]; then
date -s "@$time_from_cmdline"
fi
einfo "better-initramfs ${ver}. Linux kernel ${kernelver}.\n"
echo -e "\nWelcome to ${ver}. Linux kernel ${kernelver}.\n" > /etc/motd
# Disable kernel messages from popping onto the screen
echo 0 > /proc/sys/kernel/printk
InitializeBusybox
emount /dev
#echo "off" > /sys/class/drm/card0-HDMI-A-1/status
#cat /lib/firmware/edid/my_edid.bin > /sys/kernel/debug/dri/0/HDMI-A-1/edid_override
run_hooks early
#SetupNetwork
#use sshd && setup_sshd
loadkeymap
use rootdelay rootdelay
use bcache register_bcache_devices
use softraid InitializeSoftwareRaid && use bcache register_bcache_devices
use lvm InitializeLVM && use bcache register_bcache_devices
use luks InitializeLUKS && use lvm InitializeLVM && use bcache register_bcache_devices
# slow drives need here more sleeptime maybe?
sleep 8
#echo "on" > /sys/class/drm/card0-HDMI-A-1/status
populate_dev_disk_by_label_and_uuid
res=$(dmesg | grep 0x9920)
if [ "$res" == "" ]; then
echo -e "\e[31m\e[1m>\e[34m\e[1m>\e[31m\e[1m> \e[39m\e[0m\e[32m\e[1mPS4 Belize / Baikal\e[39m\e[0m internal drive mounted"
cryptsetup -d /key/eap_hdd_key.bin --cipher aes-xts-plain64 -s 256 --offset 0 --skip 111669149696 create ps4hdd /dev/sd?27
mount -t ufs -o ufstype=ufs2 /dev/mapper/ps4hdd /ps4hdd
chmod -R a+rwX /ps4hdd
else
echo -e "\e[31m\e[1m>\e[34m\e[1m>\e[31m\e[1m> \e[39m\e[0m\e[32m\e[1mPS4 Aeolia\e[39m\e[0m internal drive mounted"
cryptsetup -d /key/eap_hdd_key.bin --cipher aes-xts-plain64 -s 256 --offset 0 create ps4hdd /dev/sd?27
mount -t ufs -o ufstype=ufs2 /dev/mapper/ps4hdd /ps4hdd
chmod -R a+rwX /ps4hdd
fi
CONFIG_FILE="/ps4hdd/data/linux/boot/initramfs.ini"
# ANSI Farben (nahe an Sony Farben)
BLUE='\033[1;34m' # ✕ Blau (#0070D1)
RED='\033[1;31m' # ○ Rot (#D6002F)
GREEN='\033[1;32m' # △ Grün (#00A968)
MAGENTA='\033[1;35m' # ☐ Pink (#D200A4)
WHITE='\033[1;37m'
NC='\033[0m' #
show_menu() {
echo ""
echo -e "${BLUE}============= ${YELLOW} Boot-Menü ${BLUE}==============${NC}"
echo ""
echo -e "${MAGENTA}[1]${NC} ${WHITE}Default Boot${NC}"
echo -e "${MAGENTA}[2]${NC} ${WHITE}Installation (soon)${NC}"
echo -e "${MAGENTA}[3]${NC} ${WHITE}Partitionmanager (only internal)${NC}"
echo -e "${MAGENTA}[4]${NC} ${WHITE}Rescue-System (Shell)${NC}"
echo ""
echo -e "${RED}[q]${NC} ${WHITE}Reboot to Orbis OS${NC}"
echo -e "${BLUE}=======================================${NC}"
echo ""
echo ""
if [ -f "$CONFIG_FILE" ]; then
echo "Please make your selection (1-3)..."
echo "Automatic boot in 3 seconds:"
SECONDS_LEFT=3
INPUT=""
while [ $SECONDS_LEFT -gt 0 ]; do
echo -n "$SECONDS_LEFT... "
read -t 1 -n 1 INPUT
if [ $? -eq 0 ]; then
echo ""
break
fi
SECONDS_LEFT=$((SECONDS_LEFT - 1))
done
if [ -z "$INPUT" ]; then
INPUT=1
fi
else
echo "No Autoboot start configuration found!"
echo -n "Please make your selection or (q) for reboot (1-3): "
read -n 1 INPUT
echo ""
fi
case "$INPUT" in
1)
echo ">> Opens the parition selection menu.."
SAVEFILE="/ps4hdd/data/linux/boot/initramfs.ini"
MOUNTPOINT="/newroot"
LABEL_PREFIX="ps4"
TIMEOUT=5
IMG_DIR="/ps4hdd/data/linux"
LOOPDEV="/dev/loop0"
human_readable_size() {
size="$1"
if [ "$size" -ge 1073741824 ]; then
echo "$((size / 1073741824))G"
elif [ "$size" -ge 1048576 ]; then
echo "$((size / 1048576))M"
elif [ "$size" -ge 1024 ]; then
echo "$((size / 1024))K"
else
echo "${size}B"
fi
}
[ -b "$LOOPDEV" ] || mknod "$LOOPDEV" b 7 0
# Pseudo-Dateisysteme mounten
#mount -t proc none /proc
#mount -t sysfs none /sys
#mount -t devtmpfs none /dev
while true; do
PS4_PARTS=$(ls /dev/disk/by-label/ 2>/dev/null | grep "^$LABEL_PREFIX")
IMG_PARTS=$(ls "$IMG_DIR"/*.img 2>/dev/null | sed "s|$IMG_DIR/||")
if [ -z "$PS4_PARTS" ] && [ -z "$IMG_PARTS" ]; then
echo "No partitions or images found."
sleep 3
continue
fi
if [ -f "$SAVEFILE" ]; then
SEL=$(cat "$SAVEFILE")
if [ -e "/dev/disk/by-label/$SEL" ]; then
echo "booting in $TIMEOUT seconds with partition: $SEL"
echo "press Enter for Menu, the automatic boot will be stopped ..."
read -t $TIMEOUT dummy
if [ $? -ne 0 ]; then
echo "mounting /dev/disk/by-label/$SEL → $MOUNTPOINT"
mount "/dev/disk/by-label/$SEL" "$MOUNTPOINT" && break
echo "Mounting failed."
sleep 2
continue
fi
elif [ -f "$IMG_DIR/$SEL" ]; then
echo "booting in $TIMEOUT seconds with partition: $SEL"
echo "press Enter for Menu, the automatic boot will be stopped..."
read -t $TIMEOUT dummy
if [ $? -ne 0 ]; then
echo "mounting $IMG_DIR/$SEL → $MOUNTPOINT (loop)"
losetup "$LOOPDEV" "$IMG_DIR/$SEL" && mount "$LOOPDEV" "$MOUNTPOINT" && break
echo "Mounting failed.. Loop trennen."
losetup -d "$LOOPDEV" 2>/dev/null
sleep 2
continue
fi
fi
fi
echo "Please select a [External] Partition or [internal] Image:"
i=1
for part in $PS4_PARTS; do
DEVICE="/dev/disk/by-label/$part"
SIZE_BYTES=$(blockdev --getsize64 "$DEVICE" 2>/dev/null)
if [ -n "$SIZE_BYTES" ]; then
SIZE_HUMAN=$(human_readable_size "$SIZE_BYTES")
else
SIZE_HUMAN="unbekannt"
fi
echo "$i) [EXT] $part ($SIZE_HUMAN)"
eval "opt_$i=part:$part"
i=$((i + 1))
done
for img in $IMG_PARTS; do
SIZE_BYTES=$(stat -c%s "$IMG_DIR/$img" 2>/dev/null)
if [ -n "$SIZE_BYTES" ]; then
SIZE_HUMAN=$(human_readable_size "$SIZE_BYTES")
else
SIZE_HUMAN="unbekannt"
fi
echo "$i) [INT] $img ($SIZE_HUMAN)"
eval "opt_$i=img:$img"
i=$((i + 1))
done
echo -n "Selection [1]: "
read choice
choice=${choice:-1}
eval "SEL_LINE=\$opt_$choice"
TYPE=$(echo "$SEL_LINE" | cut -d: -f1)
VALUE=$(echo "$SEL_LINE" | cut -d: -f2-)
if [ "$TYPE" = "part" ]; then
echo "$VALUE" > "$SAVEFILE"
echo "Mounting /dev/disk/by-label/$VALUE → $MOUNTPOINT"
mount "/dev/disk/by-label/$VALUE" "$MOUNTPOINT" && break
echo "Mount failed."
sleep 2
elif [ "$TYPE" = "img" ]; then
echo "$VALUE" > "$SAVEFILE"
echo "Mounting $IMG_DIR/$VALUE → $MOUNTPOINT "
losetup "$LOOPDEV" "$IMG_DIR/$VALUE" && mount "$LOOPDEV" "$MOUNTPOINT" && break
echo "Mount failed."
losetup -d "$LOOPDEV" 2>/dev/null
sleep 2
else
echo "Invalid selection."
sleep 2
fi
done
echo "Copy PS4 files to $MOUNTPOINT ..."
if [ -f /key/eap_hdd_key.bin ]; then
cp /key/eap_hdd_key.bin "$MOUNTPOINT/"
fi
mkdir -p "$MOUNTPOINT/lib/firmware"
cp -R /lib/firmware/amdgpu "$MOUNTPOINT/lib/firmware/" 2>/dev/null
mkdir -p "$MOUNTPOINT/lib/firmware/edid"
cp /lib/firmware/edid/my_edid.bin "$MOUNTPOINT/lib/firmware/edid/" 2>/dev/null
mkdir -p "$MOUNTPOINT/ps4hdd"
mount --rbind /ps4hdd "$MOUNTPOINT/ps4hdd"
echo "booting switch_root to $MOUNTPOINT ..."
exec switch_root "$MOUNTPOINT" /sbin/init
echo "switch_root failed! press Enter"
exec sh
;;
2)
echo ">> Open Installationmenu..."
/install.sh
;;
3)
while true; do
IMG_DIR2="/ps4hdd/data/linux"
IMG_PARTS=$(ls "$IMG_DIR2"/*.img 2>/dev/null | sed "s|$IMG_DIR2/||")
if [ -z "$IMG_PARTS" ]; then
echo "No images found.."
sleep 2
exit 1
fi
# === Image-Auswahl ===
while true; do
echo ""
echo "Available Images:"
i=1
for img in $IMG_PARTS; do
echo "$i) $img"
eval "imgopt_$i=\"$img\""
i=$((i + 1))
done
echo -n "Select an image file to enlarge [1] "
read choice
if [ "$choice" = "q" ]; then
echo "Abort by user."
exit 0
fi
choice=${choice:-1}
eval "SELECTED_IMG=\$imgopt_$choice"
if [ -z "$SELECTED_IMG" ]; then
echo "Invalid selection. Please try again."
sleep 1
continue
fi
break
done
echo "Ausgewählt: $SELECTED_IMG"
# === Zielgröße auswählen ===
while true; do
echo ""
echo "Select the new target size:"
echo "1) 40GB"
echo "2) 80GB"
echo "3) 120GB"
echo "4) 140GB"
echo "5) 160GB"
echo "6) 200GB"
echo "7) 250GB"
echo "8) 300GB"
echo -n "Your choice [1], ‘q’ for back to image selection: "
read size_choice
if [ "$size_choice" = "q" ]; then
echo "Back to image selection..."
sleep 1
continue 2
fi
size_choice=${size_choice:-1}
case "$size_choice" in
1) TARGET_SIZE="40G" ;;
2) TARGET_SIZE="80G" ;;
3) TARGET_SIZE="120G" ;;
4) TARGET_SIZE="140G" ;;
5) TARGET_SIZE="160G" ;;
6) TARGET_SIZE="200G" ;;
7) TARGET_SIZE="250G" ;;
8) TARGET_SIZE="300G" ;;
*)
echo "Invalid selection. Please try again."
sleep 1
continue
;;
esac
break
done
echo ""
echo "Resize2fs is called directly with target size $TARGET_SIZE ..."
resize2fs -f "$IMG_DIR/$SELECTED_IMG" "$TARGET_SIZE"
echo ""
echo "Resize completed."
# === Benutzerbestätigung vor Rückkehr zum Menü ===
echo ""
read -p "Press [Enter] to return to the boot menu..." dummy
continue # Back (Image-Auswahl)
done
;;
4)
echo ">> Jump into Rescue-System..."
echo "(enter ‘exit’ to leave Shell and open Menu again.)"
[ -c /dev/console ] || mknod -m 600 /dev/console c 5 1
[ -c /dev/tty ] || mknod -m 666 /dev/tty c 5 0
/bin/sh
;;
q|Q)
echo "Reboot to Orbis OS..."
exec reboot -f
;;
*)
echo "Invalid selection."
;;
esac
}
# back to
while true; do
show_menu
echo "Back to Playstation Bootmenu ..."
sleep 1
done
# vim: noexpandtab