udev needs a modded PKGBUILD

This commit is contained in:
Mike Staszel 2010-02-06 23:38:13 -06:00
parent 41cee7e5f5
commit 14b903b747
9 changed files with 598 additions and 0 deletions

151
core/udev/81-arch.rules Normal file
View file

@ -0,0 +1,151 @@
# Udev rules for Archlinux by Tobias Powalowski <tpowa@archlinux.org>
# do not edit this file, it will be overwritten on update
#
# This ruleset should provide a DevFS-compatible device tree.
#
# There are a number of modifiers that are allowed to be used in some
# of the different fields. They provide the following subsitutions:
#
# %n the "kernel number" of the device.
# For example, 'sda3' has a "kernel number" of '3'
# %k the kernel name for the device.
# %M the kernel major number for the device
# %m the kernel minor number for the device
# %b the bus id for the device
# %c the string returned by the PROGRAM
# %s{filename} the content of a sysfs attribute.
# %% the '%' char itself.
#
# There are a number of modifiers that are allowed to be used in some of the
# fields. See the udev man page for a full description of them.
# global stuff
#
#####################################
###### Hotplug rules - begin
# Only additional modules,
# which are not detectable,
# are loaded here!
#####################################
# check if the device has already been claimed by a driver
ACTION!="add", GOTO="drivers_end"
# SOUND addon modules
SUBSYSTEM=="sound", RUN+="/lib/udev/load-modules.sh snd-pcm-oss"
SUBSYSTEM=="sound", RUN+="/lib/udev/load-modules.sh snd-seq-oss"
#PNP addon modules
SUBSYSTEM=="pnp", ENV{MODALIAS}!="?*", ATTRS{id}=="PNP0800", RUN+="/lib/udev/load-modules.sh pcspkr"
SUBSYSTEM=="pnp", ENV{MODALIAS}!="?*", ATTRS{id}=="*PNP0510*", RUN+="/lib/udev/load-modules.sh irtty-sir"
SUBSYSTEM=="pnp", ENV{MODALIAS}!="?*", ATTRS{id}=="*PNP0511*", RUN+="/lib/udev/load-modules.sh irtty-sir"
SUBSYSTEM=="pnp", ENV{MODALIAS}!="?*", ATTRS{id}=="PNPb02f", RUN+="/lib/udev/load-modules.sh analog"
# PARPORT addon modules
SUBSYSTEM=="pnp", ENV{MODALIAS}!="?*", ATTRS{id}=="PNP040*", RUN+="/lib/udev/load-modules.sh lp"
SUBSYSTEM=="pnp", ENV{MODALIAS}!="?*", ATTRS{id}=="PNP040*", RUN+="/lib/udev/load-modules.sh ppdev"
# fix ide cdrom detection on old proliant servers
SUBSYSTEM=="pci", ENV{MODALIAS}=="pci:v00000E11d00000001sv00000000sd00000000bc06sc02i00", RUN+="/lib/udev/load-modules.sh ide-generic"
LABEL="drivers_end"
#####################################
##### Hotplug rules - end
#####################################
#####################################
###### CD/DVD symlinks - begin
#####################################
ACTION=="add|change", SUBSYSTEMS=="ide", KERNEL=="hd[a-z]", IMPORT="cdrom_id --export $tempnode"
ACTION=="add|change", SUBSYSTEMS=="scsi", KERNEL=="sr[0-9]*", IMPORT="cdrom_id --export $tempnode"
ACTION=="add|change", SUBSYSTEMS=="scsi", KERNEL=="scd[a-z]", IMPORT="cdrom_id --export $tempnode"
ENV{ID_CDROM}=="?*", SYMLINK+="cd/cdrom-%b"
ENV{ID_CDROM_CD_RW}=="?*", SYMLINK+="cd/cdrw-%b"
ENV{ID_CDROM_DVD}=="?*", SYMLINK+="cd/dvd-%b"
ENV{ID_CDROM_DVD_R}=="?*", SYMLINK+="cd/dvdrw-%b"
ACTION=="add|change", SUBSYSTEMS=="ide", KERNEL=="hd[a-z]", ATTR{removable}=="1", ATTRS{media}=="cdrom*", RUN+="cdsymlinks.sh"
ACTION=="add|change", SUBSYSTEMS=="scsi", KERNEL=="sr[0-9]*", ATTRS{type}=="5", RUN+="cdsymlinks.sh"
ACTION=="add|change", SUBSYSTEMS=="scsi", KERNEL=="sg[0-9]*", ATTRS{type}=="5", RUN+="cdsymlinks.sh"
ACTION=="remove", SUBSYSTEMS=="block", KERNEL=="hd[a-z]", RUN+="cdsymlinks.sh"
ACTION=="remove", SUBSYSTEMS=="block", KERNEL=="sr[0-9]*", RUN+="cdsymlinks.sh"
ACTION=="remove", SUBSYSTEMS=="block", KERNEL=="sg[0-9]*", RUN+="cdsymlinks.sh"
#####################################
###### CD/DVD symlinks - end
#####################################
#####################################
# Additional Archlinux
# Permissions and Symlinks - begin
#####################################
# fix /dev/root symlink
SUBSYSTEM=="block", RUN+="root-link.sh"
# permission for sg devices
KERNEL=="sg[0-9]*", ATTRS{type}!="3|6", GROUP="disk", MODE="0660"
# permissions for IDE CD devices
SUBSYSTEMS=="ide", KERNEL=="hd[a-z]", ATTR{removable}=="1", ATTRS{media}=="cdrom*", GROUP="optical"
# permissions for SCSI CD devices
SUBSYSTEMS=="scsi", KERNEL=="sr[0-9]*", ATTRS{type}=="5", SYMLINK+="scd%n", GROUP="optical"
SUBSYSTEMS=="scsi", KERNEL=="sg[0-9]*", ATTRS{type}=="5", GROUP="optical"
# permissions for removable devices like cardreaders or sticks
KERNEL=="sd*", ATTRS{scsi_level}=="3", ATTRS{type}=="0", GROUP="storage"
# permissions for firewire external drives
KERNEL=="sd*", ATTRS{scsi_level}=="5", GROUP="storage"
# permissions for usb to scsi external adapters
KERNEL=="sd*", ATTRS{scsi_level}=="3", ATTRS{type}=="7", GROUP="storage"
# permissions for ide storage like pcmcia card readers
ACTION!="add", GOTO="pcmcia_end"
SUBSYSTEM!="block", GOTO="pcmcia_end"
KERNEL=="hd*[!0-9]", IMPORT{program}="ata_id --export $tempnode"
KERNEL=="hd*", IMPORT{parent}=="ID_*"
KERNEL=="hd*", ENV{ID_TYPE}=="generic", GROUP="storage"
LABEL="pcmcia_end"
# permissions for SCSI scanners
SUBSYSTEMS=="scsi", KERNEL=="sg[0-9]*", ATTRS{type}=="6", GROUP="scanner"
# mem
KERNEL=="ram0", SYMLINK+="ramdisk"
KERNEL=="ram1", SYMLINK+="ram"
# video4linux
KERNEL=="vbi0", SYMLINK+="vbi"
KERNEL=="radio0", SYMLINK+="radio"
KERNEL=="radio[0-9]*", GROUP="video"
KERNEL=="video0", SYMLINK+="video"
KERNEL=="vtx0", SYMLINK+="vtx"
# video devices
### xorg resets those permissions, adjust your xorg.conf!
KERNEL=="3dfx*", GROUP="video"
KERNEL=="fb[0-9]*", GROUP="video"
# misc
KERNEL=="uinput", SYMLINK+="%k"
KERNEL=="sgi_fetchop", MODE="0666"
KERNEL=="sonypi", MODE="0666"
# USB devices
KERNEL=="legousbtower*", MODE="0666"
# IEEE1394 (firewire) devices
KERNEL=="raw1394", GROUP="video"
# kbd devices
KERNEL=="kbd", MODE="0664"
# CPU
KERNEL=="cpu[0-9]*", SYMLINK="%k"
KERNEL=="msr[0-9]*", SYMLINK="%k"
# miscellaneous
KERNEL=="rtc|rtc0", GROUP="audio", MODE="0664"
#######################################
# Permissions and Symlinks - end
#######################################

123
core/udev/PKGBUILD Normal file
View file

@ -0,0 +1,123 @@
# $Id: PKGBUILD 48501 2009-08-02 16:29:45Z tpowa $
# Maintainer: Aaron Griffin <aaron@archlinux.org>
# Maintainer: Tobias Powalowski <tpowa@archlinux.org>
# Maintainer: Thomas Bächler <thomas@archlinux.org>
# arm Maintainer: Philipp Scholl <pscholl@bawue.de>
pkgname=udev
pkgver=145
pkgrel=1
pkgdesc="The userspace dev tools (udev)"
arch=(arm)
url="http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html"
license=('GPL')
groups=('base')
depends=('glibc' 'coreutils' 'util-linux' 'libusb' 'glib2')
makedepends=('kernel26' 'gperf' 'libxslt' 'pciutils' 'usbutils') #kernel26 needed to build framebuffer blacklist
install=udev.install
backup=(etc/udev/udev.conf
etc/scsi_id.config
etc/udev/cdsymlinks.conf
etc/modprobe.d/framebuffer_blacklist.conf)
conflicts=('pcmcia-cs' 'hotplug')
replaces=('devfsd')
# older initscripts versions required start_udev
conflicts=('initscripts<2009.07')
options=(!makeflags !libtool)
source=(http://www.kernel.org/pub/linux/utils/kernel/hotplug/$pkgname-$pkgver.tar.bz2
81-arch.rules load-modules.sh resolve-modalias.c cdsymlinks.sh root-link.sh
arch-udev-rules.patch ignore-remove.sh)
md5sums=('b3d3b5f88c7b81e7615700a04db685e1'
'cc6406e8b67b2b8711942098a66cde6b'
'f4951f61438d69894b728212dac7318b'
'64a0169dc9d883a63ff9f8f491fdc34a'
'2e808ee78d237c478b57af2a68d43769'
'2d6dc6842464f107bccc68cd505a6c31'
'aa51fa1925d70f63ee4ad4958eb7a861'
'35fa97500243a79b2370fa4684828e69')
build() {
cd $srcdir/$pkgname-$pkgver
./configure --prefix="" --mandir=/usr/share/man\
--includedir=/usr/include\
--libexecdir=/lib/udev\
--datarootdir=/usr/share
make || return 1
make DESTDIR=$startdir/pkg install
# Fix pkgconfig path
install -d -m755 $pkgdir/usr/lib
mv $pkgdir/lib/pkgconfig $pkgdir/usr/lib
# Non-stock rules still go in /etc
install -D -m644 $srcdir/81-arch.rules $pkgdir/lib/udev/rules.d/81-arch.rules
# install our module loading subsystem
install -D -m755 $srcdir/load-modules.sh $pkgdir/lib/udev/load-modules.sh
install -d -m755 $pkgdir/bin
gcc -Wall $CFLAGS -o $pkgdir/bin/resolve-modalias $srcdir/resolve-modalias.c || return 1
# install cdsymlinks.sh
install -D -m755 $srcdir/cdsymlinks.sh $pkgdir/lib/udev/cdsymlinks.sh
# install root-link.sh
install -D -m755 $srcdir/root-link.sh $pkgdir/lib/udev/root-link.sh
# install ignore-remove.sh
install -D -m755 $srcdir/ignore-remove.sh $pkgdir/lib/udev/ignore-remove.sh
# disable error logging to prevent startup failures printed to vc on boot
sed -i -e 's|udev_log="err"|udev_log="0"|g' $pkgdir/etc/udev/udev.conf
# install additional standard rules files
for rule in $srcdir/$pkgname-$pkgver/rules/packages/*.rules; do
install -D -m 644 $rule $pkgdir/lib/udev/rules.d/
done
# fix standard udev rules to fit to arch
cd $pkgdir/lib/udev/rules.d/
patch -Np1 -i $srcdir/arch-udev-rules.patch || return 1
# remove .orig files
rm -f pkgdir/lib/udev/rules.d/*.orig
# disable persistent cdromsymlinks and network by default
# and move it to /etc/udev/rules.d
mv $pkgdir/lib/udev/rules.d/75-persistent-net-generator.rules \
$pkgdir/etc/udev/rules.d/75-persistent-net-generator.rules.optional
mv $pkgdir/lib/udev/rules.d/75-cd-aliases-generator.rules \
$pkgdir/etc/udev/rules.d/75-cd-aliases-generator.rules.optional
# remove not needed rules
rm $pkgdir/lib/udev/rules.d/40-ia64.rules
rm $pkgdir/lib/udev/rules.d/40-ppc.rules
rm $pkgdir/lib/udev/rules.d/40-s390.rules
# create framebuffer blacklist
mkdir -p $pkgdir/etc/modprobe.d/
for mod in $(find /lib/modules/*/kernel/drivers/video -name '*fb.ko' -exec basename {} .ko \;); do
echo "blacklist $mod" >> $pkgdir/etc/modprobe.d/framebuffer_blacklist.conf
done
# create static devices in /lib/udev/devices/
mkdir ${pkgdir}/lib/udev/devices
mkdir ${pkgdir}/lib/udev/devices/pts
mkdir ${pkgdir}/lib/udev/devices/shm
mknod -m 0600 ${pkgdir}/lib/udev/devices/console c 5 1 || return 1
mknod -m 0666 ${pkgdir}/lib/udev/devices/null c 1 3 || return 1
mknod -m 0660 ${pkgdir}/lib/udev/devices/zero c 1 5 || return 1
mknod -m 0666 ${pkgdir}/lib/udev/devices/kmsg c 1 11 || return 1
ln -snf /proc/self/fd ${pkgdir}/lib/udev/devices/fd || return 1
ln -snf /proc/self/fd/0 ${pkgdir}/lib/udev/devices/stdin || return 1
ln -snf /proc/self/fd/1 ${pkgdir}/lib/udev/devices/stdout || return 1
ln -snf /proc/self/fd/2 ${pkgdir}/lib/udev/devices/stderr || return 1
ln -snf /proc/kcore ${pkgdir}/lib/udev/devices/core || return 1
# these static devices are created for convenience, to autoload the modules if necessary
# /dev/loop0
mknod -m 0660 ${pkgdir}/lib/udev/devices/loop0 b 7 0 || return 1
chgrp disk ${pkgdir}/lib/udev/devices/loop0 || return 1
# /dev/net/tun
mkdir ${pkgdir}/lib/udev/devices/net
mknod -m 0666 ${pkgdir}/lib/udev/devices/net/tun c 10 200 || return 1
# /dev/fuse
mknod -m 0666 ${pkgdir}/lib/udev/devices/fuse c 10 229 || return 1
# /dev/ppp
mknod -m 0600 ${pkgdir}/lib/udev/devices/ppp c 108 0 || return 1
# Replace dialout group in rules with uucp group
for i in $pkgdir/lib/udev/rules.d/*.rules; do
sed -i -e 's#GROUP="dialout"#GROUP="uucp"#g' $i
done
}

View file

@ -0,0 +1,78 @@
diff -Nur rules.d/50-udev-default.rules rules.d.arch/50-udev-default.rules
--- rules.d/50-udev-default.rules 2009-03-07 22:22:48.200242883 +0100
+++ rules.d.arch/50-udev-default.rules 2009-03-07 22:23:26.134434516 +0100
@@ -64,20 +64,20 @@
# floppy
KERNEL=="fd[0-9]", GROUP="floppy"
-KERNEL=="fd[0-9]", ACTION=="add", ATTRS{cmos}=="?*", RUN+="create_floppy_devices -c -t $attr{cmos} -m %M -M 0640 -G floppy $root/%k"
-KERNEL=="hd*", SUBSYSTEMS=="ide", ATTRS{media}=="floppy", OPTIONS+="all_partitions"
+KERNEL=="fd[0-9]", ACTION=="add", ATTRS{cmos}=="?*", RUN+="create_floppy_devices -c -t $attr{cmos} -m %M -M 0660 -G floppy $root/%k"
+KERNEL=="hd*", SUBSYSTEMS=="ide", ATTRS{media}=="floppy", OPTIONS+="all_partitions", GROUP="floppy"
# cdrom
-SUBSYSTEM=="block", KERNEL=="sr[0-9]*", SYMLINK+="scd%n", GROUP="cdrom"
-SUBSYSTEM=="block", KERNEL=="hd*", SUBSYSTEMS=="ide", ATTRS{media}=="cdrom", GROUP="cdrom"
-SUBSYSTEM=="scsi_generic", SUBSYSTEMS=="scsi", ATTRS{type}=="4|5", GROUP="cdrom"
-KERNEL=="pktcdvd[0-9]*", NAME="pktcdvd/%k", GROUP="cdrom"
-KERNEL=="pktcdvd", NAME="pktcdvd/control", GROUP="cdrom"
+SUBSYSTEM=="block", KERNEL=="sr[0-9]*", SYMLINK+="scd%n", GROUP="optical", MODE="0660"
+SUBSYSTEM=="block", KERNEL=="hd*", SUBSYSTEMS=="ide", ATTRS{media}=="cdrom", GROUP="optical", MODE="0660"
+SUBSYSTEM=="scsi_generic", SUBSYSTEMS=="scsi", ATTRS{type}=="4|5", GROUP="optical", MODE="0660"
+KERNEL=="pktcdvd[0-9]*", NAME="pktcdvd/%k", GROUP="optical", MODE="0660"
+KERNEL=="pktcdvd", NAME="pktcdvd/control", GROUP="optical", MODE="0660"
# tape
-KERNEL=="ht[0-9]*|nht[0-9]*", GROUP="tape"
-KERNEL=="pt[0-9]*|npt[0-9]*|pht[0-9]*", GROUP="tape"
-SUBSYSTEM=="scsi_generic|scsi_tape", SUBSYSTEMS=="scsi", ATTRS{type}=="1|8", GROUP="tape"
+KERNEL=="ht[0-9]*|nht[0-9]*", GROUP="storage", MODE="0660"
+KERNEL=="pt[0-9]*|npt[0-9]*|pht[0-9]*", GROUP="storage", MODE="0660"
+SUBSYSTEM=="scsi_generic|scsi_tape", SUBSYSTEMS=="scsi", ATTRS{type}=="1|8", GROUP="storage", MODE="0660"
# block-releated
KERNEL=="sch[0-9]*", GROUP="disk"
@@ -116,5 +116,4 @@
KERNEL=="cpad[0-9]*", NAME="usb/%k"
# do not delete static device nodes
-ACTION=="remove", NAME=="?*", TEST=="/lib/udev/devices/$name", OPTIONS+="ignore_remove"
-ACTION=="remove", NAME=="", TEST=="/lib/udev/devices/%k", OPTIONS+="ignore_remove"
+ACTION=="remove", PROGRAM="ignore-remove.sh %r", OPTIONS+="ignore_remove"
diff -Nur rules.d/60-persistent-storage.rules rules.d.arch/60-persistent-storage.rules
--- rules.d/60-persistent-storage.rules 2009-03-07 22:22:48.200242883 +0100
+++ rules.d.arch/60-persistent-storage.rules 2009-03-07 22:22:54.757744454 +0100
@@ -10,7 +10,7 @@
SUBSYSTEM!="block", GOTO="persistent_storage_end"
# skip rules for inappropriate block devices
-KERNEL=="fd*|mtd*|nbd*|gnbd*|btibm*|dm-*|md*", GOTO="persistent_storage_end"
+KERNEL=="fd*|mtd*|nbd*|gnbd*|md*|btibm*", GOTO="persistent_storage_end"
# never access non-cdrom removable ide devices, the drivers are causing event loops on open()
KERNEL=="hd*[!0-9]", ATTR{removable}=="1", SUBSYSTEMS=="ide", ATTRS{media}=="disk|floppy", GOTO="persistent_storage_end"
diff -Nur rules.d/80-drivers.rules rules.d.arch/80-drivers.rules
--- rules.d/80-drivers.rules 2009-03-07 22:22:48.200242883 +0100
+++ rules.d.arch/80-drivers.rules 2009-03-07 22:22:54.757744454 +0100
@@ -2,13 +2,14 @@
ACTION!="add", GOTO="drivers_end"
-DRIVER!="?*", ENV{MODALIAS}=="?*", RUN{ignore_error}+="/sbin/modprobe -b $env{MODALIAS}"
-SUBSYSTEM=="tifm", ENV{TIFM_CARD_TYPE}=="SD", RUN+="/sbin/modprobe -b tifm_sd"
-SUBSYSTEM=="tifm", ENV{TIFM_CARD_TYPE}=="MS", RUN+="/sbin/modprobe -b tifm_ms"
-SUBSYSTEM=="memstick", RUN+="/sbin/modprobe -b --all ms_block mspro_block"
-SUBSYSTEM=="i2o", RUN+="/sbin/modprobe -b i2o_block"
-SUBSYSTEM=="scsi", ENV{DEVTYPE}=="scsi_device", TEST!="[module/sg]", RUN+="/sbin/modprobe -b sg"
-SUBSYSTEM=="module", KERNEL=="parport_pc", RUN+="/sbin/modprobe -b ppdev"
+DRIVER!="?*", ENV{MODALIAS}=="?*", RUN{ignore_error}+="/lib/udev/load-modules.sh $env{MODALIAS}"
+SUBSYSTEM=="tifm", ENV{TIFM_CARD_TYPE}=="SD", RUN+="/lib/udev/load-modules.sh tifm_sd"
+SUBSYSTEM=="tifm", ENV{TIFM_CARD_TYPE}=="MS", RUN+="/lib/udev/load-modules.sh tifm_ms"
+SUBSYSTEM=="memstick", RUN+="/lib/udev/load-modules.sh ms_block"
+SUBSYSTEM=="memstick", RUN+="/lib/udev/load-modules.sh mspro_block"
+SUBSYSTEM=="i2o", RUN+="/lib/udev/load-modules.sh i2o_block"
+SUBSYSTEM=="scsi", ENV{DEVTYPE}=="scsi_device", TEST!="[module/sg]", RUN+="/lib/udev/load-modules.sh sg"
+SUBSYSTEM=="module", KERNEL=="parport_pc", RUN+="/lib/udev/load-modules.sh ppdev"
LABEL="drivers_end"

44
core/udev/cdsymlinks.sh Executable file
View file

@ -0,0 +1,44 @@
#! /bin/sh
# Creates cdsymlinks in /dev
# for Archlinux by Tobias Powalowski <tpowa@archlinux.org>
# check on cd/dvd drives and if persistant rules file is used
if [ -d /dev/cd -a ! -e /etc/udev/rules.d/75-persistent-cd.rules ]; then
# remove existing device files
rm /dev/cdrom*
rm /dev/cdrw*
rm /dev/dvd*
rm /dev/dvdrw*
# start creating symlinks
for i in /dev/cd/cdrom-*; do
if [ -h $i ]; then
[ "$CD_NUMBER" = "" ] && ln -s $i /dev/cdrom
[ "$CD_NUMBER" = "" ] && CD_NUMBER="-1"
! [ "$CD_NUMBER" = "" ] && CD_NUMBER="$((CD_NUMBER+1))" && ln -s $i /dev/cdrom$CD_NUMBER
fi
done
for i in /dev/cd/cdrw-*; do
if [ -h $i ]; then
[ "$CDRW_NUMBER" = "" ] && ln -s $i /dev/cdrw
[ "$CDRW_NUMBER" = "" ] && CDRW_NUMBER="-1"
! [ "$CDRW_NUMBER" = "" ] && CDRW_NUMBER="$((CDRW_NUMBER+1))" && ln -s $i /dev/cdrw$CDRW_NUMBER
fi
done
for i in /dev/cd/dvd-*; do
if [ -h $i ]; then
[ "$DVD_NUMBER" = "" ] && ln -s $i /dev/dvd
[ "$DVD_NUMBER" = "" ] && DVD_NUMBER="-1"
! [ "$DVD_NUMBER" = "" ] && DVD_NUMBER="$((DVD_NUMBER+1))" && ln -s $i /dev/dvd$DVD_NUMBER
fi
done
for i in /dev/cd/dvdrw-*; do
if [ -h $i ]; then
[ "$DVDRW_NUMBER" = "" ] && ln -s $i /dev/dvdrw
[ "$DVDRW_NUMBER" = "" ] && DVDRW_NUMBER="-1"
! [ "$DVDRW_NUMBER" = "" ] && DVDRW_NUMBER="$((DVDRW_NUMBER+1))" && ln -s $i /dev/dvdrw$DVDRW_NUMBER
fi
done
fi

13
core/udev/ignore-remove.sh Executable file
View file

@ -0,0 +1,13 @@
#!/bin/sh
if [ -z "$1" ]; then
exit 1
fi
for f in ${DEVNAME} ${DEVLINKS}; do
if [ -e "/lib/udev/devices/${f#$1}" ]; then
exit 0
fi
done
exit 1

80
core/udev/load-modules.sh Executable file
View file

@ -0,0 +1,80 @@
#!/bin/bash
# Implement blacklisting for udev-loaded modules
[ $# -ne 1 ] && exit 1
. /etc/rc.conf
# grab modules from rc.conf
BLACKLIST="${MOD_BLACKLIST[@]}"
MODPROBE="/sbin/modprobe"
LOGGER="/usr/bin/logger"
RESOLVEALIAS="/bin/resolve-modalias"
USEBLACKLIST="--use-blacklist"
if [ -f /proc/cmdline ]; then
for cmd in $(cat /proc/cmdline); do
case $cmd in
disablemodules=*) eval $cmd ;;
load_modules=off) exit ;;
esac
done
#parse cmdline entries of the form "disablemodules=x,y,z"
if [ -n "$disablemodules" ]; then
BLACKLIST="$BLACKLIST $(echo $disablemodules | sed 's|,| |g')"
fi
fi
#MODULES entries in rc.conf that begin with ! are blacklisted
for mod in ${MODULES[@]}; do
if [ "${mod}" != "${mod#!}" ]; then
BLACKLIST="$BLACKLIST ${mod#!}"
fi
done
if [ "$MOD_AUTOLOAD" = "yes" -o "$MOD_AUTOLOAD" = "YES" ]; then
if [ -n "${BLACKLIST}" ]; then
# If an alias name is on the blacklist, load no modules for this device
if echo "${BLACKLIST}" | /bin/grep -q -e " $1 " -e "^$1 " -e " $1\$"; then
$LOGGER -p info -t "$(basename $0)" "Not loading module alias '$1' because it is blacklisted"
exit
fi
#sanitize the blacklist
BLACKLIST="$(echo "$BLACKLIST" | sed -e 's|-|_|g')"
# Try to find all modules for the alias
mods=$($RESOLVEALIAS /lib/modules/$(uname -r)/modules.alias $1)
# If no modules could be found, try if the alias name is a module name
# In that case, omit the --use-blacklist parameter to imitate normal modprobe behaviour
[ -z "${mods}" ] && $MODPROBE -qni $1 && mods="$1" && USEBLACKLIST=""
[ -z "${mods}" ] && $LOGGER -p info -t "$(basename $0)" "'$1' is not a valid module or alias name"
for mod in ${mods}; do
# Find the module and all its dependencies
deps="$($MODPROBE -i --show-depends ${mod})"
[ $? -ne 0 ] && continue
#sanitize the module names
deps="$(echo "$deps" | sed \
-e "s#^insmod /lib.*/\(.*\)\.ko.*#\1#g" \
-e 's|-|_|g')"
# If the module or any of its dependencies is blacklisted, don't load it
for dep in $deps; do
if echo "${BLACKLIST}" | /bin/grep -q -e " ${dep} " -e "^${dep} " -e " ${dep}\$"; then
if [ "${dep}" = "${mod}" ]; then
$LOGGER -p info -t "$(basename $0)" "Not loading module '${mod}' for alias '$1' because it is blacklisted"
else
$LOGGER -p info -t "$(basename $0)" "Not loading module '${mod}' for alias '$1' because its dependency '${dep}' is blacklisted"
fi
continue 2
fi
done
# modprobe usually uses the "blacklist" statements from modprobe.conf only to blacklist all aliases
# of a module, but not the module itself. We use --use-blacklist here so that modprobe also blacklists
# module names if we resolved alias names manually above
$MODPROBE $USEBLACKLIST ${mod}
done
else
$MODPROBE $1
fi
fi
# vim: set et ts=4:

View file

@ -0,0 +1,73 @@
#include <stdio.h>
#include <fnmatch.h>
#include <string.h>
#include <malloc.h>
static char *my_getline(FILE *file) {
static size_t size = 1024;
static char *buf = NULL;
static unsigned int i = 0, r = 0;;
if(buf == NULL)
buf = (char*)malloc(size);
if(i) {
memmove(buf, buf+i, size-i);
r -= i;
i = 0;
}
while(1) {
if(i == size) {
size *= 2;
buf = (char*)realloc(buf, size);
}
if(i==r)
r += fread(buf+i, 1, size-i, file);
if(i==r && i == 0) {
free(buf);
buf = NULL;
r = 0;
return NULL;
}
if(i==r || buf[i] == '\n') {
buf[i++] = '\0';
return buf;
}
i++;
}
}
int main(int argc, char *argv[]) {
char *line, *pattern, *module;
char *pos1, *pos2;
if(argc != 3) {
fprintf(stderr, "usage: resolve-modalias <alias file> <modalias>\n");
return 1;
}
FILE *f=fopen(argv[1], "r");
if(!f) {
perror("error opening alias file");
return 1;
}
while((line=my_getline(f))!=NULL) {
if(!strncmp(line, "alias", strlen("alias"))) {
pos1 = index(line, ' ');
pos2 = index(pos1+1, ' ');
pattern = pos1+1;
*pos2 = '\0';
module = pos2+1;
if(!fnmatch(pattern, argv[2], 0))
printf("%s\n", module);
}
}
return 0;
}
//vim: set ts=2 sw=2 et:

7
core/udev/root-link.sh Executable file
View file

@ -0,0 +1,7 @@
#! /bin/sh
# Creates root symlink in /dev
# for Arch Linux by Roman Kyrylych <Roman.Kyrylych@gmail.com>
if ! [ -L /dev/root ]; then
ln -s $(cat /proc/cmdline | sed "s: :\n:g" | grep root= | sed "s:root=::") /dev/root
fi

29
core/udev/udev.install Normal file
View file

@ -0,0 +1,29 @@
# arg 1: the new package version
# arg 2: the old package version
post_upgrade() {
if [ "$(vercmp $2 100)" -lt 0 ]; then
echo "ATTENTION UDEV:"
echo "----------"
echo "udev >=098 rules syntax has changed, please update your own rules."
echo "udev >=099 Added persistent network and CD/DVD Symlink generator rules."
echo "Please read the instructions carefully before reboot."
echo "They are located in /etc/udev/readme-udev-arch.txt"
echo "----------"
fi
}
post_install() {
# If a ramfs is mounted, we still need to make sure that /dev/{console,null,zero} exist
# The Archlinux installer bind-mounts /dev to /mnt/dev, thus making the real /dev invisible
ROOTDIR=""
[ "$(stat -c %D /)" != "$(stat -c %D /dev)" ] && ROOTDIR=$(mktemp -d /tmp/udevinstall.XXXXXX)
[ -n "${ROOTDIR}" ] && mount --bind / ${ROOTDIR}
[ -c ${ROOTDIR}/dev/console ] || mknod -m600 ${ROOTDIR}/dev/console c 5 1
[ -c ${ROOTDIR}/dev/null ] || mknod -m644 ${ROOTDIR}/dev/null c 1 3
[ -c ${ROOTDIR}/dev/zero ] || mknod -m644 ${ROOTDIR}/dev/zero c 1 5
if [ -n "${ROOTDIR}" ]; then
umount ${ROOTDIR}
rmdir ${ROOTDIR}
fi
}