11

Сборка Kali Linux для Orange PI PC (armhf)

Доброго времени суток!
Это краткая инструкция о том, как собрать Kali Linux (можно и любой другой дистрибутив) для Orange PI PC.

Небольшое отступление. Я все действия производил на виртуальной машине, ибо мне было так удобно. Виртуальная машина с Kali Linux на VM Ware. Если Вам будет удобно это делать из домашней ОС (Linux, разумеется) - Вам никто не запрещает, можно и так.. У меня домашняя ОС - это Windows 10. Кстати на системе с ядром версии 6.0.0 у меня на отрез отказывался монтироваться образ системы Armbian с ошибкой суперблока. Так-же при записи загрузчика (u-boot) на образ новой системы - образ в дальнейшем тоже отказывался монтироваться. На ядре 5.18.1 таких проблем обнаружено не было. Так-же крайне желательно обладать хотя-бы скудными познаниями в linux-командах, что-бы потом понять, что и где пошло не так! БЕЗДУМНОЕ КОПИРОВАНИЕ КОМАНД НЕ ПОМОЖЕТ В ДАННОМ СЛУЧАЕ! ЭТО ОЧЕНЬ ВАЖНО!!!

Все авторы, причастные к данному дистрибутиву, администрация форума, а так-же автор данного поста не несут никакой ответственности за ваши противоправные действия и оборудование, примененное в злоумышленных целях! Оценивайте все свои действия в здравом уме! ВЫ ВСЕ ДЕЛАЕТЕ НА СВОЙ СТРАХ И РИСК! Так-же автор данного поста не побуждает Вас и кого-либо еще совершать какие-либо незаконные действия !!! Эта сборка была создана и портированна в ознакомительных и образовательно-научных целях! Несите добро в этот мир!

Подготовка рабочего окружения


# Для сборки необходимо установить несколько важных зависимостей в систему из которой будет производиться сборка

apt install parted dosfstools e2fsprogs debootstrap crossbuild-essential-armhf bison flex libssl-dev bc libncurses5-dev libncursesw5-dev libtool swig python3-setuptools python3-pip crossbuild-essential-arm64 crossbuild-essential-armhf crossbuild-essential-armel gcc-arm-none-eabi u-boot-tools

# Так-же крайне желательно наличие преобразователя USB <> UART для отладки.

Шаг 1. Подготовка образа диска


# Этот этап можно пропустить, если Вы работаете из домашней системы и все необходимые действия можно выполнять на прямую с SD-картой

# Создание образа на 15GB
dd if=/dev/zero of=vhd.img bs=1 count=0 seek=15G

# Создание файловой системы
parted -s vhd.img mklabel msdos
parted -s vhd.img mkpart primary ext4 4MiB 100%
partprobe

# Интерпретируем как блочное устройство
losetup -f vhd.img

# Смотрим, какое название разделу присвоила система
losetup -a
/dev/loop0p1 (/home/kali/dev/vhd.img)

# Форматируем в ext4
mkfs.ext4 -L kali_root /dev/loop0p1

# Монтируем
mkdir /mnt/kali_root && mount /dev/loop0p1 /mnt/kali_root

Шаг 2. Сборка ядра Linux


# Для начала скачиваем последнее ядро с kernel.org

wget "https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.0.8.tar..."

# Распаковываем
tar -xvf linux-6.0.8.tar.xz

# Переходим в папку с ядром
cd linux-6.0.8

# Очищаем
make clean && make distclean && make mrproper

# Нам нужно найти конфигурационный файл от нашей платы (sun8iw7p1_mainline_defconfig) и положить его по пути arch/arm/configs
wget "https://raw.githubusercontent.com/orangepi-xunlong/orangepi_..."
mv sun8iw7p1_mainline_defconfig arch/arm/configs/sun8iw7p1_mainline_defconfig

# Создадим первоначальную конфигурацию ядра с указанием архитектуры и кросс-компилятора
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- sun8iw7p1_mainline_defconfig

# Соберем дерево устройств
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- dtbs

# Переходим в конфигурацию
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig

(настраиваем все, что нам надо и выходим с сохранением настроек)

# Собираем ядро в 4 потока
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j4

# Собираем модули
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- modules

Шаг 4. Сборка загрузчика u-boot


# Клонируем u-boot последней версии с github

git clone https://github.com/u-boot/u-boot.git

# Переходим в директорию
cd u-boot

# Указываем нашу плату
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- orangepi_pc_defconfig

# Переходим в конфигурацию
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig

(настраиваем все, что нам надо и выходим с сохранением настроек)

# Собираем загрузчик в 4 потока
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j4

Шаг 5. uInitrd


# Данный шаг самый простой. Образ загрузчика initramfs можно взять из любой подобной операционной системы. Я к примеру взял из armbian

# Что-бы его от туда достать - качаем образ с официального сайта для нашей платы, монтируем образ как диск
mkdir /mnt/armbi_root && mount Armbian_22.08.2_Orangepipc_jammy_current_5.15.69.img /mnt/armbi_root

# Копируем
mkdir /mnt/kali_root/boot && cp /mnt/armbi_root/boot/uInitrd-5.15.69-sunxi /mnt/kali_root/boot/uInitrd-5.15.69-sunxi

# Так-же можем вытянуть boot.cmd и armbianEnv.txt
cp /mnt/armbi_root/boot/boot.cmd /mnt/kali_root/boot/boot.cmd
cp /mnt/armbi_root/boot/armbianEnv.txt /mnt/kali_root/boot/uboot.env

Шаг 6. Подготовка


# Копируем файл ядра в образ

mkdir /mnt/kali_root/boot && cp linux-6.0.8/arch/arm/boot/zImage /mnt/kali_root/boot/linux-6.0.8

# Копируем дерево устройств
mkdir /mnt/kali_root/boot/dtb-6.0.8 && cp linux-6.0.8/arch/arm/boot/dts/*.dtb /mnt/kali_root/boot/dtb-6.0.8

# Узнаем UUID нашего раздела (/dev/loop0p1)
blkid
/dev/loop0p1: LABEL="kali_root" UUID="9facb21c-e5e1-404c-8c46-babbf90af2c9" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="df63022b-01"
/dev/sda1: LABEL="root" UUID="ea15ea92-0b42-4db4-bb97-b4e86a29542a" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="4419f333-0
1"

# Копируем значение 9facb21c-e5e1-404c-8c46-babbf90af2c9 и заменяем его в uboot.env
# В файле boot.cmd меняем все значения с armbianEnv.txt на uboot.env

# Копируем загрузчик в раздел
dd if=u-boot/u-boot-sunxi-with-spl.bin of=/dev/loop0 bs=1024 seek=8

# Переходим в директорию загрузчика
cd /mnt/kali_root/boot

# Соберем boot.scr
mkimage -C none -A arm -T script -d boot.cmd boot.scr

# Создадим симлинки для загрузчика
ln -s uInitrd-5.15.69-sunxi uInitrd
ln -s linux-6.0.8 zImage
ln -s dtb-6.0.8 dtb

Шаг 7. Сборка системы


# Для начала нужно собрать основу для системы, воспользуемся debootstrap с репозиториями kali-rolling и установим qemu-user-static

debootstrap --foreign --include=qemu-user-static --arch armhf kali-rolling /mnt/kali_root http://http.kali.org/kali
chroot /mnt/kali_root /debootstrap/debootstrap --second-stage

# Теперь можно сделать chroot в собранную систему
chroot /mnt/kali_root /bin/bash

# Монтируем /proc
mount -t proc /proc /proc

# Выполним необходимые минимальные настройки
passwd root # Пароль root

adduser <username> # Добавим пользователя
usermod -a -G <username> sudo # Добавим его в группу sudo

# Задаём имя хоста
echo 'kali' > /etc/hostname
sed -i '2 i 127.0.0.1 kali' /etc/hosts

# Создаем автомонтирование в fstab (9facb21c-e5e1-404c-8c46-babbf90af2c9 - меняем на свой UUID)
cat <<EOF > /etc/fstab
UUID=9facb21c-e5e1-404c-8c46-babbf90af2c9 / ext4 defaults,noatime,commit=600,errors=remount-ro 0 1
tmpfs /tmp tmpfs defaults,nosuid 0 0

EOF

# Обновим репозитории
echo 'deb http://http.kali.org/kali kali-rolling main contrib non-free' > /etc/apt/sources.list
apt update

# Ставим пакеты
apt install ca-certificates iw parted sudo wpasupplicant command-not-found fontconfig kali-defaults kali-menu \
kali-tweaks netcat-traditional tmux unrar vim wireless-regdb zsh zsh-autosuggestions \
zsh-syntax-highlighting apt-transport-https dialog ifupdown inxi kali-linux-core \
libnss-systemd man-db mlocate net-tools network-manager pciutils psmisc rfkill screen \
snmp snmpd tftp triggerhappy usbutils whiptail zerofree apache2 atftpd openvpn ssh tightvncserver \
bluelog blueranger bluesnarfer bluez-tools bridge-utils cmake darkstat dnsmasq htop libusb-1.0-0-dev \
locate mailutils pure-ftpd tigervnc-standalone-server wifiphisher kali-linux-default kali-desktop-xfce \
alsa-utils xfonts-terminus xinput xserver-xorg-video-fbdev xserver-xorg-input-libinput ntpdate u-boot-tools \
passing-the-hash winexe aircrack-ng hydra john sqlmap wireshark libnfc-bin mfoc \
abootimg cgpt fake-hwclock

# Выходим из chroot
exit

# Устанавливаем модули ядра
cd linux-6.0.8
make CROSS_COMPILE=arm-linux-gnueabihf- modules_install INSTALL_MOD_PATH=/mnt/kali_root

✔ Получившийся в итоге образ vhd.img - и будет тем самым образом для записи на SD-карточку

Сборка Kali Linux для Orange PI PC (armhf) Kali linux, Arm, Linux, Длиннопост, Одноплатный компьютер, Orange pi
Сборка Kali Linux для Orange PI PC (armhf) Kali linux, Arm, Linux, Длиннопост, Одноплатный компьютер, Orange pi
Сборка Kali Linux для Orange PI PC (armhf) Kali linux, Arm, Linux, Длиннопост, Одноплатный компьютер, Orange pi
У меня все эти манипуляции заняли 5 дней (я просто не особо умный), было много разных ошибок, наступал на кучу разных гребель и ломал их себе об голову, начинал крыть псих, самооценка стремилась к нулю.... Вот кстати - если кто-то возьмется объяснить мне - как собрать образ initramfs - буду дико благодарен. Пока что я его беру из сторонней системы. По поводу ядра. Я может слишком погорячился, взяв версию 6.0.8 (последняя на 13.11.2022) ?