Linux

编译 linux 内核相关的问题

在 Arch Linux 上,编译 Linux 内核需要依赖两个默认没有提供的工具: bc: An aribitrary precision calculator language (https://www.gnu.org/software/bc/) cpio: A tool to copy files into or out of a cpio or tar archive (https://www.

Blackarch 脚本两则

sysclean.sh - 清理系统 #!/bin/sh # 清理孤包 # pacman -Rscn # -R 删除 # -s 包括目标包的依赖 # -c 包括依赖目标包的包 # -n 忽略文件备份 # -Q 查询 # -t 查询孤包 不再被依赖或可选依赖的包 # -d 查询作为依赖安装的包 # -q 只打印包名(对脚本很有用) pacman -Rscn $(pacman -Qtdq) # 更新源文件 (extra/pkgfile包的 pkgfile) pkgfile -u # 更新 mlocate 数据库 (core/mlocate 包) updatedb pacman-db-upgrade # 清理包缓存 两个 -c 清理缓存中所有文件 yes | pacman -Scc # 同步缓存的写入到持久性存储中 sync tuning.

内核事件通知机制

当进程持有充分大数量的资源时,如何跟踪资源的状态变成了问题,与其挨个轮询,不妨换一种思路,让内核通知我们。 比如在网络编程的条件下,我们可能会同时处理多种连接,可以使用这种接口让内核通知我们哪些套接字可以读写,传入连接等。 在 FreeBSD 中,使用 kqueue() 相关设施提供事件通知机制。 在 Linux 中,使用 epoll() 相关设施提供事件通知机制。 kqueue kqueue() 需要用到的头文件是:

su 以其他用户启动程序,但账号不可用

本文章假设以超级用户 root 发起操作 Phabricator 中,守护程序 ./bin/phd 需要以 daemon-user 启动,在 Debian 中该用户名为 daemon。 所以如果不想给该守护进程默认的 root 权限,需要以 daemon 身份启动该程序。 (因为 daemon 的 sudoers 配都配了)

docker-compose 中让容器依赖与实际服务是否可用

Phabricator 是一组开发软件用的工具。它包括了代码审查(code review),仓库托管(repository hosting),漏洞追踪(bug tracking),项目管理(project management)等工具。 其中 Phabricator 包含了一个守护进程,为了将其装进 docker 容器中,我是用 ENTRYPOINT 脚本在容器启动时,容器进程启动前来启动守护进程。 下头的是:该守护进程会在连接数据库失败后立即退出,并且普通的 docker-compose 的 depends_on 声明对其没有效果,主要是数据库容器启动后需要一段时间。

简单使用 frp

frp 是一个专注于内网穿透的高性能的反向代理引用。 它最常见的使用场景是:由于众所周知的原因,云服务器上访问某些服务速度感人,让服务器流量走本地机器。 以及,让云服务器做出口对外服务,配合搭建混合云,让一些信息的储存和计算发生在本地。 这里给出最简单的一个常见的配置:向服务器暴露本地机器的服务。 这里使用本地端口 5000 做示例,在服务器上暴露为相同的 5000 端口。 服务器的配置如下: [common] bind_port = 7000 ; frp 服务端口 ; 同时要配置网络防火墙(服务器安全组),使得该端口对外可见 token = xxx ; 令牌,用作简单的身份认证 ; 可以使用 python 标准库 secrets 生成: ; import secrets ; secrets.

编写 systemd service 单元文件

要使用 systemd 管理自定义的服务,需要编写单元文件。 对于一般的服务来说,使用 .serivce 的服务单元即可。 将文件放置于 /etc/systemd/system,符号链接也行,但是需要读取权限(不太清楚)。 每次修改单元文件记得使用 systemctl daemon-reload 重新加载单元文件。 模板 对于普通的服务,使用这样的模板: [Unit] Description=这里填写服务说明 After=network.

在 Arch Linux 中手动构建 chroot jail

建立 chroot 目录,下面称之为 $root mkdir $root 建立 pacman 需要的 /var/lib/pacman 目录 mkdir -p $root/var/lib/pacman 安装 bash 和基本工具 coreutils

Grub 初探

grub 的命令行显得些许神秘,但是在勇气和机缘巧合下,我了解到了一些基本操作。 文件系统相关 在鼓起勇气粗略阅读 grub 文档后,找到了如何列出设备,浏览文件系统。 grub 的设备记法是使用圆括号包裹的字符串,例如我的 arch 的 /boot/grub/grub.cfg 中将 root 设置为 hd0,msdos1,然后这么引用:($root)/usr/share/grub/themes/xxx/theme.txt。

lldb 入门

命令结构 lldb 的命令不像 gdb 那么自由,而是比较结构化。 命令结构的形式是: <名词> <动词> [-选项 [选项值]] [参数...] 让 lldb 启动进程后停在入口点(是程序镜像的入口点,不是 C 语言的入口点 main。linux 中,可执行文件格式 elf 中 elf 头有一个项目叫入口点,一般进入 C 语言运行时,再调用 C 语言的 main 函数),并且向程序传递参数 argv0 argv1

记录一次 Linux 启动盘备份 Windows 文件

起因 昨晚(2月28日凌晨),我安装了 20H2 质量更新,于是和往常一样选择 更新并关机。只不过这次更新十分缓慢,我在一旁刷了至少 10 分钟的抖音,仍然不见电脑断电。于是,我做出了令我后悔的降智操作:长按电源键 5 秒,松开按键的那一刻就如同拔掉电源一样。保险起见我打算再开机看一下有没有问题。结果不负众望,系统挂了。 忘了 VIRTIO_忘了 Wal00000.sys (记错警告) 尝试修复 自带的诊断 根本不用动,就自己重启,自己诊断。然后无法解决。