将树莓派从Jessie升级至Stretch

想用shadowsocks-libev,又不想自己编译,无奈Jessie里还没有,所以想升级至Stretch

温馨提示

如果你的树莓派运行着各种服务,慎重再慎重!有可能会出各种莫名的问题

步骤

编辑/etc/apt/source.list文件以及/etc/apt/source.list.d/目录下的文件,将所有jessie改成stretch

1
2
sudo apt-get update
sudo apt-get dist-upgrade

接下来等待就好了,期间会弹出各种替换提示,是否用新的配置文件替换原文件,比如sshd_confdnsmasq.confsysctl.conf等,按需可以选择替换或保留,手滑也不要紧,舍弃的那份会备份在同一个目录。

安装完,最好先看看关键服务能否正常启动,然后再重启系统。

掉坑记录

dhcpcd

dhcpcd,更新至版本6.10.1,重启之后才发现服务启动失败,报错如下(取自syslog)

1
2
3
dhcpcd[399]: Not running dhcpcd because /etc/network/interfaces
dhcpcd[399]: defines some interfaces that will use a
dhcpcd[399]: DHCP client or static address

由于学校有ipv6,我eth1设置的是外网动态ipv4+v6双栈,使用dhcpcd获取。我eth0设置的是内网静态ipv4+v6双栈,使用/etc/network/interfaces配置。这个报错意味着我只能用一边来设置。

但是问题随之而来:

单用dhcpcd的话,我找不到如何配置静态ipv4+v6双栈地址的方法。

单用/etc/network/interfaces的话,获取不到ipv6地址,设置为如下时,重启networking获取不到ipv6地址,手动ifup eth1时不报错,执行完仍没有获取到。

1
iface eth1 inet6 auto

设置为如下时,重启networking获取不到地址,手动ifup eth1时会在获取完v4地址后卡很久,没耐心等到最后,手动kill掉了。

1
iface eth1 inet6 dhcp

syslog输出如下

1
2
3
4
5
6
7
8
9
dhclient[1695]: Created duid "\***\***\***\*******\***\***\***\***\***".
dhclient[1695]: XMT: Solicit on eth1, interval 1010ms.
dhclient[1695]: XMT: Solicit on eth1, interval 1960ms.
dhclient[1695]: XMT: Solicit on eth1, interval 3970ms.
dhclient[1695]: XMT: Solicit on eth1, interval 7670ms.
dhclient[1695]: XMT: Solicit on eth1, interval 15210ms.
dhclient[1695]: XMT: Solicit on eth1, interval 31370ms.
dhclient[1695]: XMT: Solicit on eth1, interval 63230ms.
dhclient[1695]: XMT: Solicit on eth1, interval 121470ms.

设置为如下时,跟上面情况一样

1
2
3
iface eth1 inet6 auto
dhcp 1
accept_ra 1

看man以及网上搜都没有找到相关共存方法,有意思的是,当我找到dhcpcd服务启动的命令(dhcpcd -q -b),手动执行时,不报错,成功执行。

后来又尝试了下将配置写到目录/etc/network/interfaces.d/下,重启dhcpcd服务,成功。