Сборка 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-картой
# Создание образа на 15GBdd 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
# Распаковываем
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_h3_linux/master/OrangePi-Kernel/linux-4.9/arch/arm/configs/sun8iw7p1_mainline_defconfig»
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
# Переходим в директорию
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
# Копируем значение 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/kalichroot /mnt/kali_root /debootstrap/debootstrap —second-stage
# Теперь можно сделать chroot в собранную систему
chroot /mnt/kali_root /bin/bash
# Монтируем /proc
mount -t proc /proc /proc
# Выполним необходимые минимальные настройки
passwd root # Пароль root
adduser # Добавим пользователя
usermod -a -G 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 > /etc/fstabUUID=9facb21c-e5e1-404c-8c46-babbf90af2c9 / ext4 defaults,noatime,commit=600,errors=remount-ro 0 1tmpfs /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-карточку.