Compare commits

...

5 commits

Author SHA1 Message Date
Nico Schottelius
c829be2d40 change owner to root in initramfs
Signed-off-by: Nico Schottelius <nico@wurzel.schottelius.org>
2015-06-16 11:21:36 +02:00
Nico Schottelius
edf01900f3 fix permissions for /var/empty
Signed-off-by: Nico Schottelius <nico@wurzel.schottelius.org>
2015-06-16 11:16:33 +02:00
Nico Schottelius
cc144d9e8f generate ssh keys
Signed-off-by: Nico Schottelius <nico@wurzel.schottelius.org>
2015-06-16 11:14:50 +02:00
Nico Schottelius
9d35be6acd add script to configure sshd
Signed-off-by: Nico Schottelius <nico@wurzel.schottelius.org>
2015-06-16 10:11:16 +02:00
Nico Schottelius
9ad2840600 Working PreOS without SSH
Signed-off-by: Nico Schottelius <nico@wurzel.schottelius.org>
2015-06-15 21:57:48 +02:00
5 changed files with 90 additions and 78 deletions

View file

@ -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

View file

@ -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 |

View file

@ -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

View file

@ -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

View 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