dpkg package problem

Všetko ohľadom Linuxu...
vvTF
Expert
Expert
Používateľov profilový obrázok
Príspevky: 151
Registrovaný: 27 apr 2006, 21:39

dpkg package problem

Príspevok od používateľa vvTF »

Nazdar hosi narazil som na zaujimavy problem. Instaloval som gnome na debiane... Instalacia padla na neznamom probleme.
Nasledne kazda operacia s apt-get isla do haja, vypisovalo chybu v nejakych pkg.

Aplikoval som nasledujuci postup
1. v adresari /var/lib/dpkg/info som vymazal vsetko okolo pkg ktore robili problem
2. odinstaloval gnome, odinstaloval x-server

apt-get funguje v poriadku az na par malych veci
dpkg: serious warning: files list file for package `swfdec-gnome' missing, assuming package has no files currently installed.
dpkg: serious warning: files list file for package `gnome-mag' missing, assuming package has no files currently installed.
dpkg: serious warning: files list file for package `libgnome2-0' missing, assuming package has no files currently installed.
atd... takychto pck ktore robia problem je vela ... ide o to ze tie pck neexistuju len neviem co a zkade sa na nich stale dotazuje. skusal som dany zaznam vymazat z dpkg/status no viedlo to k tomu ze som to musel cez apt-get install -f opravit naspat.

Neviete pls ako to riesit, nechcem gnome ani ziadny x-server. Chcem to odstranit vsetko prec.
Dakujem ...
pato83
Addict
Addict
Používateľov profilový obrázok
Príspevky: 3916
Registrovaný: 21 nov 2005, 22:12

Re: dpkg package problem

Príspevok od používateľa pato83 »

vvTF napísal:Nazdar hosi narazil som na zaujimavy problem. Instaloval som gnome na debiane... Instalacia padla na neznamom probleme.
Nasledne kazda operacia s apt-get isla do haja, vypisovalo chybu v nejakych pkg.

Aplikoval som nasledujuci postup
1. v adresari /var/lib/dpkg/info som vymazal vsetko okolo pkg ktore robili problem
2. odinstaloval gnome, odinstaloval x-server

apt-get funguje v poriadku az na par malych veci



atd... takychto pck ktore robia problem je vela ... ide o to ze tie pck neexistuju len neviem co a zkade sa na nich stale dotazuje. skusal som dany zaznam vymazat z dpkg/status no viedlo to k tomu ze som to musel cez apt-get install -f opravit naspat.

Neviete pls ako to riesit, nechcem gnome ani ziadny x-server. Chcem to odstranit vsetko prec.
Dakujem ...
Toto je prave dosledok vymazania /var/lib/dpkg/info/*.list suborov, ktore su dolezite, lebo obsahuju zoznam suborov a ich umiestneni pre odinstalaciu. Takze teraz nastava to, ze v zozname nainstalovanych balikov je balik oznaceny ako nainstalovany ale neexistuje k nemu *.list subor a to chape tak, ze ten balik zrejme nainstalovany nie je. Zial, to je tak, ked riesis, co netreba. Lebo 100% ti dalo daku hlasku pri tom zlyhanom pokuse o instalaciu gnome, len sa jej bolo treba venovat. Ale zase, pokial nejde o produkcny system, tak si sa aspon priucil niecomu. Teraz som na ceste z prace, tak neskor dam postup, co by mohol pomoct.

//autoeditácia príspevku (13 Okt 2010, 21:23)
Tak, ako som slubil. Vcera na to cas nebol moc ...
Napisal som skript, ktory obnovuje chybajuce list subory v /var/lib/dpkg/info . Sam som ho niekolkokrat spustil po vymazani list suborov a subory boli obnovene. Nasledne prestal aj dpkg vypisovat upozornenia.
Je nutne mat nainstalovany apt-file, ostatne by si mal mat. Akokolvek, skript ta na to upozorni a je ho nutne spustat ako root. Nie je ziaden progress bar vytvoreny, takze sa nelakat, ak to akoze nic nerobi. Treba mat strpenie, najma ak ich je "vela" (hodne relativne, ja viem). ;)

Kód: Vybrať všetko

#! /bin/bash
###############################################################################
# Author: Patrik Uhrak
# Email: [email protected]
# Licence : GPLv3 http://www.opensource.org/licenses/gpl-3.0.html
# Description: Easily fix missing list files in /var/lib/dpkg/info/ without
# 	     downloading any content.
###############################################################################

### READONLY VARIABLES
readonly SUCCESS=0
readonly E_ROOT=1
readonly E_APPS=127
readonly E_KILL=3
readonly DPKGINFODIR='/var/lib/dpkg/info'

### VARIABLES
TMP="$(mktemp -d /tmp/dpkgfix_XXXXXXXXXX)"
INSTALLEDPKG="${TMP}/installedpkg.file"
MISSINGLISTPKG="${TMP}/missinglistpkg.file"

################## FUNCTIONS ##################################################

# Show help
#
Help()
{
cat <<_EOF
Author: Patrik Uhrak
Email: [email protected]
Licence : GPLv3 http://www.opensource.org/licenses/gpl-3.0.html
Description: Easily fix missing list files in /var/lib/dpkg/info/ without
	     downloading any content.

Options:
	-h --help : Shows help

In case you have saved the script in your PATH, then just run:
	${0##*\/}
otherwise
	bash "$0"

Hope this script helps but NO WARRANTIES can be given !!!
_EOF
}

# Verify that script is running by root
#
VerifyUser()
{
if [[ $EUID -ne 0 ]]
then
	echo 'This script must be run as root!'
	exit "$E_ROOT"
else
	trap 'CleanUp' SIGHUP SIGINT SIGTERM
fi
}

# This function checks whether you have installed all needed applications to 
# run this script
#
CheckNeededApps()
{
local APPSTATUS

for APP in {dpkg,sed,apt-file,grep}
do
	which "$APP" &>/dev/null
	if [[ $? -ne 0 ]]
	then
		echo "Missing application: $APP"
		APPSTATUS=1
	fi
done

if [[ $APPSTATUS -eq 1 ]]
then
	echo 'You must install all applications above!'
	exit "$E_APPS"
fi
}

# Can take only -h or --help to invoke help
#
GetParameters()
{
if [[ "$1" == '-h' || "$1" == '--help' ]]
then
	Help
	exit "$SUCCESS"
fi
}

# Get list of all installed packages
#
GetListInstalledPkg()
{
dpkg -l | grep '^ii' | cut -d' ' -f 3 > "$INSTALLEDPKG"
}

# Get list of packages with missing list files in /var/lib/dpkg/info/
#
GetMissingListFiles()
{
local PKG

for PKG in $(cat "$INSTALLEDPKG")
do
	if [[ ! -f "${DPKGINFODIR}/${PKG}.list" ]]
	then
		echo "$PKG" >> "$MISSINGLISTPKG"
	fi
done
}

# Create new list files
#
CreateListFile()
{
local PKG LIST

if [[ ! -f $MISSINGLISTPKG ]]
then
	echo "Directory $DPKGINFODIR contains a list file for every installed package!"
	rm -rf "$TMP"
	exit "$SUCCESS"
fi

for PKG in $(cat "$MISSINGLISTPKG")
do
	LIST="${TMP}/${PKG}.list"
	apt-file list --regexp "^${PKG}$" | cut -d' ' -f2 > "$LIST"
	IncludeDirs "$LIST" 
done
}

# APT-FILE doesn't show directories, only files, but list files contain and 
# therefore we need to cover this situation as well.  
#
IncludeDirs()
{
local LINE TMPLIST
# temporary list files, otherwise it would end up in neverending loop
TMPLIST="${1}_tmp"

for LINE in $(cat "$1")
do
	while [[ $LINE != '' ]]
	do 
		# LINE="$(echo "$LINE" | sed -e 's/\(^.*\)\/.*$/\1/')"
		LINE="${LINE%/*}"	# easier,faster and works ;)
		if ! grep "^${LINE}$" "$TMPLIST" &>/dev/null
		then
			echo "$LINE" >> "$TMPLIST"
		else
			break 1
		fi
	done
done

# Remove all empty lines from $TMPLIST and add it to $LIST
echo $LIST
sed -e '/^$/d' "$TMPLIST" >> "$LIST"

# It is expected to be there as well
echo '/.' >> "$LIST"
}

# Copy all newly created list files back to /var/lib/dpkg/info
#
RecoverListFiles()
{
mv -i "$TMP"/*.list "$DPKGINFODIR"
}

CleanUp()
{
rm -rf "$TMP"
exit "$E_KILL"
}

####################### MAIN ##################################################

VerifyUser
CheckNeededApps
GetParameters "$1"
GetListInstalledPkg
GetMissingListFiles
CreateListFile
RecoverListFiles
rm -rf "$TMP"
exit "$SUCCESS"
//autoeditácia príspevku (13 Okt 2010, 21:27)
Este som chcel dodat, ze pokial si pomazal aj ostatne skripty k dotycnym balikom(pred instalacne, po instalacne, atd), tak zial necakaj, ze je sposob obnovy aj ostatnich. Jedine stiahnut kazdy jeden balik, rozbalit a nakopirovat tie skripty spat. To zial tiez nemusi byt tak jednoduche, pokial bola uvolnena aktualizacia daneho balicka a tym padom je mozne, ze aj skripty sa zmenili. Ale tento prispevok ber len ako poznamku/radu.
Napísať odpoveď