(2006-08-06) rescue-bootcd
This commit is contained in:
118
extra/linux-2.6.10/scripts/gen_initramfs_list.sh
Normal file
118
extra/linux-2.6.10/scripts/gen_initramfs_list.sh
Normal file
@@ -0,0 +1,118 @@
|
||||
#!/bin/bash
|
||||
# Copyright (C) Martin Schlemmer <azarah@nosferatu.za.org>
|
||||
# Released under the terms of the GNU GPL
|
||||
#
|
||||
# Generate a newline separated list of entries from the file/directory pointed
|
||||
# out by the environment variable: CONFIG_INITRAMFS_SOURCE
|
||||
#
|
||||
# If CONFIG_INITRAMFS_SOURCE is non-existing then generate a small dummy file.
|
||||
#
|
||||
# The output is suitable for gen_init_cpio as found in usr/Makefile.
|
||||
#
|
||||
# TODO: Add support for symlinks, sockets and pipes when gen_init_cpio
|
||||
# supports them.
|
||||
|
||||
simple_initramfs() {
|
||||
cat <<-EOF
|
||||
# This is a very simple initramfs
|
||||
|
||||
dir /dev 0755 0 0
|
||||
nod /dev/console 0600 0 0 c 5 1
|
||||
dir /root 0700 0 0
|
||||
EOF
|
||||
}
|
||||
|
||||
filetype() {
|
||||
local argv1="$1"
|
||||
|
||||
if [ -f "${argv1}" ]; then
|
||||
echo "file"
|
||||
elif [ -d "${argv1}" ]; then
|
||||
echo "dir"
|
||||
elif [ -b "${argv1}" -o -c "${argv1}" ]; then
|
||||
echo "nod"
|
||||
else
|
||||
echo "invalid"
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
|
||||
print_mtime() {
|
||||
local argv1="$1"
|
||||
local my_mtime="0"
|
||||
|
||||
if [ -e "${argv1}" ]; then
|
||||
my_mtime=$(find "${argv1}" -printf "%T@\n" | sort -r | head -n 1)
|
||||
fi
|
||||
|
||||
echo "# Last modified: ${my_mtime}"
|
||||
echo
|
||||
}
|
||||
|
||||
parse() {
|
||||
local location="$1"
|
||||
local name="${location/${srcdir}//}"
|
||||
local mode="$2"
|
||||
local uid="$3"
|
||||
local gid="$4"
|
||||
local ftype=$(filetype "${location}")
|
||||
local str="${mode} ${uid} ${gid}"
|
||||
|
||||
[ "${ftype}" == "invalid" ] && return 0
|
||||
[ "${location}" == "${srcdir}" ] && return 0
|
||||
|
||||
case "${ftype}" in
|
||||
"file")
|
||||
str="${ftype} ${name} ${location} ${str}"
|
||||
;;
|
||||
"nod")
|
||||
local dev_type=
|
||||
local maj=$(LC_ALL=C ls -l "${location}" | \
|
||||
gawk '{sub(/,/, "", $5); print $5}')
|
||||
local min=$(LC_ALL=C ls -l "${location}" | \
|
||||
gawk '{print $6}')
|
||||
|
||||
if [ -b "${location}" ]; then
|
||||
dev_type="b"
|
||||
else
|
||||
dev_type="c"
|
||||
fi
|
||||
str="${ftype} ${name} ${str} ${dev_type} ${maj} ${min}"
|
||||
;;
|
||||
*)
|
||||
str="${ftype} ${name} ${str}"
|
||||
;;
|
||||
esac
|
||||
|
||||
echo "${str}"
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
if [ -z "$1" ]; then
|
||||
simple_initramfs
|
||||
elif [ -f "$1" ]; then
|
||||
print_mtime "$1"
|
||||
cat "$1"
|
||||
elif [ -d "$1" ]; then
|
||||
srcdir=$(echo "$1" | sed -e 's://*:/:g')
|
||||
dirlist=$(find "${srcdir}" -printf "%p %m %U %G\n" 2>/dev/null)
|
||||
|
||||
# If $dirlist is only one line, then the directory is empty
|
||||
if [ "$(echo "${dirlist}" | wc -l)" -gt 1 ]; then
|
||||
print_mtime "$1"
|
||||
|
||||
echo "${dirlist}" | \
|
||||
while read x; do
|
||||
parse ${x}
|
||||
done
|
||||
else
|
||||
# Failsafe in case directory is empty
|
||||
simple_initramfs
|
||||
fi
|
||||
else
|
||||
echo " $0: Cannot open '$1' (CONFIG_INITRAMFS_SOURCE)" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
exit 0
|
||||
Reference in New Issue
Block a user