网址更新

非常感谢大家的支持,说起来也是很久没有更新这个博客了,从大学生到工作已经快满2年,也是感慨良多。首先这个网站为了哄兔兔开心,给兔兔留个纪念建设而成的。后来被我用来记录一些网站运行时的笔记,还记得大学毕业时还想找一份与网络有关的工作,如今时过境迁,别说当程序员了,就连本身工科类工作都放下了。工作繁忙,想要更新文章也是有心无力。直到最近收到消息说我的域名又到期了,才觉得需要重新收拾收拾这里。

总体说来,这次网址更新没有消耗太多功夫,一方面是我本身水平的一点小小进步,更主要的是有工作,有收入来源让许多事情变得特别简单。目前经济大环境确实是不好,有一份简单稳定的工作还是特别幸运的,哪怕赚不了多少钱。不管怎么说,这次域名我充了3年时间,3年是一个轮回,让我和我的兔兔一起带着新的期盼,向下一个3年再出发!

systemd及service文件详解——以amule为例

上篇文章谈到了编译安装的amule没有自启动脚本,但看了一下传统的init启动脚本,眼晕,经过衡量,最后决定自己编写sysytemd.service启动脚本以满足自身需要。

systemd介绍

Systemd 是 Linux下的一款系统和服务管理器,相比于传统的服务管理方法比如自制脚本,具有文件编写简单,功能可靠,以及方便统一管理等优点。Systemd 有很多不同类型的使用单元(unit),主要包括:系统服务(.service)、挂载点(.mount)、sockets(.sockets)、系统设备(.device)、交换分区(.swap)、文件路径(.path)、启动目标(.target)。一般我们常用的是其中的系统服务。

Systemd的系统服务的单元文件(.service)可以从两个地方加载

/usr/lib/systemd/system/ #软件包安装的单元
/etc/systemd/system/ #系统管理员安装的单元

一般来说我们手动编写的单元都放在第二个目录下

service文件内容

service文件包含几个常用的小节,每个小节以[*]开头,来说明小节的内容

[Unit]: 

这个项目内主要在规范服务启动的脚本、环境配置文件文件名、重新启动的方式等等。主要包括:

  • Description:描述这个 Unit 文件的信息
  • Documentation:指定服务的文档,可以是一个或多个文档的 URL 路径
  • Requires:依赖的其它 Unit 列表,列在其中的 Unit 模板会在这个服务启动时的同时被启动。并且,如果其中任意一个服务启动失败,这个服务也会被终止
  • Wants:与 Requires 相似,但只是在被配置的这个 Unit 启动时,触发启动列出的每个 Unit 模块,而不去考虑这些模板启动是否成功
  • After:与 Requires 相似,但是在后面列出的所有模块全部启动完成以后,才会启动当前的服务
  • Before:与 After 相反,在启动指定的任务一个模块之间,都会首先确证当前服务已经运行

[Install]

这部分配置的目标模块通常是特定运行目标的 .target 文件,用来使得服务在系统启动时自动运行。这个区段可以包含三种启动约束:

  • WantedBy:和 Unit 段的 Wants 作用相似,只有后面列出的不是服务所依赖的模块,而是依赖当前服务的模块。默认使用WantedBy=multi-user.target
  • Also:当前 Unit enable/disable 时,同时 enable/disable 的其他 Unit
  • Alias:当前 Unit 可用于启动的别名

[Service]

用来 Service 的配置,只有 Service 类型的 Unit 才有这个区块。它的主要字段分为服务生命周期和服务上下文配置两个方面。

服务生命周期控制相关:

  • Type:定义启动时的进程行为,它有以下几种值:
    • Type=simple:默认值,执行ExecStart指定的命令,启动主进程
    • Type=forking:以 fork 方式从父进程创建子进程,创建后父进程会立即退出
    • Type=oneshot:一次性进程,Systemd 会等当前服务退出,再继续往下执行
    • Type=dbus:当前服务通过D-Bus启动
    • Type=notify:当前服务启动完毕,会通知Systemd,再继续往下执行
    • Type=idle:若有其他任务执行完毕,当前服务才会运行

目前使用默认type就能满足绝大多数需要

  • ExecStart:启动当前服务的命令
  • ExecStartPre:启动当前服务之前执行的命令
  • ExecStartPos:启动当前服务之后执行的命令
  • ExecReload:重启当前服务时执行的命令
  • ExecStop:停止当前服务时执行的命令
  • ExecStopPost:停止当其服务之后执行的命令
  • RestartSec:自动重启当前服务间隔的秒数
  • Restart:定义何种情况 Systemd 会自动重启当前服务,可能的值包括 always(总是重启)、on-success、on-failure、on-abnormal、on-abort、on-watchdog

服务上下文配置相关:

Environment:为服务指定环境变量

User:指定运行服务的用户

Group:指定运行服务的用户组

amule系统服务unit配置

需求:以root用户运行,随着系统启动运行,能通过systemd命令启动与停止

文件样板:

[Unit]
Description=Amule
After=network.target

[Service]
ExecStart=/usr/local/bin/amuled 
ExecStop=/bin/kill $MAINPID

[Install]
WantedBy=multi-user.target

编译安装amule非GUI小记

ed2k尽管是一种老旧的p2p下载方式,但其中确实包含着不少资源(尤其是小姐姐的电影),更是自带优秀的搜索引擎。但在中国非公网及恶劣的p2p环境下,资源传播速度非常有限。正好手上有台vps,经过仔细研究,成功完成了ed2k下载程序amule的server版编译安装及运行,现记录步骤如下:

依赖

过程

1、下载文件

2、安装wxWidgets-2.8.12

由于是已经配置好环境的vps,所以常见的编译环境都有,不需要特别配置

#解压文件
tar zxvf wxWidgets-2.8.12.tar.gz
#配置文件
cd wxWidgets-2.8.12
./configure --disable-gui --enable-unicode --without-subdirs --without-expat
#编译并安装(为了快速安装,采用了双进程编译,-j的参数设置为4会安装失败)
make -j 2
su root
make install && make clean
ldconfig

3、安装aMule-2.3.3.tar.gz

#解压文件
tar zxvf aMule-2.3.3.tar.gz
#配置文件(非GUI)
cd aMule-2.3.3
./configure --enable-amule-daemon --enable-amulecmd --enable-webserver--enable-optimize  --disable-monolithic --disable-monolithic
#编译并安装
make
su root
make install && make clean

4、配置amule

在第一次使用amule时应该对其进行配置:

#初始化amuled配置
amuled --ec-config 
获得ECPassword或者webSever的passowrd的md5值
echo -n yourpassword | md5sum
vim ~/.aMule/amule.conf

然后修改AcceptExternalConnections=1 ,在amule.conf文件中修改ECPassword的值为yourpassword的md5值。如果想启动webserver还应该修改Enabled=1,修改password为yourpassowrd的md5值

5、启动amule

amuled -f //以全后台方式启动amule主程序

成功,可以用远程客户端和你设置的密码yourpassword登陆amule了

目前存在的问题:缺乏开机启动脚本,需要额外配置

总结

总体来说,通过配置amule服务端,让我学会了linux简单编译安装,是一个巨大的提升,今后还要再次加油,提升自身技术水平,特此纪念

服务器启动出现问题

上周,在登陆网盘时突然发现连接不上,经过多方排查,发现是HostHatch后台出现了启动问题。差点以为数据要丢失了,结果是虚惊一场。但这也说明HostHatch的数据安全问题没有很好的保障,并且也不支持磁盘快照功能,不过这也是没有办法的事,毕竟是便宜的大盘鸡。只是今后要想个办法对我的数据进行自动备份。

VM reboot

Today, an issue had been remind that my VM had to perform an unscheduled reboot. To be honest I’m afraid something was wrong such as data error or loss. Lucky, everything is perfect.

In addition, using English to keep a log is my new aim to improve my English writing skill. I hope it would work.

网盘又复活了

经过宝塔面板的帮助,对比了seafile、owncloud以及nextcloud的部署方式,最终还是选择了owncloud的方案进行网盘部署。虽然因为owncloud过度商业化导致功能受到了一定的限制,其内置的php版本也不是最新,但是相比于其衍生品nextcloud,owncloud更加稳定。同seafile相比 ,owncloud基于php的部署方式轻量化且简单,且与宝塔面板高度契合,非常方便统一管理;而seafile基于java的结构,需要额外配置java环境,虽然可靠性更高,但与宝塔面板不是很兼容,且不易于维护(对java环境不了解),因此,最后选择了owncloud作为最终解决方案。

这次部署,有了宝塔面板的管理,免去了无数配置麻烦,可以说是十分轻松流畅,但是也不能忽视基础知识的学习,为今后维运经验的进步打下坚实的基础。

第二针新冠疫苗

第二针新冠疫苗于昨天正式接种,速度比第一针要快很多,与第一针接种完成后的发热相比,第二针几乎没什么特别的反应,可能回去后比较疲惫也算一种反应?总的来说,两次接种的体验非常不错,造成的疼痛小,反应轻微,与报道的国外疫苗相比,中国疫苗的安全性还是非常有保障的,再次感谢国家。这两次接种,全程没有收取任何费用,全部由国家负担,充分体现出我国社会主义制度的优势所在。

第一针新冠疫苗

今天打了第一针新冠疫苗,完全免费,感谢国家对国民的支持,从现在的反应来看,副作用也很小,感觉非常的满意,祖国强大就完事了。有点小感想,特别留下纪念,等第二针打完后还要再说一说。