dash läst sich nicht konfigurieren

Du kommst mit der Installation nicht voran oder willst noch was nachfragen? Schau auch in den "Tipps und Tricks"-Bereich.
Antworten
Benutzeravatar
tdc
Beiträge: 149
Registriert: 02.10.2002 16:12:37
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Im schweizerischen Rheintal
Kontaktdaten:

dash läst sich nicht konfigurieren

Beitrag von tdc » 28.06.2011 07:41:49

Guten Morgen

Ich versuche zur Zeit mir ein Debian auf einem ARM9-System zu installieren. Dazu verwende ich Emdebian Multistrap. Wie auf der Webseite von Emdebian beschrieben, habe ich mir eine Konfiguration [1] erstellt und ein kleines Skript geschrieben, welches mir die benötigten Konfigurationsdateien ins RootFS kopiert und schlussendlich ein JFFS2-Image erstellt. Dieses boote ich anschliessend auf meinem Embedded System und zwar direkt in eine Shell [2], so dass ich die Paketkonfiguration durchlaufen lassen kann. Und genau hier beginnen die Probleme. Beim Konfigurieren von dash (0.5.5.1-7.4em1) bricht dpkg mit folgender Fehlermeldung ab:

Code: Alles auswählen

root@(none):/# dpkg --configure dash
Setting up dash (0.5.5.1-7.4em1) ...
No diversion 'diversion of /usr/share/man/man1/sh.1.gz by dash', none removed.
This should never be reached
dpkg: error processing dash (--configure):
 subprocess installed post-installation script returned error exit status 1
Errors were encountered while processing:
 dash
Ich denke das Problem ist, dass es den erwähnten Symlink überhaupt nicht gibt. Es gibt nicht mal den Ordner /usr/share/man!

Hat jemand eine Idee, wie ich das lösen könnte? Bis letzte Woche hat das Ganze noch funktioniert, jedoch gabs auch da schon ein paar unschöne Warnungen...

Danke und schöne Grüsse
Martin

--------------------

[1] Meine Multistrap Konfiguration:

Code: Alles auswählen

[General]
arch=armel
directory=/opt/multistrap/
cleanup=true
retainsources=
noauth=true
unpack=true
debootstrap=Grip Updates
aptsources=Grip Updates Debian

[Grip]
packages=ntpdate udev lrzsz isc-dhcp-client ifupdown vim procps vim iputils-ping net-tools psmisc module-init-tools openssh-server
source=http://www.emdebian.org/grip
keyring=emdebian-archive-keyring
suite=squeeze

[Updates]
packages=apt
source=http://www.emdebian.org/grip
keyring=emdebian-archive-keyring
suite=squeeze-proposed-updates

# fallback
[Debian]
packages=
source=http://ftp.uk.debian.org/debian
keyring=debian-archive-keyring
suite=squeeze
[2] Boot-Parameter:

Code: Alles auswählen

exec -w 1 -c "init=/bin/sh console=ttymxc0,115200 root=/dev/mtdblock1 rootfstype=jffs2"

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: dash läst sich nicht konfigurieren

Beitrag von rendegast » 28.06.2011 09:14:16

Die maintainer gehen davon aus, daß die dash (nur) als (POSIX-)Alternative zu bash auf dem System existiert.
Nicht daß sie allleine da ist, oder daß statt der bash eine andere höhere shell verwendet ist.

Der entsprechende Teil aus dash.postinst:

Code: Alles auswählen

# $1: case, $2: dfile, $3: ltarget [, $4: distrib]
check_divert() {
	dfile=$2; ltarget=$3
	distrib=${4:-$dfile.distrib}
	diverter=$(dpkg-divert --listpackage $dfile)
	truename=$(dpkg-divert --truename $dfile)
	case "$1" in
	true)
		if [ "$diverter" != dash ]; then
			# Let dpkg-divert error out; we are not taking
			# over the diversion, unless we added it
			# ourselves on behalf of bash.
			if [ "$diverter" = bash ]; then
				dpkg-divert --package bash --remove $dfile
			else
				dpkg-divert --package dash --remove $dfile
				# Make sure we die:
				echo "This should never be reached"
				exit 1
			fi
Das könnte hier einerseits weitlaufender aussehen
(wird jedoch über die Priorität "required" für bash und dash gelöst),
andererseits vielleicht auch nicht mit einem 'exit 1' abbrechen.

Eine Idee: Dem Image fehlt die bash?

Code: Alles auswählen

packages=bash ....
(Obwohl bash und dash beide "required" sind, daher ja eigentlich auch auf dem System sein sollten?
Es ist auch bei http://www.emdebian.org/grip/dists/sque ... l/Packages dabei)
debootstrap, by default, selects all packages with Priority: required and Priority: important from the Debian mirror. multistrap will use Priority: required by default (this can be turned off with the omitrequired option in the config file).
Bei mir auf dem installierten System:

Code: Alles auswählen

# dpkg-divert --list
diversion of /usr/lib/gnupg/gpgkeys_curl to /usr/lib/gnupg/gpgkeys_curl.non_curl by gnupg-curl
diversion of /usr/lib/gnupg/gpgkeys_hkp to /usr/lib/gnupg/gpgkeys_hkp.non_curl by gnupg-curl
diversion of /usr/share/vim/vim72/doc/help.txt to /usr/share/vim/vim72/doc/help.txt.vim-tiny by vim-runtime
diversion of /usr/share/man/man1/sh.1.gz to /usr/share/man/man1/sh.distrib.1.gz by dash
diversion of /usr/share/vim/vim72/doc/tags to /usr/share/vim/vim72/doc/tags.vim-tiny by vim-runtime
diversion of /bin/sh to /bin/sh.distrib by dash

# cat /var/lib/dpkg/diversions
/usr/lib/gnupg/gpgkeys_curl
/usr/lib/gnupg/gpgkeys_curl.non_curl
gnupg-curl
/usr/lib/gnupg/gpgkeys_hkp
/usr/lib/gnupg/gpgkeys_hkp.non_curl
gnupg-curl
/usr/share/vim/vim72/doc/help.txt
/usr/share/vim/vim72/doc/help.txt.vim-tiny
vim-runtime
/usr/share/man/man1/sh.1.gz
/usr/share/man/man1/sh.distrib.1.gz
dash
/usr/share/vim/vim72/doc/tags
/usr/share/vim/vim72/doc/tags.vim-tiny
vim-runtime
/bin/sh
/bin/sh.distrib
dash

$ ll /bin/sh.* /usr/share/man/man1/sh.*
lrwxrwxrwx 1 root root     4 25. Apr 2010  /bin/sh.distrib -> bash
lrwxrwxrwx 1 root root     9 20. Dez 2010  /usr/share/man/man1/sh.1.gz -> dash.1.gz
-rw-r--r-- 1 root root 14614 13. Dez 2005  /usr/share/man/man1/sh.1posix.gz
lrwxrwxrwx 1 root root     9 25. Apr 2010  /usr/share/man/man1/sh.distrib.1.gz -> bash.1.gz
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: dash läst sich nicht konfigurieren

Beitrag von rendegast » 28.06.2011 10:38:35

Eventuell macht "init=/bin/sh" das Problem,
da es nur eine Hilfsshell im RAM bereitstellt?
Die für Installationen benötigte Infrastruktur in /var/lib/dpkg/ existiert dann nicht?


Ich habe Deine config jetzt mal mit
arch=i386
directory=/tmp/multistrap-i386/

und
arch=armel
directory=/tmp/multistrap-armel/

durchgespielt,

Code: Alles auswählen

$ /usr/sbin/multistrap -f config
...
-> "Multistrap system [b]installed successfully[/b] in /tmp/multistrap-.../"


$ du -sm /tmp/multistrap-*
85      /tmp/multistrap-armel
90      /tmp/multistrap-i386
Darin sind dash / bash ja schon installiert.
und ein kleines Skript geschrieben, welches mir die benötigten Konfigurationsdateien ins RootFS kopiert und schlussendlich ein JFFS2-Image erstellt.
Entsprechen "die benötigten Konfigurationsdateien" dem Inhalt meiner durch multistrap erstellten Verzeichnisse?
(Weil dann ein erneutes Installieren der dash ja unnötig wäre)
Oder wolltest Du multistrap direkt auf dem ARM9-System durchführen?
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

Benutzeravatar
tdc
Beiträge: 149
Registriert: 02.10.2002 16:12:37
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Im schweizerischen Rheintal
Kontaktdaten:

Re: dash läst sich nicht konfigurieren

Beitrag von tdc » 28.06.2011 11:08:06

Hallo rendegast

Danke für die Antwort. Die Bash ist vorhanden, ich habe auch schon versucht sie zu nehmen für die Paketkonfiguration anstatt der dash:

Code: Alles auswählen

exec -w 1 -c "init=/bin/bash console=ttymxc0,115200 root=/dev/mtdblock1 rootfstype=jffs2"
leider mit dem selben Resultat.

Der Hinweis bezüglich /var/lib/dpkg ist jedoch gut! Habe gerade gesehen, dass ich in der fstab noch einen Fehler habe und /dev/mtdblock2 nicht wie geplant nach /var/log gemountet habe sondern direkt nach /var. Damit fehlte natürlich die benötigte Infrastruktur für dpkg. Werde es gleich mal testen.

Mit den "benötigten Konfigurationsdateien" meinte ich Dateien wir passwd, hostname, interfasses, etc. welche ich für meine Anwendung angepasst habe.

Was das Multistrapping angeht, das führe ich auf dem Host durch. Nur die Konfiguration (dpkg --configure -a) mache ich nach dem ersten Booten auf dem Target.

Werde mal testen ob es mit der angepassten fstab geht und mich später wieder melden. Vielen Dank für den Tipp.
Gruss Martin

Antworten