#-*- outline -*- * bugs : see BUGS section in makedev(8) * history : see HISTORY section in makedev(8) * updating the dev package while devfs is mounted on /dev Updating dev package is easy once we mount / elsewhere with --bind option (eg: "mount --bind / /lib/root-mirror") in %pre and umount it in %post. Then can go on several ways: - moving all dev entries from /dev to /lib/root-mirror/dev Drawback: rpm'll complain the dev files're missing on verify pass. - mounting /lib/root-mirror/dev/ on /dev after the first mount in %pre, and umouting it in %post drawback: if something open some file in /dev while updating, devfsd can become crazy (adressable by stopping devfsd while updating dev) or we won't be able to umount /dev, and then /lib/root-mirror/ - using the -S option of the redhat MAKEDEV : this results in MAKEDEV outputing the shell commands equivalent to what he does drawback: he generate a 53983 lines scripts that takes minutes to execute. * accelerate the MAKDEV program profiling this silly program show that he did tons of useless loops on its whole config files. eg; calling "MAKDEV std" take a few minutes and it did 150 000 makenodes() calls in order to create 2200 device entries :-( its whole control flow is gratuitously garbage (scores of program execution, each one resulting in parsing all files, then came the gen* scripts that generate config fles that're slow to handle by MAKDEV. so we : - comment all useless entries - patch the gen* scripts so that they create "faster to handle" config files - write a new 69 lines perl script called mdk_makedev that takes a few seconds to do the job done by the old MAKDEV program and the 9.5 seconds it takes on my 700 mhz machine're mostly spent in the kernel, in the ext2 filesystem module that spent cpu cycles to expand the dev directory. this'll hopefully be faster when ext3 cvs will get its hash table managment into the main kernel or if you use reiserfs.