• 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.

  • Vite 配置解析别名

    就像 Webpack 那样,比如 @/ 表示源码根目录,这样对公共组件非常有用。 Vite 配置 使用 Vite 配置中的 resolve.alias 配置: import { defineConfig } from 'vite' import vue from '@vitejs/plugin-vue' import path from 'path' export default defineConfig({ plugins: [vue()], // Vue 的插件 resolve: { alias: { // 该文件就在项目根目录 __dirname 就是这个目录,.

  • Git 服务器,但对标 kernel.org

    Linux 内核官网 https://kernel.org 里头,Git 协议所给的链接打开以后是 cgit 生成的页面,这个没有难度。 然而亮点就在这个站点的每个仓库的克隆链接与 cgit 链接几乎相同。 browser: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/ clone https: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 感谢这篇文章的内容,给出了同时提供两种服务的 nginx 配置。

  • 在 Arch Linux 中手动构建 chroot jail

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

  • 创建不使用任何框架的 Vite 项目

    Vite 是下一代基于 ESM 的前端工具,提供代码打包,搭建开发服务器,热重载,项目生成等功能。 官方以及第三方的脚手架中,或多或少使用了框架,但是为了学习前端基础本身,编写小型原型,创建不使用框架的项目也许会有帮助。我们的项目也许会足够小,不被框架本身所打扰太多。 npm 部分 创建项目,初始化 npm 包 创建一个空文件夹,cd 进去,使用 npm 初始化包。 $ npm init .

  • Grub 初探

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

  • 可执行代码加载到内存并执行

    比如咱们刚学了 boot0 这种 freestanding binary object 怎么生成,于是之前的 mmap & call 程序就可以用这个手法,而不是手动从 elf 格式里头扣 payload: payload.c ${CC} -ffreestanding -nostdinc -nostdlib -Wl,--oformat,binary -Wl,--no-dynamic-linker $< -o $@ echo "generate payload" && xxd $@ .