pysvp64db: fix traversal
[openpower-isa.git] / make_gdb_vm_image.sh
1 #!/bin/bash
2 # doesn't actually fully work yet...
3 set -e
4 if [[ "$(id -u)" != 0 ]]; then
5 exec sudo bash "$0" "$@"
6 fi
7 build_dir="$(mktemp -d)"
8 iso_dir="$build_dir/iso"
9 mounts=()
10 function at_exit() {
11 set +e
12 for i in "${mounts[@]}"; do
13 umount "$i"
14 done
15 rm -rf --one-file-system "$build_dir"
16 }
17 trap at_exit EXIT
18 mmdebstrap -v --variant=apt --include=grub-ieee1275-bin,xorriso,gdbserver,linux-image-powerpc64le --architecture=ppc64el bullseye "$build_dir"
19 echo "gdb-vm-build" > "$build_dir"/etc/debian_chroot
20 if [[ "$(arch)" != "ppc64le" ]]; then
21 cp /usr/bin/qemu-ppc64le-static "$build_dir"/usr/bin/qemu-ppc64le-static
22 fi
23 cp /etc/resolv.conf "$build_dir"/etc/resolv.conf
24 mount --bind /dev "$build_dir"/dev
25 mounts=("$build_dir"/dev "${mounts[@]}")
26 mount --bind /dev/pts "$build_dir"/dev/pts
27 mounts=("$build_dir"/dev/pts "${mounts[@]}")
28 mount --bind /proc "$build_dir"/proc
29 mounts=("$build_dir"/proc "${mounts[@]}")
30 mount --bind /sys "$build_dir"/sys
31 mounts=("$build_dir"/sys "${mounts[@]}")
32 mkdir "$iso_dir"
33 cat > "$build_dir"/etc/initramfs-tools/hooks/gdbserver <<'EOF'
34 #!/bin/sh
35
36 PREREQ=""
37 prereqs()
38 {
39 echo "$PREREQ"
40 }
41
42 case $1 in
43 prereqs)
44 prereqs
45 exit 0
46 ;;
47 esac
48
49 . /usr/share/initramfs-tools/hook-functions
50
51 echo copying gdbserver...
52 copy_exec /usr/bin/gdbserver /usr/bin/gdbserver
53
54 exit 0
55 EOF
56 chmod +x "$build_dir"/etc/initramfs-tools/hooks/gdbserver
57 cat > "$build_dir"/etc/initramfs-tools/scripts/init-top/gdbserver <<'EOF'
58 #!/bin/sh
59 PREREQ=""
60
61 prereqs()
62 {
63 echo "$PREREQ"
64 }
65
66 case $1 in
67 # get pre-requisites
68 prereqs)
69 prereqs
70 exit 0
71 ;;
72 esac
73
74 # TODO: call gdbserver on serial port instead...then poweroff
75 sh <>/dev/tty1 >&0 2>&0
76
77 exit 0
78 EOF
79 chmod +x "$build_dir"/etc/initramfs-tools/scripts/init-top/gdbserver
80 chroot "$build_dir" update-initramfs -k all -u
81 cp "$build_dir"/boot/vmlinu?-* "$iso_dir"/vmlinux
82 cp "$build_dir"/boot/initrd.img-* "$iso_dir"/initrd.gz
83 mkdir -p "$iso_dir"/boot/grub
84 cat > "$iso_dir"/boot/grub/grub.cfg <<'EOF'
85 set timeout=0
86 set default=0
87
88 menuentry "boot" {
89 insmod gzio
90 # not a real UUID, just makes initrd work...
91 set root=(ieee1275/cdrom,apple3)
92 linux /vmlinux root=UUID=2942fbed-5e30-4bbd-b1ba-5ac1875bc41c debug
93 initrd /initrd.gz
94 }
95 EOF
96 chroot "$build_dir" grub-mkrescue -o gdb-vm.iso /iso
97 install -m 644 "$build_dir"/gdb-vm.iso gdb-vm.iso
98