Пакет nWipe, скомпилированный в Centos, не работает во встроенном Linux Busybox

Я собрал утилиту с открытым исходным кодом nwipe в Centos. После компиляции он работает абсолютно нормально на машине, где он был скомпилирован. Я также скопировал скомпилированный пакет на другую машину с Centos вместе с необходимыми библиотеками, и она отлично работает.

Я попытался упаковать эту утилиту для работы со встроенным Linux Busybox RAMBOX. Целью этой утилиты является PXEBoot рабочие станции через TFTP и автоматическое стирание всех жестких дисков.

Для этого я использовал ядро ​​Linux с компакт-диска сетевой загрузки Centos и загрузил утилиту busybox, скопированную nwipe, скомпилированную на другом сервере разработки Centos.

Я также скопировал все необходимые библиотеки. Увидеть ниже.

когда я делаю ldd nwipe. Он показывает зависимости для библиотек.

[root@localhost src]# ldd nwipe
linux-gate.so.1 =>  (0x00a78000)
libpthread.so.0 => /lib/libpthread.so.0 (0x00650000)
libparted.so.2 => /usr/lib/libparted.so.2 (0x007fd000)
libpanel.so.5 => /usr/lib/libpanel.so.5 (0x00dd0000)
libncurses.so.5 => /lib/libncurses.so.5 (0x006db000)
libc.so.6 => /lib/libc.so.6 (0x004b0000)
libtinfo.so.5 => /lib/libtinfo.so.5 (0x007e2000)
/lib/ld-linux.so.2 (0x0048a000)
libuuid.so.1 => /lib/libuuid.so.1 (0x0025b000)
libdl.so.2 => /lib/libdl.so.2 (0x00649000)
libdevmapper.so.1.02 => /lib/libdevmapper.so.1.02 (0x0073c000)
libselinux.so.1 => /lib/libselinux.so.1 (0x006ba000)
libsepol.so.1 => /lib/libsepol.so.1 (0x00a2e000)
libudev.so.0 => /lib/libudev.so.0 (0x0066d000)

поэтому я скопировал все эти зависимости библиотек в папки busybox / lib / usr / lib.

Наконец, я скомпилировал busybox и использовал cpio и gzip для получения файла initrd.img.

Затем я использую centos netboot kernel 2.6 и initrd.img для pxeboot рабочей станции. Все работает отлично, я могу использовать все основные команды Linux Linux busybox. Но когда я выполняю ./nwipe это не работает. Он просто снова показывает приглашение оболочки.

/# ./nwipe
/#

см. ниже содержание моего файла инициализации.

#!/bin/sh

#Mount things needed by this script
mount -t proc proc /proc
mount -t sysfs sysfs /sys

#Disable kernel messages from popping onto the screen
echo 0 > /proc/sys/kernel/printk

#Clear the screen
clear

#Create all the symlinks to /bin/busybox
busybox --install -s

#Create device nodes
mknod /dev/null c 1 3
mknod /dev/tty c 5 0
mdev -s

#Function for parsing command line options with "=" in them
# get_opt("init=/sbin/init") will return "/sbin/init"get_opt() {
echo "$@" | cut -d "=" -f 2
}

#Defaults
init="/sbin/init"root="/dev/hda1"
#Process command line options
for i in $(cat /proc/cmdline); do
case $i in
root\=*)
root=$(get_opt $i)
;;
init\=*)
init=$(get_opt $i)
;;
esac
done
#Mount the root device
mount "${root}" /newroot

#Check if $init exists and is executable
if [[ -x "/newroot/${init}" ]] ; then
#Unmount all other mounts so that the ram used by
#the initramfs can be cleared after switch_root
umount /sys /proc

#Switch to the new root and execute init
exec switch_root /newroot "${init}"fi

#This will only be run if the exec above failed
echo "Failed to switch_root, dropping to a shell"exec sh

Может кто-нибудь, пожалуйста, помогите мне, что я должен сделать, чтобы это исправить?

Как я могу запустить скомпилированное программное обеспечение с busybox?

Заранее благодарим за чтение этого поста.

0

Решение

Мне удалось это исправить, не используя busybox. На этот раз я использовал минимальную установку Centos и использовал утилиту dracut для создания ядра и initramfs и смонтировал корневую файловую систему как NFS на сервере. Отлично работает.

Он работает как полноценный Linux Centos и довольно быстрый.

Спасибо за просмотр этого поста 🙂

0

Другие решения