forked from ungleich-public/cdist
Compare commits
5 commits
master
...
feature_in
Author | SHA1 | Date | |
---|---|---|---|
|
c829be2d40 | ||
|
edf01900f3 | ||
|
cc144d9e8f | ||
|
9d35be6acd | ||
|
9ad2840600 |
5 changed files with 90 additions and 78 deletions
|
@ -3,7 +3,11 @@
|
||||||
rm -rf preos
|
rm -rf preos
|
||||||
mkdir -p preos/boot
|
mkdir -p preos/boot
|
||||||
|
|
||||||
./create_initramfs.sh > preos/boot/initramfs
|
initramfs=preos/boot/initramfs
|
||||||
|
|
||||||
|
./create_initramfs.sh > "$initramfs"
|
||||||
./add_kernel_isolinux.sh preos
|
./add_kernel_isolinux.sh preos
|
||||||
./copy_bin_with_libs.sh preos
|
./copy_bin_with_libs.sh preos
|
||||||
./create_iso.sh preos preos.iso
|
./create_iso.sh preos preos.iso
|
||||||
|
|
||||||
|
exit 0
|
||||||
|
|
|
@ -13,13 +13,17 @@ fi
|
||||||
|
|
||||||
out_dir=$1
|
out_dir=$1
|
||||||
|
|
||||||
|
# TODO:
|
||||||
|
# - various mkfs
|
||||||
|
|
||||||
#bin_list="udevadm bash fdisk mount syslinux umount rm mv"
|
#bin_list="udevadm bash fdisk mount syslinux umount rm mv"
|
||||||
bin_list="udevadm fdisk"
|
bin_list="udevadm fdisk sshd ssh-keygen"
|
||||||
|
|
||||||
|
# debug tools
|
||||||
|
bin_list="$bin_list strace less"
|
||||||
|
|
||||||
libs=$(mktemp /tmp/cdist-preos-libs.XXXXXXXXXXXXX)
|
libs=$(mktemp /tmp/cdist-preos-libs.XXXXXXXXXXXXX)
|
||||||
|
|
||||||
mkdir -p "$out_dir/bin" "$out_dir/lib"
|
|
||||||
|
|
||||||
(
|
(
|
||||||
for bin in $bin_list; do
|
for bin in $bin_list; do
|
||||||
src=$(which "$bin")
|
src=$(which "$bin")
|
||||||
|
@ -31,30 +35,10 @@ mkdir -p "$out_dir/bin" "$out_dir/lib"
|
||||||
|
|
||||||
|
|
||||||
while read lib; do
|
while read lib; do
|
||||||
if echo $lib | grep '^/'; then
|
if echo $lib | grep -q '^/'; then
|
||||||
# echo "Copying fqdn lib $lib ..."
|
# echo "Copying fqdn lib $lib ..."
|
||||||
cp "$lib" "$out_dir/lib"
|
cp "$lib" "$out_dir/lib"
|
||||||
else
|
|
||||||
echo "How to copy $lib ?"
|
|
||||||
fi
|
fi
|
||||||
done < "$libs"
|
done < "$libs"
|
||||||
|
|
||||||
|
|
||||||
rm -f "$libs"
|
rm -f "$libs"
|
||||||
|
|
||||||
exit 0
|
|
||||||
|
|
||||||
|
|
||||||
bin=$1
|
|
||||||
|
|
||||||
# Not used alternatives
|
|
||||||
# new_list=$(objdump -p /usr/bin/ls | awk '$1 ~ /NEEDED/ { print $2 }')
|
|
||||||
# ldconfig -p | grep 'libBrokenLocale.so.1$' | sed 's/.* => //'
|
|
||||||
|
|
||||||
|
|
||||||
for new_item in $new_list; do
|
|
||||||
|
|
||||||
|
|
||||||
done
|
|
||||||
|
|
||||||
ldconfig -p |
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
set -ex
|
set -e
|
||||||
|
|
||||||
|
here=$(pwd -P)
|
||||||
|
|
||||||
initramfs_dir=$(mktemp -d /tmp/cdist-preos.XXXXXXX)
|
initramfs_dir=$(mktemp -d /tmp/cdist-preos.XXXXXXX)
|
||||||
# initramfs_dir=$1
|
# initramfs_dir=$1
|
||||||
|
@ -18,15 +19,19 @@ for link in sh mount; do
|
||||||
done
|
done
|
||||||
|
|
||||||
cd "${initramfs_dir}"
|
cd "${initramfs_dir}"
|
||||||
find . | cpio -H newc -o | gzip
|
|
||||||
|
|
||||||
|
# Add Arch Linux initramfs with kernel modules included
|
||||||
|
zcat /boot/initramfs-linux-fallback.img | cpio -i
|
||||||
|
|
||||||
|
# Add helper binaries
|
||||||
|
"$here/copy_bin_with_libs.sh" "$initramfs_dir" >/dev/null 2>&1
|
||||||
|
"$here/sshd_config.sh" "$initramfs_dir"
|
||||||
|
|
||||||
|
|
||||||
|
# Create new initramfs
|
||||||
|
find . | cpio -H newc -R root -o | gzip
|
||||||
|
|
||||||
|
# echo ${initramfs_dir}
|
||||||
rm -rf "${initramfs_dir}"
|
rm -rf "${initramfs_dir}"
|
||||||
|
|
||||||
exit 0
|
exit 0
|
||||||
|
|
||||||
# TODO:
|
|
||||||
# - Kernel modules
|
|
||||||
# - ssh
|
|
||||||
# - various mkfs
|
|
||||||
# - libs
|
|
||||||
|
|
||||||
|
|
|
@ -10,52 +10,23 @@ mount -t sysfs sysfs /sys
|
||||||
# Disable kernel messages from popping onto the screen
|
# Disable kernel messages from popping onto the screen
|
||||||
echo 0 > /proc/sys/kernel/printk
|
echo 0 > /proc/sys/kernel/printk
|
||||||
|
|
||||||
|
|
||||||
# Create device nodes
|
# Create device nodes
|
||||||
mknod /dev/null c 1 3
|
mknod /dev/null c 1 3
|
||||||
mknod /dev/tty c 5 0
|
mknod /dev/tty c 5 0
|
||||||
mdev -s
|
mdev -s
|
||||||
|
|
||||||
#Function for parsing command line options with "=" in them
|
# udev stuff
|
||||||
# get_opt("init=/sbin/init") will return "/sbin/init"
|
kmod static-nodes --format=tmpfiles --output=/run/tmpfiles.d/kmod.conf
|
||||||
get_opt() {
|
systemd-tmpfiles --prefix=/dev --create --boot
|
||||||
echo "$@" | cut -d "=" -f 2
|
/usr/lib/systemd/systemd-udevd --daemon --resolve-names=never
|
||||||
}
|
udevadm trigger --action=add --type=subsystems
|
||||||
|
udevadm trigger --action=add --type=devices
|
||||||
|
udevadm settle
|
||||||
|
|
||||||
#Defaults
|
# /bin/sshd
|
||||||
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
|
|
||||||
|
|
||||||
|
# Generate keys for sshd
|
||||||
|
echo "Generating keys for sshd"
|
||||||
|
ssh-keygen -A
|
||||||
|
|
||||||
exec sh
|
exec sh
|
||||||
|
|
||||||
# Skipping the rest
|
|
||||||
|
|
||||||
#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
|
|
||||||
|
|
48
hacking/v3-busybox/sshd_config.sh
Executable file
48
hacking/v3-busybox/sshd_config.sh
Executable file
|
@ -0,0 +1,48 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
if [ "$#" -ne 1 ]; then
|
||||||
|
echo "$0: output directory"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
dir=$1
|
||||||
|
|
||||||
|
mkdir -p "$dir/etc/ssh"
|
||||||
|
mkdir -p "$dir/root/.ssh"
|
||||||
|
mkdir -p "$dir/lib"
|
||||||
|
|
||||||
|
cat << eof > "$dir/etc/ssh/sshd_config"
|
||||||
|
# cdist generated - do not modify
|
||||||
|
PermitRootLogin without-password
|
||||||
|
eof
|
||||||
|
|
||||||
|
cat << eof > "$dir/etc/passwd"
|
||||||
|
root:x:0:0:root:/root:/bin/bash
|
||||||
|
nobody:x:99:99:nobody:/:/bin/false
|
||||||
|
eof
|
||||||
|
|
||||||
|
cat << eof > "$dir/etc/group"
|
||||||
|
root:x:0:root
|
||||||
|
nobody:x:99:
|
||||||
|
eof
|
||||||
|
|
||||||
|
# libpam not found
|
||||||
|
# /etc/ssl/openssl.cnf
|
||||||
|
# /etc/gai.conf
|
||||||
|
# no nscd socket
|
||||||
|
# /etc/nsswitch.conf
|
||||||
|
# libnss_compat.so.2
|
||||||
|
# libnss_files.so.2
|
||||||
|
|
||||||
|
# Fixes the user problem
|
||||||
|
cp /lib/libnss* "$dir/lib"
|
||||||
|
|
||||||
|
# Required by sshd
|
||||||
|
mkdir -p "$dir/var/empty"
|
||||||
|
chmod 0700 "$dir/var/empty"
|
||||||
|
|
||||||
|
#cat << eof > "$dir/etc/shadow"
|
||||||
|
#root:x:0:0:root:/root:/bin/bash
|
||||||
|
#nobody:x:1::::::
|
||||||
|
#eof
|
||||||
|
|
Loading…
Reference in a new issue