https://wiki.archlinux.org/index.php/Pacman_Tips_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87) 如何恢复Pacman的本地数据库


https://bbs.archlinux.org/viewtopic.php?pid=616234#p616234


升级pacman 3.5 后来跑到/var/lib/pacman 里,不小心把本地数据库目录给删了,后来按上面的方法恢复了本地数据库,结果 pacman -Sh 时发现了一个新的参数

-k, --dbonly 仅修改数据库条目,而非软件包文件

记录一下,不过下回也难得再删一次了


[code]


cat log2pkglist.awk

#!/bin/awk -f


$3 ~ /^(installed|upgraded)$/ {

pkg[$4] = 1

next

}


$3 == "removed" {

pkg[$4] = 0

}


END {

for (i in pkg) if (pkg[i]) print i

}



[/code]

[code]


#!/bin/bash


tmp=./tmp

mkdir -p "${tmp}"


pushd "${tmp}"

dbpath=$(readlink -f ./dbpath)

root=$(readlink -f ./root)

#cache=$(readlink -f ./cache)

cache=$(readlink -f /var/cache/pacman/pkg/)

log=/dev/null

mkdir -p "${dbpath}" "${cache}" "${root}"

popd


echo "dbpath = ${dbpath}"

echo "root= ${root}"

echo "cache = ${cache}"

echo "log = ${log}"


recovery-pacman() {

fakeroot pacman "$@" \

--dbpath "${dbpath}" \

--root "${root}" \

--cache "${cache}" \

--log "${log}" \

--noscriptlet \

--dbonly \

#

}

recovery-powerpill() {

fakeroot powerpill "$@" \

--dbpath "${dbpath}" \

--root "${root}" \

--cache "${cache}" \

--log "${log}" \

--noscriptlet \

--dbonly \

#

}


recovery-all()

{

recovery-pacman -S --nodeps --needed $(< pkglist)

}


[/code]