udev - fix problem with CD,DVD-RW, etc

Привет. Это касается тех, у кого после обновления udev-160-1 > 161-1 и т.д. перестали нормально монтироваться CD, DVD и прочее. Не буду долго описывать как был достигнут сегодняшний результат. Приложили руку Amigo (в качестве пинателя в нужном направлениии), S.Pupykin (аналогично, плюс советы по промежуточным решениям) и vadik, в качестве сборщика, пинателя и сообщника. Иными словами “всем спасибо”.
Теперь о пакете.
Он собирается на основе udev/trank с http://repos.archlinux.org/wsvn/packages/udev/trunk/ и исходников с http://git.kernel.org/?p=linux/hotplug/udev.git;a=tree
Почему-то не могу прикрепить файл архива (чьи происки?), поэтому:
1. Качаете архив отсюда: http://repos.archlinux.org/wsvn/packages/udev/trunk/
2. Распаковываете в произвольную папку сборки (например ~/udev_test), удаляете оттуда “arch-udev-rules.patch” (он всё равно пустой).
3. Заменяете оригинальный PKGBUILD из архива этим:
# This is an example PKGBUILD file. Use this as a start to creating your own,
# and remove these comments. For more information, see 'man PKGBUILD'.
# NOTE: Please fill out the license field for your package! If it is unknown,
# then please put 'unknown'.
# See http://wiki.archlinux.org/index.php/VCS_PKGBUILD_Guidelines
# for more information on packaging from GIT sources.
# Contributor: Your Name <[email protected]
pkgname=udev
pkgver=20100903
pkgrel=1
pkgdesc=""
arch=(i686 x86_64)
url="http://git.kernel.org/"
license=('GPL')
groups=('base')
depends=()
makedepends=('git' 'glibc' 'coreutils' 'util-linux' 'libusb' 'glib2' 'kernel26' 'gperf' 'libxslt' 'gobject-introspection' 'gtk-doc' )
provides=()
conflicts=()
replaces=()
backup=()
options=()
noextract=()
source=(80-drivers.rules 
        81-arch.rules 
        load-modules.sh 
        cdsymlinks.sh)
md5sums=('4427855146513a4703ab5c7eb8a0156e' 
        'f17c99779173ddc79f866cf3a5de5e68' 
        'f91fddc67609b45b244a624977c4247b' 
        '2e808ee78d237c478b57af2a68d43769')
_gitroot="git://git.kernel.org/pub/scm/linux/hotplug/udev.git"
_gitname="udev"
build() {
  cd "$srcdir"
  msg "Connecting to GIT server...."
  if [ -d $_gitname ] ; then
    cd $_gitname && git pull origin
    msg "The local files are updated."
  else
    git clone $_gitroot $_gitname
  fi
  msg "GIT checkout done or server timeout"
  msg "Starting make..."
  rm -rf "$srcdir/$_gitname-build"
  git clone "$srcdir/$_gitname" "$srcdir/$_gitname-build"
  cd "$srcdir/$_gitname-build"
  #
  # BUILD HERE
  #
  ./autogen.sh --without-selinux
  ./configure --prefix="" --mandir=/usr/share/man\
                          --includedir=/usr/include\
                          --libexecdir=/lib/udev\
                          --datarootdir=/usr/share
  make
}
  
package_udev() {
  pkgdesc="The userspace dev tools (udev)"
  depends=('glibc' 'coreutils' 'util-linux' 'libusb' 'glib2'
           'module-init-tools>=3.11')
  install=udev.install
  backup=(etc/udev/udev.conf
          etc/modprobe.d/framebuffer_blacklist.conf)
  conflicts=('pcmcia-cs' 'hotplug' 'initscripts<2009.07')
  replaces=('devfsd')
  
  cd "$srcdir/$_gitname-build"
  make DESTDIR=${pkgdir} install
  # Fix pkgconfig path
  install -d -m755 $pkgdir/usr/lib
  mv $pkgdir/lib/pkgconfig $pkgdir/usr/lib
  # Fix ConsoleKit path
  mv $pkgdir/lib/ConsoleKit $pkgdir/usr/lib
  # Replace original 80-drivers.rules with custom one.
  install -D -m644 $srcdir/80-drivers.rules $pkgdir/lib/udev/rules.d/80-drivers.rules
  # Install our rule for permissions and symlinks
  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 cdsymlinks.sh
  install -D -m755 $srcdir/cdsymlinks.sh $pkgdir/lib/udev/cdsymlinks.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
  # 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
  # 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/pts
  mkdir ${pkgdir}/lib/udev/devices/shm
  mknod -m 0600 ${pkgdir}/lib/udev/devices/console c 5 1
  mknod -m 0666 ${pkgdir}/lib/udev/devices/null c 1 3
  mknod -m 0660 ${pkgdir}/lib/udev/devices/zero c 1 5
  mknod -m 0666 ${pkgdir}/lib/udev/devices/kmsg c 1 11
  ln -snf /proc/self/fd ${pkgdir}/lib/udev/devices/fd
  ln -snf /proc/self/fd/0 ${pkgdir}/lib/udev/devices/stdin
  ln -snf /proc/self/fd/1 ${pkgdir}/lib/udev/devices/stdout
  ln -snf /proc/self/fd/2 ${pkgdir}/lib/udev/devices/stderr
  ln -snf /proc/kcore ${pkgdir}/lib/udev/devices/core
  # 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
  chgrp disk ${pkgdir}/lib/udev/devices/loop0
  # /dev/net/tun
  mkdir ${pkgdir}/lib/udev/devices/net
  mknod -m 0666 ${pkgdir}/lib/udev/devices/net/tun c 10 200
  # /dev/fuse
  mknod -m 0666 ${pkgdir}/lib/udev/devices/fuse c 10 229 
  # /dev/ppp
  mknod -m 0600 ${pkgdir}/lib/udev/devices/ppp c 108 0
  # Replace dialout/tape/cdrom group in rules with uucp/storage/optical group
  for i in $pkgdir/lib/udev/rules.d/*.rules; do
    sed -i -e 's#GROUP="dialout"#GROUP="uucp"#g;
               s#GROUP="tape"#GROUP="storage"#g;
               s#GROUP="cdrom"#GROUP="optical"#g' $i
  done
  mv "${pkgdir}/lib/girepository-1.0" "${pkgdir}/usr/lib/"
}
4. В итоге, в папке сборки должно быть 6 файлов:
80-drivers.rules
81-arch.rules
cdsymlinks.sh
load-modules.sh
PKGBUILD
udev.install
5.
cd ~/папка_сборки && makepkg
Есть момент: подвисает на “очистке”. Если так, то жмём пару раз Ctrl+D в окне сборки и всё благополучно завершается.
Ну, и конечно
pacman -U udev-20100903-1-i686.pkg.tar.xz
Если всё хорошо, можно (и нужно) писать “куда-то там разрабам”, чтобы они обратили внимание и “что-нибудь сделали”. Я понимаю, снапшот из git.kernel.org рано или поздно перейдёт в основную ветку, потом в арч. репы и т.п. Но - главное: “когда?” На сегодняшний день, как я понимаю, уже второе обновление udev не сулит ничего хорошего тем, кто попал на этот баг. То есть, “сидим на 160-1 и не жужжим”. Нехорошо, товарищи! Не сознательно!
PS. Проверено на
Linux arch 2.6.35-ARCH #1 SMP PREEMPT Fri Aug 27 16:22:18 UTC 2010 i686 Intel(R) Core(TM)2 Duo CPU E8200 @ 2.66GHz GenuineIntel GNU/Linux
GNOME 2.30 (gnome-desktop 2.30.2-1)
однако ;)
./autogen.sh: line 3: gtkdocize: команда не найдена
Преждевременный выход…

так, для сведения ;)
Аналогично, причем пакет base-devel установлен.
У меня собралось без выкрутасов. Разруливаем…
PS/ Добавил в зависимости для сборки ‘gtk-doc’
makedepends=('git' 'glibc' 'coreutils' 'util-linux' 'libusb' 'glib2' 'kernel26' 'gperf' 'libxslt' 'gobject-introspection' 'gtk-doc' )
[email protected]:~$ pacman -Q gtk-doc
gtk-doc 1.14-2
Видимо, он у меня уже был когда-то поставлен, неизвестно для чего. Да, вот так, тернист путь красноглазика.
щас проверю )))
есть, правда, нюанс - откат не предыдущую версию udev проблемы automount не решил, возможно мой pcmanfm глючит.

ps
проверил - пакет собирается, но проблемы не решает, возможно таки pcmanfm-git

pps
да, вопрос решен, поправил polkit, обновил pcmanfm, но - где зарыли собаку теперь уже не узнать ;)

bobart
благодарю за проделанную работу ))
Незачто. Благодарности отсылай выше (см. первое сообщение), а мне не влом было повозиться. Методом тыка нащупалось решение.
зы. Где эта собака сейчас уже только разработчики знают. Один из команды (git.kernel.org, мантейнер Martin Pitt) сделал патч, потом пакет, уже пропатченный - он и висит в гите. Арчевские - правила сборки и доп. скрипты. А я оказался за свою инициативу “крайним”, он мне ответил на письмо и я попал)
 
Зарегистрироваться или войдите чтобы оставить сообщение.