Having one monolithic packages directory makes it hard to find things and is generally overwhelming. This commit splits it into several logical sections roughly based on function, recipes.txt gives more information about the classifications used. The opportunity is also used to switch from "packages" to "recipes" as used in OpenEmbedded as the term "packages" can be confusing to people and has many different meanings. Not all recipes have been classified yet, this is just a first pass at separating things out. Some packages are moved to meta-extras as they're no longer actively used or maintained. Signed-off-by: Richard Purdie <rpurdie@linux.intel.com>
213 lines
5.4 KiB
Bash
Executable file
213 lines
5.4 KiB
Bash
Executable file
#!/bin/sh -e
|
|
|
|
UDEVSTART=/sbin/udevstart
|
|
|
|
# defaults
|
|
tmpfs_size="10M"
|
|
udev_root="/dev"
|
|
|
|
[ -x $UDEVSTART ] || exit 0
|
|
|
|
. /etc/udev/udev.conf
|
|
|
|
##############################################################################
|
|
|
|
# we need to unmount /dev/pts/ and remount it later over the tmpfs
|
|
unmount_devpts() {
|
|
if mountpoint -q /dev/pts/; then
|
|
umount -l /dev/pts/
|
|
fi
|
|
|
|
if mountpoint -q /dev/shm/; then
|
|
umount -l /dev/shm/
|
|
fi
|
|
}
|
|
|
|
# mount a tmpfs over /dev, if somebody did not already do it
|
|
mount_tmpfs() {
|
|
if grep -E -q "^[^[:space:]]+ /dev tmpfs" /proc/mounts; then
|
|
return 0
|
|
fi
|
|
|
|
# /dev/.static/dev/ is used by MAKEDEV to access the real /dev/ directory.
|
|
# /etc/udev/ is recycled as a temporary mount point because it's the only
|
|
# directory which is guaranteed to be available.
|
|
mount -n -o bind /dev /etc/udev
|
|
|
|
if ! mount -n -o size=$tmpfs_size,mode=0755 -t tmpfs tmpfs /dev; then
|
|
umount /etc/udev
|
|
echo "udev requires tmpfs support, not started."
|
|
exit 1
|
|
fi
|
|
|
|
# using ln to test if /dev works, because touch is in /usr/bin/
|
|
if ln -s test /dev/test-file; then
|
|
rm /dev/test-file
|
|
else
|
|
echo "udev requires tmpfs support, not started."
|
|
umount /etc/udev
|
|
umount /dev
|
|
exit 1
|
|
fi
|
|
|
|
mkdir -p /dev/.static/dev
|
|
chmod 700 /dev/.static/
|
|
# The mount options in busybox are non-standard...
|
|
if test -x /bin/mount.util-linux
|
|
then
|
|
/bin/mount.util-linux --move /etc/udev /dev/.static/dev
|
|
elif test -x /bin/busybox
|
|
then
|
|
busybox mount -n -o move /etc/udev /dev/.static/dev
|
|
else
|
|
echo "udev requires an identifiable mount command, not started."
|
|
umount /etc/udev
|
|
umount /dev
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
# I hate this hack. -- Md
|
|
make_extra_nodes() {
|
|
[ -e /etc/udev/links.conf ] || return 0
|
|
grep '^[^#]' /etc/udev/links.conf | \
|
|
while read type name arg1; do
|
|
[ "$type" -a "$name" -a ! -e "/dev/$name" -a ! -L "/dev/$name" ] ||continue
|
|
case "$type" in
|
|
L) ln -s $arg1 /dev/$name ;;
|
|
D) mkdir -p /dev/$name ;;
|
|
M) mknod -m 600 /dev/$name $arg1 ;;
|
|
*) echo "links.conf: unparseable line ($type $name $arg1)" ;;
|
|
esac
|
|
done
|
|
}
|
|
|
|
# this function is duplicated in preinst, postinst and d-i
|
|
supported_kernel() {
|
|
case "$(uname -r)" in
|
|
2.[012345].*|2.6.[0-9]|2.6.[0-9][!0-9]*) return 1 ;;
|
|
2.6.1[01]|2.6.1[01][!0-9]*) return 1 ;;
|
|
esac
|
|
return 0
|
|
}
|
|
|
|
# shell version of /usr/bin/tty
|
|
my_tty() {
|
|
[ -x /bin/readlink ] || return 0
|
|
[ -e /proc/self/fd/0 ] || return 0
|
|
readlink --silent /proc/self/fd/0 || true
|
|
}
|
|
|
|
warn_if_interactive() {
|
|
if [ "$RUNLEVEL" = "S" -a "$PREVLEVEL" = "N" ]; then
|
|
return 0
|
|
fi
|
|
|
|
TTY=$(my_tty)
|
|
if [ -z "$TTY" -o "$TTY" = "/dev/console" ]; then
|
|
return 0
|
|
fi
|
|
|
|
printf "\n\n\nIt has been detected that the command\n\n\t$0 $*\n\n"
|
|
printf "has been run from an interactive shell.\n"
|
|
printf "It will probably not do what you expect, so this script will wait\n"
|
|
printf "60 seconds before continuing. Press ^C to stop it.\n"
|
|
printf "RUNNING THIS COMMAND IS HIGHLY DISCOURAGED!\n\n\n\n"
|
|
sleep 60
|
|
}
|
|
|
|
##############################################################################
|
|
|
|
if ! supported_kernel; then
|
|
echo "udev requires a kernel >= 2.6.12, not started."
|
|
exit 1
|
|
fi
|
|
|
|
if [ ! -e /proc/filesystems ]; then
|
|
echo "udev requires a mounted procfs, not started."
|
|
exit 1
|
|
fi
|
|
|
|
if ! grep -q '[[:space:]]tmpfs$' /proc/filesystems; then
|
|
echo "udev requires tmpfs support, not started."
|
|
exit 1
|
|
fi
|
|
|
|
if [ ! -d /sys/class/ ]; then
|
|
echo "udev requires a mounted sysfs, not started."
|
|
exit 1
|
|
fi
|
|
|
|
if [ ! -e /proc/sys/kernel/hotplug ] && [ ! -e /sys/kernel/uevent_helper ]; then
|
|
echo "udev requires hotplug support, not started."
|
|
exit 1
|
|
fi
|
|
|
|
##############################################################################
|
|
|
|
# When modifying this script, do not forget that between the time that
|
|
# the new /dev has been mounted and udevstart has been run there will be
|
|
# no /dev/null. This also means that you cannot use the "&" shell command.
|
|
|
|
case "$1" in
|
|
start)
|
|
if [ -e "$udev_root/.udevdb" ]; then
|
|
if mountpoint -q /dev/; then
|
|
TMPFS_MOUNTED=1
|
|
else
|
|
echo ".udevdb already exists on the old $udev_root!"
|
|
fi
|
|
fi
|
|
warn_if_interactive
|
|
|
|
#echo /sbin/udevsend > /proc/sys/kernel/hotplug
|
|
if [ -e /sys/kernel/uevent_helper ] ; then
|
|
echo "" > /sys/kernel/uevent_helper
|
|
else
|
|
echo "" > /proc/sys/kernel/hotplug
|
|
fi
|
|
udevsend
|
|
if [ "$UDEV_DISABLED" = "yes" ]; then
|
|
echo "udev disabled on the kernel command line, not started."
|
|
exit 0
|
|
fi
|
|
|
|
if [ ! "$TMPFS_MOUNTED" ]; then
|
|
unmount_devpts
|
|
mount_tmpfs
|
|
[ -d /proc/1 ] || mount -n /proc
|
|
# if this directory is not present /dev will not be updated by udev
|
|
mkdir /dev/.udevdb/
|
|
echo "Creating initial device nodes..."
|
|
udevstart
|
|
fi
|
|
make_extra_nodes
|
|
;;
|
|
stop)
|
|
warn_if_interactive
|
|
start-stop-daemon --stop --exec /sbin/udevd --quiet
|
|
unmount_devpts
|
|
if [ -d /dev/.static/dev/ ]; then
|
|
umount -l /dev/.static/dev/ || true
|
|
fi
|
|
echo "Unmounting /dev..."
|
|
# unmounting with -l should never fail
|
|
if ! umount -l /dev; then
|
|
exit 1
|
|
fi
|
|
;;
|
|
restart|force-reload)
|
|
start-stop-daemon --stop --exec /sbin/udevd --quiet
|
|
log_begin_msg "Recreating device nodes..."
|
|
udevstart
|
|
make_extra_nodes
|
|
log_end_msg 0
|
|
;;
|
|
*)
|
|
echo "Usage: /etc/init.d/udev {start|stop|restart|force-reload}"
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
exit 0
|