bbb: latest beagelbone black script

This commit is contained in:
Steev Klimaszewski
2018-07-04 02:14:44 -05:00
parent 9b81a78ce9
commit b98cb0ca9b

245
bbb.sh
View File

@@ -1,29 +1,24 @@
#!/bin/bash
if [[ $# -eq 0 ]] ; then
echo "Please pass version number, e.g. $0 2.0"
exit 0
fi
set -e
if [[ $EUID -ne 0 ]]; then
echo "This script must be run as root"
exit 1
fi
if [[ $# -eq 0 ]] ; then
echo "Please pass version number, e.g. $0 2.0"
exit 0
fi
basedir=`pwd`/beaglebone-black-$1
# Custom hostname variable
hostname=kali
hostname=${2:-kali}
# Custom image file name variable - MUST NOT include .img at the end.
imagename=kali-linux-$1-bbb
if [ $2 ]; then
hostname=$2
fi
if [ $3 ]; then
imagename=$3
fi
imagename=${3:-kali-linux-$1-bbb}
# Size of image in megabytes (Default is 7000=7GB)
size=7000
# Generate a random machine name to be used.
machine=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 16 | head -n 1)
@@ -39,12 +34,12 @@ machine=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 16 | head -n 1)
arm="abootimg cgpt fake-hwclock ntpdate u-boot-tools vboot-utils vboot-kernel-utils"
base="e2fsprogs initramfs-tools kali-defaults kali-menu parted sudo usbutils firmware-linux firmware-realtek firmware-atheros firmware-libertas"
desktop="fonts-croscore fonts-crosextra-caladea fonts-crosextra-carlito gnome-theme-kali gtk3-engines-xfce kali-desktop-xfce kali-root-login lightdm network-manager network-manager-gnome xfce4 xserver-xorg-video-fbdev"
desktop="kali-menu kali-defaults fonts-croscore fonts-crosextra-caladea fonts-crosextra-carlito gnome-theme-kali gtk3-engines-xfce kali-desktop-xfce kali-root-login lightdm network-manager network-manager-gnome xfce4 xserver-xorg-video-fbdev"
tools="aircrack-ng ethtool hydra john libnfc-bin mfoc nmap passing-the-hash sqlmap usbutils winexe wireshark"
services="apache2 openssh-server"
extras="iceweasel udhcpd xfce4-terminal wpasupplicant"
packages="${arm} ${base} ${desktop} ${tools} ${services} ${extras}"
packages="${arm} ${base} ${services} ${extras}"
architecture="armhf"
# If you have your own preferred mirrors, set them here.
# After generating the rootfs, we set the sources.list to the default settings.
@@ -59,28 +54,28 @@ cd ${basedir}
# create the rootfs - not much to modify here, except maybe the hostname.
if [ $1 == 'nightly' ]; then
debootstrap --foreign --arch $architecture kali-rolling kali-$architecture http://$mirror/kali
debootstrap --foreign --arch ${architecture} kali-rolling kali-${architecture} http://${mirror}/kali
else
debootstrap --foreign --arch $architecture kali-last-snapshot kali-$architecture http://$mirror/kali
debootstrap --foreign --arch ${architecture} kali-last-snapshot kali-${architecture} http://${mirror}/kali
fi
cp /usr/bin/qemu-arm-static kali-$architecture/usr/bin/
cp /usr/bin/qemu-arm-static kali-${architecture}/usr/bin/
LANG=C systemd-nspawn -M $machine -D kali-$architecture /debootstrap/debootstrap --second-stage
LANG=C systemd-nspawn -M $machine -D kali-${architecture} /debootstrap/debootstrap --second-stage
if [ $0 == 'nightly' ]; then
cat << EOF > kali-$architecture/etc/apt/sources.list
deb http://$mirror/kali kali-rolling main contrib non-free
cat << EOF > kali-${architecture}/etc/apt/sources.list
deb http://${mirror}/kali kali-rolling main contrib non-free
EOF
else
cat << EOF > kali-$architecture/etc/apt/sources.list
deb http://$mirror/kali kali-last-snapshot main contrib non-free
cat << EOF > kali-${architecture}/etc/apt/sources.list
deb http://${mirror}/kali kali-last-snapshot main contrib non-free
EOF
fi
echo "$hostname" > kali-$architecture/etc/hostname
cat << EOF > kali-$architecture/etc/hosts
127.0.0.1 $hostname localhost
echo "${hostname}" > kali-${architecture}/etc/hostname
cat << EOF > kali-${architecture}/etc/hosts
127.0.0.1 ${hostname} localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
@@ -88,7 +83,7 @@ ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
EOF
cat << EOF > kali-$architecture/etc/network/interfaces
cat << EOF > kali-${architecture}/etc/network/interfaces
auto lo
iface lo inet loopback
@@ -103,7 +98,7 @@ iface usb0 inet static
gateway 192.168.7.1
EOF
cat << EOF > kali-$architecture/etc/resolv.conf
cat << EOF > kali-${architecture}/etc/resolv.conf
nameserver 8.8.8.8
EOF
@@ -111,16 +106,16 @@ export MALLOC_CHECK_=0 # workaround for LP: #520465
export LC_ALL=C
export DEBIAN_FRONTEND=noninteractive
#mount -t proc proc kali-$architecture/proc
#mount -o bind /dev/ kali-$architecture/dev/
#mount -o bind /dev/pts kali-$architecture/dev/pts
#mount -t proc proc kali-${architecture}/proc
#mount -o bind /dev/ kali-${architecture}/dev/
#mount -o bind /dev/pts kali-${architecture}/dev/pts
cat << EOF > kali-$architecture/debconf.set
cat << EOF > kali-${architecture}/debconf.set
console-common console-data/keymap/policy select Select keymap from full list
console-common console-data/keymap/full select en-latin1-nodeadkeys
EOF
cat << 'EOF' > kali-$architecture/lib/systemd/system/regenerate_ssh_host_keys.service
cat << 'EOF' > kali-${architecture}/lib/systemd/system/regenerate_ssh_host_keys.service
[Unit]
Description=Regenerate SSH host keys
Before=ssh.service
@@ -133,9 +128,9 @@ ExecStartPost=/bin/sh -c "for i in /etc/ssh/ssh_host_*_key*; do actualsize=$(wc
[Install]
WantedBy=multi-user.target
EOF
chmod 644 kali-$architecture/lib/systemd/system/regenerate_ssh_host_keys.service
chmod 644 kali-${architecture}/lib/systemd/system/regenerate_ssh_host_keys.service
cat << EOF > kali-$architecture/lib/systemd/system/rpiwiggle.service
cat << EOF > kali-${architecture}/lib/systemd/system/rpiwiggle.service
[Unit]
Description=Resize filesystem
Before=regenerate_ssh_host_keys.service
@@ -147,10 +142,10 @@ ExecStartPost=/sbin/reboot
[Install]
WantedBy=multi-user.target
EOF
chmod 644 kali-$architecture/lib/systemd/system/rpiwiggle.service
chmod 644 kali-${architecture}/lib/systemd/system/rpiwiggle.service
cat << EOF > kali-$architecture/third-stage
cat << EOF > kali-${architecture}/third-stage
#!/bin/bash
dpkg-divert --add --local --divert /usr/sbin/invoke-rc.d.chroot --rename /usr/sbin/invoke-rc.d
cp /bin/true /usr/sbin/invoke-rc.d
@@ -168,10 +163,15 @@ apt-get -y install locales console-common less nano git
echo "root:toor" | chpasswd
rm -f /etc/udev/rules.d/70-persistent-net.rules
export DEBIAN_FRONTEND=noninteractive
apt-get --yes --allow-change-held-packages install $packages
if [ $? > 0 ];
apt-get --yes --allow-change-held-packages install ${packages}
if [[ $? > 0 ]];
then
apt-get --yes --allow-change-held-packages --fix-broken install
apt-get --yes --fix-broken install
fi
apt-get --yes --allow-change-held-packages install ${desktop} ${tools}
if [[ $? > 0 ]];
then
apt-get --yes --fix-broken install
fi
apt-get --yes --allow-change-held-packages dist-upgrade
apt-get --yes --allow-change-held-packages autoremove
@@ -193,10 +193,10 @@ dpkg-divert --remove --rename /usr/sbin/invoke-rc.d
rm -f /third-stage
EOF
chmod 755 kali-$architecture/third-stage
LANG=C systemd-nspawn -M $machine -D kali-$architecture /third-stage
chmod 755 kali-${architecture}/third-stage
LANG=C systemd-nspawn -M ${machine} -D kali-${architecture} /third-stage
cat << EOF > kali-$architecture/cleanup
cat << EOF > kali-${architecture}/cleanup
#!/bin/bash
rm -rf /root/.bash_history
apt-get update
@@ -207,71 +207,44 @@ rm -f cleanup
rm -f /usr/bin/qemu*
EOF
chmod 755 kali-$architecture/cleanup
LANG=C systemd-nspawn -M $machine -D kali-$architecture /cleanup
chmod 755 kali-${architecture}/cleanup
LANG=C systemd-nspawn -M ${machine} -D kali-${architecture} /cleanup
#umount kali-$architecture/proc/sys/fs/binfmt_misc
#umount kali-$architecture/dev/pts
#umount kali-$architecture/dev/
#umount kali-$architecture/proc
# Create the disk and partition it
echo "Creating image file for $imagename.img"
dd if=/dev/zero of=${basedir}/$imagename.img bs=1M count=7000
parted $imagename.img --script -- mklabel msdos
parted $imagename.img --script -- mkpart primary fat32 2048s 264191s
parted $imagename.img --script -- mkpart primary ext4 264192s 100%
# Set the partition variables
loopdevice=`losetup -f --show ${basedir}/$imagename.img`
device=`kpartx -va $loopdevice| sed -E 's/.*(loop[0-9])p.*/\1/g' | head -1`
sleep 5
device="/dev/mapper/${device}"
bootp=${device}p1
rootp=${device}p2
# Create file systems
mkfs.vfat -F 16 $bootp
mkfs.ext4 -O ^flex_bg -O ^metadata_csum $rootp
# Create the dirs for the partitions and mount them
mkdir -p ${basedir}/bootp ${basedir}/root
mount $bootp ${basedir}/bootp
mount $rootp ${basedir}/root
echo "Rsyncing rootfs into image file"
rsync -HPavz -q ${basedir}/kali-$architecture/ ${basedir}/root/
#umount kali-${architecture}/proc/sys/fs/binfmt_misc
#umount kali-${architecture}/dev/pts
#umount kali-${architecture}/dev/
#umount kali-${architecture}/proc
# Enable serial console on ttyO0
echo 'T1:12345:respawn:/sbin/agetty 115200 ttyO0 vt100' >> ${basedir}/root/etc/inittab
echo 'T1:12345:respawn:/sbin/agetty 115200 ttyO0 vt100' >> ${basedir}/kali-${architecture}/etc/inittab
cat << EOF >> ${basedir}/root/etc/udev/links.conf
cat << EOF >> ${basedir}/kali-${architecture}/etc/udev/links.conf
M ttyO0 c 5 1
EOF
cat << EOF >> ${basedir}/root/etc/securetty
cat << EOF >> ${basedir}/kali-${architecture}/etc/securetty
ttyO0
EOF
cat << EOF > ${basedir}/root/etc/apt/sources.list
cat << EOF > ${basedir}/kali-${architecture}/etc/apt/sources.list
deb http://http.kali.org/kali kali-rolling main non-free contrib
deb-src http://http.kali.org/kali kali-rolling main non-free contrib
EOF
echo "Setting up modules.conf"
# rm the symlink if it exists, and the original files if they exist
rm ${basedir}/root/etc/modules
rm ${basedir}/root/etc/modules-load.d/modules.conf
cat << EOF > ${basedir}/root/etc/modules-load.d/modules.conf
rm ${basedir}/kali-${architecture}/etc/modules
rm ${basedir}/kali-${architecture}/etc/modules-load.d/modules.conf
cat << EOF > ${basedir}/kali-${architecture}/etc/modules-load.d/modules.conf
g_ether
EOF
# Uncomment this if you use apt-cacher-ng or else git clones will fail.
#unset http_proxy
git clone https://github.com/beagleboard/linux -b 4.9 --depth 1 ${basedir}/root/usr/src/kernel
cd ${basedir}/root/usr/src/kernel
git rev-parse HEAD > ../kernel-at-commit
git clone https://github.com/beagleboard/linux -b 4.9 --depth 1 ${basedir}/kali-${architecture}/usr/src/kernel
cd ${basedir}/kali-${architecture}/usr/src/kernel
git rev-parse HEAD > ${basedir}/kali-${architecture}/usr/src/kernel-at-commit
export ARCH=arm
# Edit the CROSS_COMPILE variable as needed.
export CROSS_COMPILE=arm-linux-gnueabihf-
@@ -280,14 +253,18 @@ patch -p1 --no-backup-if-mismatch < ${basedir}/../patches/kali-wifi-injection-4.
patch -p1 --no-backup-if-mismatch < ${basedir}/../patches/0001-wireless-carl9170-Enable-sniffer-mode-promisc-flag-t.patch
make bb.org_defconfig
make -j $(grep -c processor /proc/cpuinfo)
cp arch/arm/boot/zImage ${basedir}/bootp/zImage
mkdir -p ${basedir}/bootp/dtbs
cp arch/arm/boot/dts/*.dtb ${basedir}/bootp/dtbs/
make INSTALL_MOD_PATH=${basedir}/root modules_install
cp arch/arm/boot/zImage ${basedir}/kali-${architecture}/boot/zImage
mkdir -p ${basedir}/kali-${architecture}/boot/dtbs
cp arch/arm/boot/dts/*.dtb ${basedir}/kali-${architecture}/boot/dtbs/
make INSTALL_MOD_PATH=${basedir}/kali-${architecture} modules_install
make INSTALL_MOD_PATH=${basedir}/kali-${architecture} firmware_install
make mrproper
make bb.org_defconfig
make modules_prepare
cd ${basedir}
# Create uEnv.txt file
cat << EOF > ${basedir}/bootp/uEnv.txt
cat << EOF > ${basedir}/kali-${architecture}/boot/uEnv.txt
#u-boot eMMC specific overrides; Angstrom Distribution (BeagleBone Black) 2013-06-20
kernel_file=zImage
initrd_file=uInitrd
@@ -317,13 +294,13 @@ uenvcmd=run loadzimage; run loadfdt; run mmcargs; bootz \${loadaddr} - \${fdtadd
#uenvcmd=run boot_fdt; run mmcargs; bootz \${loadaddr} 0x81000000:\${initrd_size} \${fdtaddr}
EOF
cat << EOF > ${basedir}/root/etc/fstab
cat << EOF > ${basedir}/kali-${architecture}/etc/fstab
/dev/mmcblk0p2 / auto errors=remount-ro 0 1
/dev/mmcblk0p1 /boot auto defaults 0 0
EOF
mkdir -p ${basedir}/root/etc/X11/
cat << EOF > ${basedir}/root/etc/X11/xorg.conf
mkdir -p ${basedir}/kali-${architecture}/etc/X11/
cat << EOF > ${basedir}/kali-${architecture}/etc/X11/xorg.conf
Section "Monitor"
Identifier "Builtin Default Monitor"
EndSection
@@ -350,18 +327,11 @@ Section "ServerLayout"
EndSection
EOF
cd ${basedir}/root/usr/src/kernel
make INSTALL_MOD_PATH=${basedir}/root firmware_install
make mrproper
make bb.org_defconfig
make modules_prepare
cd ${basedir}
# Fix up the symlink for building external modules
# kernver is used so we don't need to keep track of what the current compiled
# version is
kernver=$(ls ${basedir}/root/lib/modules/)
cd ${basedir}/root/lib/modules/$kernver
kernver=$(ls ${basedir}/kali-${architecture}/lib/modules/)
cd ${basedir}/kali-${architecture}/lib/modules/${kernver}
rm build
rm source
ln -s /usr/src/kernel build
@@ -370,30 +340,65 @@ cd ${basedir}
# Unused currently, but this script is a part of using the usb as an ethernet
# device.
wget -c https://raw.github.com/RobertCNelson/tools/master/scripts/beaglebone-black-g-ether-load.sh -O ${basedir}/root/root/beaglebone-black-g-ether-load.sh
chmod 755 ${basedir}/root/root/beaglebone-black-g-ether-load.sh
wget -c https://raw.github.com/RobertCNelson/tools/master/scripts/beaglebone-black-g-ether-load.sh -O ${basedir}/kali-${architecture}/root/beaglebone-black-g-ether-load.sh
chmod 755 ${basedir}/kali-${architecture}/root/beaglebone-black-g-ether-load.sh
cp ${basedir}/../misc/zram ${basedir}/root/etc/init.d/zram
chmod 755 ${basedir}/root/etc/init.d/zram
cp ${basedir}/../misc/zram ${basedir}/kali-${architecture}/etc/init.d/zram
chmod 755 ${basedir}/kali-${architecture}/etc/init.d/zram
sed -i -e 's/^#PermitRootLogin.*/PermitRootLogin yes/' ${basedir}/kali-${architecture}/etc/ssh/sshd_config
sed -i -e 's/^#PermitRootLogin.*/PermitRootLogin yes/' ${basedir}/root/etc/ssh/sshd_config
# rpi-wiggle
mkdir -p ${basedir}/root/root/scripts
wget https://raw.github.com/offensive-security/rpiwiggle/master/rpi-wiggle -O ${basedir}/root/root/scripts/rpi-wiggle.sh
chmod 755 ${basedir}/root/root/scripts/rpi-wiggle.sh
mkdir -p ${basedir}/kali-${architecture}/root/scripts
wget https://raw.github.com/offensive-security/rpiwiggle/master/rpi-wiggle -O ${basedir}/kali-${architecture}/root/scripts/rpi-wiggle.sh
chmod 755 ${basedir}/kali-${architecture}/root/scripts/rpi-wiggle.sh
# Create the disk and partition it
echo "Creating image file for ${imagename}.img"
dd if=/dev/zero of=${basedir}/${imagename}.img bs=1M count=${size}
parted ${imagename}.img --script -- mklabel msdos
parted ${imagename}.img --script -- mkpart primary fat32 2048s 264191s
parted ${imagename}.img --script -- mkpart primary ext4 264192s 100%
# Set the partition variables
loopdevice=`losetup -f --show ${basedir}/${imagename}.img`
device=`kpartx -va ${loopdevice} | sed 's/.*\(loop[0-9]\+\)p.*/\1/g' | head -1`
sleep 5
device="/dev/mapper/${device}"
bootp=${device}p1
rootp=${device}p2
# Create file systems
mkfs.vfat -F 16 ${bootp}
mkfs.ext4 -O ^flex_bg -O ^metadata_csum ${rootp}
# Create the dirs for the partitions and mount them
mkdir -p ${basedir}/root
mount ${rootp} ${basedir}/root
mkdir -p ${basedir}/root/boot
mount ${bootp} ${basedir}/root/boot
# We do this down here to get rid of the build system's resolv.conf after running through the build.
cat << EOF > kali-${architecture}/etc/resolv.conf
nameserver 8.8.8.8
EOF
echo "Rsyncing rootfs into image file"
rsync -HPavz -q ${basedir}/kali-${architecture}/ ${basedir}/root/
# Unmount partitions
umount $bootp
umount $rootp
kpartx -dv $loopdevice
losetup -d $loopdevice
sync
umount ${bootp}
umount ${rootp}
kpartx -dv ${loopdevice}
losetup -d ${loopdevice}
# Don't pixz on 32bit, there isn't enough memory to compress the images.
MACHINE_TYPE=`uname -m`
if [ ${MACHINE_TYPE} == 'x86_64' ]; then
echo "Compressing $imagename.img"
pixz ${basedir}/$imagename.img ${basedir}/../$imagename.img.xz
rm ${basedir}/$imagename.img
echo "Compressing ${imagename}.img"
pixz ${basedir}/${imagename}.img ${basedir}/../${imagename}.img.xz
rm ${basedir}/${imagename}.img
fi
# Clean up all the temporary build stuff and remove the directories.