Adam's

adam@debian:~$ cat /dev/random

Archive for the ‘debian’ tag

无视Recommends

with 11 comments

话说apt的包依赖关系分了几个不同的权值, 严谨而清晰. 但我一直觉得其中的Recommends域比较混乱, 这个域应该定义的是”非必须或者不常用的功能性依赖”, 而大多数包维护者却都按照字面意思把”推荐”的包放到了这里.

所以我安装完基本Debian系统后的第一个操作就是对apt进行设置, 避免装上Recommends域的包, 像这样:

cat << EOF | sudo tee /etc/apt/apt.conf.d/90no-recommends
APT
{
    Install-Recommends 0;
};
EOF

可惜我很久之前就发现了一个问题, 一直没有解决, 例如: A depends C, B recommends C, 我将A卸载之后, 再执行autoremove操作, C却并不会被卸载掉, 因为apt将Recommends视作依赖了. 总之, 虽然我安装的时候不会去装Recommends域的包, 但是还是有可能会因为别的操作而装上这些对我来说不必要的包.

大概纠结了一年多这个问题, 今天终于找到了解决办法:

cat << EOF | sudo tee /etc/apt/apt.conf.d/90no-recommends
APT
{
    Install-Recommends 0;
    AutoRemove
    {
        RecommendsImportant 0;
    }
};
EOF

顺便抱怨下apt的文档, /usr/share/doc/apt/examples/configure-index.gz中所谓的全部选项根本不全, 我现在已经忘了我在哪个犄角旮旯搜索到这个的了…

PS: 1, autoremove不危险, 前提是你对apt的包管理体系很熟悉. 2, 我知道aptitude有Keep-Recommends的配置选项, 但是我个人不喜欢用aptitude.

Written by adam8157

September 23rd, 2010 at 5:23 pm

Posted in Linux,Tips

Tagged with

清理Debian内核和头文件的脚本

without comments

改自bones7456清理ubuntu内核的脚本, 原文地址在此: http://li2z.cn/2010/02/28/clean_ubuntu_kernel/.

Debian和Ubuntu的包命名方式稍有不同, 不能直接用, 改了下, 再就是避免删除元包, 增加了响应输入的功能.

有需要的直接拿去. 如果有修改, 最新的版本会发布在Github, 详见我的配置文件, Tips和脚本.

#!/bin/sh

CURRENT="`uname -r | awk -F"-" '{print $1"-"$2}'`"
HEADERS=""
IMAGES=""
ARCH="amd64"

for HEADER in `dpkg --get-selections | grep ^linux-headers | grep -v "${ARCH}" | awk -F"-" '{print $3"-"$4}'`
do
    if [[ "$CURRENT" < "$HEADER" ]]
    then
        echo "The running kernel is not the newest. $CURRENT < $HEADER"
        exit 1
    else
        [[ "$CURRENT" != "$HEADER" ]] && {
            HEADERS="${HEADERS} linux-headers-${HEADER}-${ARCH} linux-headers-${HEADER}-${ARCH}-common"
            IMAGE="`dpkg --get-selections | grep ^linux-image | grep "${HEADER}" | awk '{print $1}'`"
            IMAGES="${IMAGES} $IMAGE"
        }
    fi
done

if [[ -z "$HEADERS" ]]
then
    echo "There is no old kernel or headers need to be cleaned."
    exit 0
fi

echo
echo ------------------------------------
echo "$IMAGES $HEADERS"
echo ------------------------------------
echo 

read -p "Really wanna remove these packages? [y/N] " REPLY

case $REPLY in
    y | Y )
        sh -c "sudo apt-get purge $IMAGES $HEADERS" ;;
    * )
        echo "The operation is cancelled." ;;
esac

Written by adam8157

May 10th, 2010 at 8:25 pm

Posted in Linux,Tips

Tagged with , ,