标签 Debian 下的文章

Linux系统,使用initd时,想要开机启动时执行指定Shell脚本,只需修改/etc/rc.local。现在的分发版基本改用Systemd,找不到rc.local了。要实现类似的功能,有两个方案:

  1. 启用rc-local.service服务。
  2. 创建一个开机启动的服务。

推荐方案2,可以设置服务关联。比如设置网络服务启动后才执行指定脚本。

以Debian 11为例,记录一下两个方案的具体操作。

方案1,启用rc-local.service服务

  1. 创建/etc/rc.local文件,并设置执行权限
cat <<EOF >/etc/rc.local
#!/bin/sh -e
# run at the end of each multiuser runlevel

exit 0 EOF
chmod +x /etc/rc.local

exit 0之前,编写要执行的Shell脚本。一定不要删除结尾的exit 0

  1. 启用服务
sudo systemctl enable --now rc-local

方案2,创建开机启动服务

就是配置一个Systemd服务,并设置开机启动。其启动的代码,就是执行指定Shell脚本。

  1. 创建配置文件。

在目录/etc/systemd/system,创建文件startup.service(文件名可自取),并添加以下内容:

#################################
# Run at startup
#################################

[Unit]
Description=Run the shell script at system startup.
Wants=network-online.target
After=network.target network-online.target

[Service]
Type=simple
WorkingDirectory=/opt/startup
ExecStart=/opt/startup/run.sh
User=root

[Install]
WantedBy=multi-user.target

其中ExecStart就是配置要执行的Shell脚本。这里假设Shell脚本需要联网后才能执行。

  1. 启用等待网络正常启动的服务。

服务配置依赖network-online.target时,需要开启systemd-networkd-wait-online.service服务,才能确保在网卡正确启动并获取IP地址后执行。

sudo systemctl enable systemd-networkd-wait-online.service
  1. 设置开机启动。
sudo systemctl daemon-reload
sudo enable startup.service

CFO离职,捡了个烂电脑回来(CPU是i3-4000M,第4代酷睿,内存4G)。比10年前的酷睿T2450好太多了,而且是64位系统。前段时间有新闻报道说,Google的内部系统Goobuntu,准备抛弃Ubuntu,直接基于Debian。于是也想试试直接装Debian来用。其实用习惯了Lubuntu,只要桌面也装LXDE,应该用起来没什么区别。
第一次装Debian,发现居然连下载哪个ISO都不知道。一开始下个live CD的iso文件,发 现虽然启动界面有选项可以安装系统,但是按抓给你过程要检查CD-ROM。没用光盘的话,不能继续进行安装。后来才明白要用netinst的iso。

iso文件制作U盘启动盘很简单,只要两行命令。其中sdX是U盘的设备文件名。如果U盘已挂载,要先卸载,再执行

$ sudo cp debian-9.4.0-amd64-netinst.iso /dev/sdX
$ sudo sync

后面的安装步骤基本按着提示一步一步进行。有个文章写得挺好的,可以参考:
如何安装 Debian 9?
http://scottming.com/2017/08/06/how_to_install_debian9/

有两个步骤需要说明一下:
第一,需要找无线网卡的firmware,放在另一个U盘,再插到电脑上。安装程序会自动设别并安装。这是为了后面安装软件时连上网络。或者可以使用有线连接吧。

第二,到了分区那一步,不能按默认的整个硬盘分区。因为要保留原来的Windows系统,所以只能选择手动操作。而且第一次搞LVM分区,完全不懂操作。后来参考了这个文章才能顺利搞掂:
ubuntu 12.10 安装 LVM分区(图文)
http://blog.sina.com.cn/s/blog_56a70c0401018dki.html

简单来说,要注意几点:
1)由于GRUB Legacy不支持LVM,所以无法在LVM上创建/boot分区。也就是除了/boot分区,其它分区都可以在LVM上创建。
2)先把分区设置为LVM分区,再点LVM分区管理的选项进行详细设置。
3)LVM分区管理,先创建逻辑卷组,再创建逻辑卷,多个逻辑卷就等于是多个分区。
4)最后把逻辑卷设置对应的挂载点。

最后总算是顺利安装完毕。

后记
用了一段时间后,终于明白Ubuntu的存在价值了。Debian 9即使装上LXDE,还是有一些不顺手,例如屏幕亮度调节。后来还是换上Lubuntu。

网上看到关于Shadowsocks的优化,觉得有必要设置下自用的VPS。
shadowsocks 公共代理的必要设置
https://gist.github.com/fqrouter/95c037f9a3ba196fd4dd

但是VPS上的Shadowsocks一般只有自己在用,而且服务器限制了最大访问文件数。那么就剩下iptables值得设置了。

关于Debian的iptables,发现跟RedHat(或者CentOS)的不同。最后还是参照了官方Wiki进行了配置。
https://wiki.debian.org/iptables

PS. 本来大学时就学过iptables了,但是现在用来,发现基本忘干净了。

本来想在G1上装个WiFi密码破解软件。但是启动Debian失败,于是搞了几天,才发现启动脚本有问题。过程中找到以下文章,可以自己编译一个ARM版的Debian:
Debian & Android Together on G1 - Jay Freeman (saurik)
http://www.saurik.com/id/10

成功运行Debian后,去下载了aircrack-ng-1.1的源码来装。后来发现装的Debian上已经附带aircrack-ng。
Aircrack-ng
http://www.aircrack-ng.org

然后发现G1上的无线网卡tiwlan0不能以监听模式运行,就是iwconfig命令不能用,于是不能实现G1破解加密WiFi。再看看相关资料,说是驱动问题,不允许对无线网卡进行底层的设置。看来只能等高手写个驱动了。

看了看WiFi的加密,分为wep、wpa及wpa2三种。其中wep加密最容易破解,只要抓到足够的数据包就可以了。例如aircrack-ng就能轻松破解。也有个叫BT3的整体解决方案,包含虚拟机、Linux操作系统(Slax)和图形化软件,公司的同事演示过,对wep加密简直是“秒杀“。wpa和wpa2加密更安全,破解需花费更多时间。暂时没接触过。

过程中发现一篇关于把Android移植到真实机器环境的文章:
KLDPWiki: Android Porting On Real Target
http://wiki.kldp.org/wiki.php/AndroidPortingOnRealTarget
花了一个晚上把它看完,获益良多。简单来说是对Android有更进一步的认识。

还发现了Android上的VNC Server:
Android VNC Server
http://code.google.com/p/android-vnc-server/
此软件是在别人的基础上修改而来的,免去了安装驱动的要求,在G1的终端上敲下命令就可以了。最新版本实现了对触摸屏的支持。

PS. iPhone出来后,大家都学做界面;Android出来后,大家都学做系统了。