b

Ogólne pytania dotyczące systemu
kraluk
Posty: 18
Rejestracja: 08 października 2007, 14:32

Post autor: kraluk »

szarki432 pisze: Mam procesor Intel Pentium Dual-Core E2140, czy lepszy jest Debian amd64 czy ia64?
Że się tak odniosę do tej wypowiedzi.

Ciebie powinno interesować wyłącznie amd64. IA64 to procesory typu Itanium, czyli nie masz czego szukać w tej architekturze w kontekście sprzętu, który opisałeś.
RubinX
Posty: 1
Rejestracja: 09 kwietnia 2010, 12:20

Post autor: RubinX »

[...] Kernel panic - not syncing : VFS : Unable to mount root fs on unknow-block (0,0)
Witam.

Nie wiem czy problem wciąż aktualny, ale ja sam męczyłem się z takim samym komunikatem po kompilacji i instalacji nowego jajka. Właśnie znalazłem przyczynę, więc opiszę jak jest u mnie (na Debianie w dystrubucji testing 'squeeze').

Wyjaśnilo się w końcu, to był bug (albo celowe działanie jego twórców, którego ja niestety nie rozumiem :/) w skrypcie postinstalacyjnym.

Po instalacji paczki z jajkiem, np.:

Kod: Zaznacz cały

dpkg -i linux-image-2.6.32-3-686-se-c510_2.6.32-9_i386.deb
na koniec powinny się automatycznie odpalić skrypty generujace m.in. initrd.img-(...) i aktualizujące konfig gruba.

Winny problemów okazał się skrypt (u mnie w wersji: 0.93.4):

Kod: Zaznacz cały

/etc/kernel/postinst.d/initramfs-tools

Kod: Zaznacz cały

#!/bin/sh

# passing the kernel version is required
[ -z "$1" ] && exit 0

# kernel-package passes an extra arg; hack to not run under kernel-package
[color="red"][ -z "$2" ] || exit 0[/color]

# we're good - create initramfs.  update runs do_bootloader
update-initramfs -c -t -k "$1"
który miał ten dziwny warunek (na czerwono), powodujący natychmiastowe zakończenie skryptu jeśli wywołało się go z drugim argumentem. A że przy debianowej metodzie budowania paczki z jajkiem ten skrypt jest wywoływany z dwoma parametrami, np.:

Kod: Zaznacz cały

/etc/kernel/postinst.d/initramfs-tools  2.6.32-3-686-se-c510  /boot/vmlinuz-2.6.32-3-686-se-c510
to skrypt zamiast wygenerować /boot/initrd.img-2.6.32-3-686-se-c510, po prostu kończył działanie bez żadnego komunikatu :/.

---
Aby szybko rozwiązać ten problem wystarczy więc:

1. albo wykomentować linię z tym warunkiem w skrypcie initramfs-tools:

Kod: Zaznacz cały

# kernel-package passes an extra arg; hack to not run under kernel-package
[color="red"]#[/color] [ -z "$2" ] || exit 0
2. albo ręcznie wygenerować obraz ramdysku, np.:

Kod: Zaznacz cały

update-initramfs -c -t -k "2.6.32-3-686-se-c510"
[/color]---
PS.
W nowej wersji pakietu initramfs-tools (0.94.4, który na razie jest w dystrybucji niestabilnej 'sid') problem ten jest już rozwiązany [szczegóły - klik]:

Kod: Zaznacz cały

#!/bin/sh

version="$1"
bootopt=""

# passing the kernel version is required
[ -z "${version}" ] && exit 0

[color="navy"]# kernel-package passes an extra arg
if [ -n "$2" ]; then
  if [ -n "${KERNEL_PACKAGE_VERSION}" ]; then
    bootdir=$(dirname "$2")
    bootopt="-b ${bootdir}"
  else
    # official Debian linux-images take care themself
    exit 0
  fi
fi[/color]

# avoid running multiple times
if [ -n "$DEB_MAINT_PARAMS" ]; then
  eval set -- "$DEB_MAINT_PARAMS"
  if [ -z "$1" ] || [ "$1" != "configure" ]; then
    exit 0
  fi
fi

# we're good - create initramfs.  update runs do_bootloader
update-initramfs -c -t -k "${version}" ${bootopt}
Można więc rozwiązać ten problem jeszcze jedną metodą:

3. przez zwykłą podmianę starego skryptu na jego nową wersję (do czasu, aż nowa wersja pakietu oficjalnie nie przejdzie do dystrybucji której używamy).
ODPOWIEDZ