重装VPS系统后要做的事

这个帖子记录了VPS重装后的配置过程。

添加用户

adduser me

为用户添加管理员权限

usermod -aG sudo me

sudo

如果在使用sudo的时候碰到以下警告:

sudo: unable to resolve host xxxx: No address associated with hostname

可以运行下列命令进行修复:

sudo sh -c 'echo 127.0.1.1 $(hostname) >> /etc/hosts'

设置防火墙

ubuntu 20.04可以用ufw来设置防火墙。应用在安装时会有对应的ufw profile,可以用下列命令来查看有哪些应用:

ufw app list

我们要确保防火墙允许SSH连接,这样下次用SSH登录时不会被拦截。可以用下列命令允许连接:

ufw allow OpenSSH

然后,我们可以启用防火墙:

ufw enable

敲入y和回车继续。可以用下列命令查看防火墙确实允许SSH连接:

ufw status

因为防火墙目前会阻止除SSH外的所有连接,如果安装配置了新的服务,就需要调整防火墙的设置以允许通过。可以查看这个UFW教程来学习一些基本的防火墙操作。

这一步结束后可以试试用刚才新建的帐号通过SSH来登录VPS,如果成功就可以开始安装需要的软件了。

安装Docker

第一步,先更新应用列表(因为是刚安装的全新系统,可以不进行系统升级,毕竟升级也会占用VPS有限的硬盘空间):

sudo apt update

接下来,安装一些可以让apt使用HTTPS的依赖包:

sudo apt install apt-transport-https ca-certificates curl software-properties-common

然后将Docker官方仓库的GPG密钥添加到系统:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

将Docker仓库添加到APT源:

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"

更新包数据库

sudo apt update

确保从Docker仓库而不是从默认的Ubuntu仓库下载

apt-cache policy docker-ce

你应该看到类似如下输出:

docker-ce:
  Installed: (none)
  Candidate: 5:19.03.9~3-0~ubuntu-focal
  Version table:
     5:19.03.9~3-0~ubuntu-focal 500
	500 https://download.docker.com/linux/ubuntu focal/stable amd64 Packages

最后,安装Docker:

sudo apt install docker-ce

检查docker daemon是否在运行:

sudo systemctl status docker

不用sudo,直接运行docker命令(可选)

将你的用户名添加到docker用户组:

sudo usermod -aG docker ${USER}

为了使其生效,可以注销或者运行下列命令:

su - ${USER}

输入密码继续。

确定用户有被添加到docker组:

id -nG

安装docker-compose

用下列命令安装,安装前注意查看最新版本,本文发布时的最新版本是1.27.4。

sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

然后,为docker-compose命令设置正确的权限:

sudo chmod +x /usr/local/bin/docker-compose

验证安装成功:

docker-compose --version

清理自定义emacs配置(一)

虽然emacs每天都在用,但是现在真的只是把它作为一个生产力工具了。很怀念过去折腾 emacs的时光,不是为了产出,只是因为兴趣和爱好 :joy:

于是产生了将过去的陈年配置重新整理的念头。这个念头一直萦绕在我的大脑,但是因为时间缘故不断推迟。最近借着重装系统的机会,想把自己的工作流重新梳理一下,顺便把那一团糟的emacs配置整理一下。想着每天做一点,看看能不能坚持下去。所以把这个分成几部分来做:

  • orgmode相关配置
    • 文学编程
    • 快速编辑(模板等)
    • WYSIWYG(行内图片,参考文献等)
    • 导出
    • 外观美化
    • 笔记
    • 收集
    • GTD
    • ……
  • 编程相关配置
    • Python
  • 其它

暂时想到这么多,后续应该还会补充和完善吧。其中用org做GTD可以说是我一直以来的夙愿,曾经攒过多套配置,但是最终都无果而终,感觉是天坑……

Orgmode

文学编程

Python

Nikola orgmode 图片显示

作为一个emacser,写博客不用orgmode怎么说得过去。Nikola自带orgmode插件,算是一个优点。但是有一个问题——在orgmode中显示得好好的行内图片,导出到博客就看不到了。这怎么能行,开始折腾!

设置org-download-image-dir

我使用org-download这个插件来向orgmode buffer中插入图片。所以,首先想到的是修改图片的保存路径,可以通过修改org-download-image-dir这个变量的值来实现。而且我想让修改对所有帖子都生效,可以通过设置dir-local变量来实现这一点。在posts/目录下添加文件.dir-locals.el,内容如下:

;;; Directory Local Variables
;;; For more information see (info "(emacs) Directory Variables")

((org-mode . ((org-download-image-dir . "../images"))))

这样,通过org-download插入的行内图片会自动放入/images目录下。Cool!但是导出成 html以后的路径并不正确,还需要以下步骤。

在导出时修改图片链接格式

因为nikola的orgmode插件实际上仍然是基于orgmode的html导出功能,所以我们在最后导出时修改图片链接为nikola orgmode插件的自定义链接格式即可。

;; fix image links in a nikola post
(defun my-fix-image-links (backend)
  (when (eq backend 'html)
    (save-excursion
      (goto-char (point-min))
      (while (search-forward-regexp "\\[\\[\\(?:file:\\)*\\.\\./images/" nil t)
	(replace-match "[[img-url:/images/"))
      ))
  )
(add-hook 'org-export-before-parsing-hook #'my-fix-image-links)

然后,将这段代码放入/plugins/orgmode/conf.el文件中。好了,试试看图片现在能不能显示(没错,其实就是想秀一下桌面 :grinning:)

nil

[Bonus] 修改图片存放位置

现在图片存放的路径看起来是这样的

../images/
└── zai_dao_chu_shi_xiu_gai_tu_pian_lu_jing
    └── 2020-12-12_17-39-08_screenshot.png

2 directories, 1 file

图片路径是这样的:../images/一级标题/图片文件.png,虽然并不影响使用,但是我想要把它改成这样的:../images/org文件名/一级标题/图片文件.png。可以通过advise org-download-dir-1这个函数来实现这一点。

(defun org-download--dir-1-advice (orig-func)
  (mapconcat 'identity
	     (list (or org-download-image-dir ".")
		   (file-name-sans-extension (file-name-nondirectory buffer-file-name)))
	     "/"))
(advice-add #'org-download--dir-1 :around #'org-download--dir-1-advice)

将这段代码也放入.dir-locals.el文件中,现在它看起来是这样的:

;;; Directory Local Variables
;;; For more information see (info "(emacs) Directory Variables")

((org-mode . ((eval . (progn
			(defun org-download--dir-1-advice (orig-func)
			  (mapconcat 'identity
				     (list
				      (or org-download-image-dir ".")
				      (file-name-sans-extension
				       (file-name-nondirectory buffer-file-name)))
				     "/"))
			(advice-add #'org-download--dir-1 :around #'org-download--dir-1-advice)))
	      (org-download-image-dir . "../images"))))

这样每次插入图片就会自动放到我想要的位置:

../images/
└── nikola-orgmode-tu-pian-xian-shi
    └── zai_dao_chu_shi_xiu_gai_tu_pian_lu_jing
	└── 2020-12-12_17-39-08_screenshot.png

2 directories, 1 file

重装系统后折腾输入法

因为厌倦了每两年一次的系统更新,最近将系统又从Debian系换回到了Arch系。使用了一个比较新的发行版Garuda Dragonized Edition。Arch系发行版装软件确实方便,最新的fcitx 中文输入法很容易就装上了。然后就碰到了新的问题:终端和Emacs中都不能使用fcitx输入法。

系统信息

发行版 Garuda Dragonized
桌面管理器 KDE plasma
shell fish
终端模拟器 konsole

终端不能输入中文的解决方案

.xprofile里(如果没有就新建一个)设置如下变量:

# locale
# export LC_CTYPE=zh_CN.UTF-8

# input method
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS=@im=fcitx

因为是默认使用的fish shell,所以好像在.bashrc里设置上述变量是无效的。开始的时候我也尝试过在fish的config里设置上述变量,也没有用。

Emacs中不能输入中文的解决方案(算是吧)

进行上述设置后依然不能在emacs中使用fcitx。在emacs-china上提问后有好心人建议安装 xorg-font-util这个包,尝试后发现依然不行。

最终决定放弃折腾,使用emacs-rime输入法。但神奇的是,emacs-rime输入法不能在vterm中使用,感觉这又是一个大坑……不打算跳坑,所以暂时先忍了:)