Skip to content

使用syspatch为OpenBSD打补丁

从6.1版开始,OpenBSD支持使用二进制文件为系统打补丁,结束了每个补丁要用户自己下载源文件并编译、安装的历史,就像现在所有Linux发行版一样。也算是补上了一个短板。

Read more

如何把一个软件移植到OpenBSD上

这是一篇根据此文意译的文章, 我只翻译了自己认为重要的东西。作者以自己移植python的dnslib库到OpenBSD的过程来描述移植的过程。作者为Bryan Everly。此译文发表时文章发布的原域名过期,无法访问。   事前准备 找到你想移植的软件 准备好承担做一个维护者的责任 和软件的开发者/团队协作,而不是为软件加几个补丁,让它在OB上能编译通过 你很可能没有权限把软件添加到ports中,请和ports邮件列表中的人合作 先读文档,再问问题 OpenBSD ports树传统 软件按类别放在/usr/ports目录下,如开发工具放在/usr/ports/devel,数据库软件放在/usr/ports/database等等 软件源码并不放在/usr/ports的任何目录下,而是在编译时从它的官网下载到/usr/ports/distfiles/PORT-v.v.v子目录下 实际编译时的工作目录在/usr/ports/pobj/PORT-v.v.v下 某个软件的ports包含如下标准的文件: Makefile — 包含编译指令 distinfo — 包含指定软件的验证信息,如tar包的SHA1/SHA256摘要信息 pkg — 子目录 pkg/DESCR — 关于此软件的简短描述,请保持列宽为72 pkg/PLIST — 由此ports编译成的软件包(package)的manifest文件 patches — 子目录,包含要为此软件的源码打的补丁包 大部分ports的Makefile的结尾会包含一个名为bsd.port.mk的文件。这个文件用于告诉ports如何利用OpenBSD现有的ports编译的基础架构。 以移植python库dnslib为例,在/usr/ports/net目录下新建一个文件夹py-dnslib,因为一个跟网络相关的工具,也是python的库文件,所以以py-开头。 接下来要创建Makefile.

第一行是注释,简短描述这个port的功能。 接下来的部分是版本号,要下载的源码包的名称,编译好的软件包的名称,最后是此软件在ports中的类别。…

Read more

OpenBSD上doas用法简介

doas是OpenBSD 5.8上开始出现的一个程序,用来代替sudo。相比sudo,它的好处是配置简单明了。坏处嘛我还不知道,估计功能上没有sudo那么全面吧。因为我都是用sudo的一些基本功能(指定那些用户可以切换到root),所以对sudo的优势了解并不全面。另外就是,doas的配置完全不兼容sudo,且目前只有OpenBSD上才有。 doas的配置文件是/etc/doas.conf,配置规则如下

一个规则以permit(允许)或deny(拒绝)开头,  接下来是一些选项(options,非必须),然后是配置的用户名或用户组(identity部分),再接下来是这个用户(identity部分)可以(或不允许)以哪个用户(target)的身份来执行命令,用as关键词来表示。这也是可选的。如果省略,表示这个用户(identity)可以以任意用户的身份执行后面cmd关键词指定的命令;   cmd关键词用来指定允许(或拒绝)的命令,args关键词用来指定命令的参数; cmd 和args都是可选的。省略的话表示任意命令和参数。 选项(options)部分有一下两个选择: a. nopass , 表示用户无需输入密码 b. keepenv  { [ variables … ] },表示用户的使用环境将会被保持,如果不指定的话,默认是会重置的(除了这些变量: DISPLAY, HOME, LOGNAME, MAIL, PATH, TERM, USER and USERNAME.)。keepenv还可以指定具体那些变量被保持。将需要保持的变量名称放在大括号中,多个时以空格分开。 组以冒号加上组名称来表示,如 :wheel。 注释以#开始,直至该行结束。   下面再以示例来说明一下。 比如我们常用的让一个用户(如acheng)切换到root而无需知道root密码的配置:

这个规则让acheng用户可以以root身份执行任何命令,包括…

Read more

OpenBSD上的服务管理程序rcctl

rcctl 是OpenBSD系统上的后台进程(daemon)管理程序,功能上类似于以前redhat Linux上的chkconfig或新版中的systemctl。 它其实是一个shell脚本程序,最早见于OpenBSD 5.7。需要有root权限才可以使用。 它的原理主要是通过在/etc/rc.conf.local文件中设置相应进程的配置来完成。被管理的进程需要在/etc/rc.d/目录下有相应的控制脚本文件。 主要功能及示例 (下面的内容主要是根据rcctl的man手册翻译而来,我再加上一些范例。愿意的朋友可以自己阅读man手册) 启用或禁用后台进程(包括系统自带进程如httpd以及通过软件包安装的进程如mysqld/nginx等,下同)

启动或停止后台进程

也可以根据需要传入 -d (开启debug)或 -f (强制)参数 列出进程相关的参数

列出进程默认参数

如果你没修改过默认参数,那么它和get子命令的输出应该是相同的 列出符合特定条件的进程 rcctl ls $con 列出符合条件的进程。这里的条件不可以自定义,只可以从下面几个关键词选择: all      all services and daemons  ## 所有的服务和进程 faulty   enabled but stopped daemons ##…

Read more

更改键盘映射

我的Thinkpad X20E的回车键坏掉了,但是手头很紧,不想换键盘,而且也不常用,干脆就把回车键映射到其它的键上吧。 考虑了一番,大写键(CapsLock)就是这次的牺牲品了。 当然,目前这台计算机运行的(还)是DragonFlyBSD 4.2。 下面要开始实施计划。当然,你还需要一个外接的键盘。 由于控制台(console)界面下和X(图形界面)下键映射的负责程序不同,需要分别来做。 1. 命令行下 根据网络搜索结果和命令手册,命令行下键的映射由kbdcontrol程序来控制。 首先,导出目前键盘映射表到一个文件(需要在控制台界面下操作,SSH不行(?)):

然后编辑此文件。我的键盘映射表中,大写键编码为058 (找文件的2-8列中clock对应的编码)。 然后将058那一行的第二列的clock改为cr(Carriage Return)。参看下面我修改过的文件。 第一个带有#的058的行是kbdcontrol命令导出的数据,被我注释掉了。

  有了这个文件之后,可以用kbdcontrol命令重新导入:

现在可以试试大写键是否可以当回车来用了。 由于我需要开机后登录前就需要新的映射生效,因此在/etc/rc.conf文件中加入下面一行: keymap=”/root/no_enter.map” 这样以后开机新映射就自动生效了。 2. X环境下的修改 X环境下键的映射可由xmodmap命令完成。可以将下面一行加入到自己的.profile文件中:

其中的”keycode 66″就是原来的大写键的代码。如果你不确定这个代码的话,可以运行xev命令来查看。 此命令对xterm有效(没测试过其它X下的程序)。

Read more

OpenBSD上安装Fish Shell

无意中发现了Fish Shell,对我来说是个全新的东东,也有很多看起来不错的特性。决定试一下。 不过OpenBSD上没有fish shell的软件包,需要自己编译。幸好编译的过程还算简单顺利。 先安装需要的工具:

安装autoconf的时候要选择2.60或更高的版本。 然后根据autoconf的版本设置变量AUTOCONF_VERSION:

接下来下载fish shell的源码包。我选择到github上下载。fishshell.com上应该也有,但是我打不开。 https://github.com/fish-shell/fish-shell/archive/master.zip 然后解压。我用的是7z (7zip):

解压后得到一个fish-shell-master文件夹。接下来编译。

一切顺利的话,运行fish命令即可进入fish shell 至于fish shell的配置、特性等等,后面的博客中我们再聊(我也还没看完文档呢)

Read more

使用scrot命令行工具抓屏

scrot是一个X环境下的命令行抓屏工具。注意是X环境,只开个终端是不行的。在OpenBSD上需要另外安装:

scrot的常见用法是:

其中”-c”用于显示倒计时,”-d”用于设定延迟的秒数。最后screen.png是保存截屏要有的文件名。

Read more
Sidebar