解决ArchLinux以DHCP联网失败的问题

昨天在一台新的计算机上安装Arch时发现没有办法联网。这台电脑是以有线方式连接的,网络有MAC地址控制。安装之前确定了Windows和Ubuntu的LiveCD都能正常联网。

Arch的LiveCD里是通过dhcpcd来进行自动IP获取的,它是base里的软件,所以也会在安装完后的系统里。发现无法联网后,我查看了dhcpcd的启动状态

systemctl status dhcpcd@[interface].service

发现它在soliciting a DHCP lease这里就显示timeout了。经过搜索后了解到dhcpcd是默认通过DHCP Unique Identifier (DUID)来进行标识的,而我所在的网络是带MAC控制的,很可能不认DUID。这个问题在Arch的wiki中也进行了说明,需要更改dhcpcd的配置文件/etc/dhcpcd.conf,将duid改为clientid,然后重启服务

systemctl restart dhcpcd@[interface].service

然而安装完毕后,dhcpcd经过上述修改后是可以的,但是Network Manager依然不工作。到最后发现是Network Manager已经不支持dhcpcd了,而dhclient默认没有安装 (why!?)。所以只需要安装上dhclient,

sudo pacman -S dhclient

然后重启Network Manager

sudo systemctl restart NetworkManager

[UPDATE]

今天Arch更新后又连不上网了…查了后发现竟然默认使用NetworkManager内置的dhcp了,但这个内置的显然不行。只好更改 /etc/NetworkManager/NetworkManager.conf 这个配置文件,增加

[main]
dhcp = dhclient

的选项,然后再重启服务

sudo systemctl restart NetworkManager

我想说你内置的功能不强就不要默认么,没有金刚钻揽什么瓷器活啊!

制作BIOS和EFI多启动U盘

以前做了一个能以BIOS和EFI两种形式启动多个Linux ISO的U盘,同时还能倒腾数据,可惜前几天调整分区时把启动破坏了。现在重新弄好之后,决定记录一下过程。主要参考Archwiki: https://wiki.archlinux.org/index.php/Multiboot_USB_drive

准备分区

U盘使用的是MBR分区表(GPT应该也行),并分为两个区:

  • 第一分区:FAT32格式,作为引导分区/EFI分区,大小以100MB为宜。
  • 第二分区:EXT4或其他你喜欢的格式,存放ISO和其他文件。

安装引导

启动引导使用GRUB,并假设第一分区是/dev/sdb1。先挂载分区

sudo mount /dev/sdb1 /mnt

然后安装BIOS引导

sudo grub-install --target=i386-pc --boot-directory=/mnt/boot --recheck /dev/sdb

再安装EFI引导

sudo grub-install --target=x86_64-efi --efi-directory=/mnt --boot-directory=/mnt/boot --removable --recheck

配置引导

假设其他文件都存放于第二分区(/dev/sdb2),并包含以下目录/文件

-- slax/
-- images/archlinux.iso
-- images/ubuntu-gnome.iso

则建立/mnt/boot/grub/grub.cfg文件,并写入以下内容

insmod search_fs_uuid
set rootuuid=[第二分区的UUID]
set rootpath=/dev/disk/by-uuid/$rootuuid
search --no-floppy --set=rootpart --fs-uuid $rootuuid

insmod vbe
insmod efi_gop
insmod efi_uga
insmod font
if loadfont ${prefix}/fonts/unicode.pf2
then
    insmod gfxterm
    set gfxmode=auto
    set gfxpayload=keep
    terminal_output gfxterm
fi

menuentry 'Slax' {
    set syspath=/slax
    set root=$rootpart
    linux $syspath/boot/vmlinuz from=$syspath vga=normal load_ramdisk=1 prompt_ramdisk=0 printk.time=0 slax.flags=perch,xmode
    initrd $syspath/boot/initrfs.img
}

menuentry '[LiveCD] Archlinux' {
    set isopath=/images/archlinux.iso
    loopback loop ($rootpart)$isopath
    linux (loop)/arch/boot/x86_64/vmlinuz archisodevice=/dev/loop0 img_dev=$rootpath img_loop=$isopath
    initrd (loop)/arch/boot/x86_64/archiso.img
}

menuentry '[LiveCD] Ubuntu (GNOME)' {
    set isopath='/images/ubuntu-gnome.iso'
    loopback loop ($rootpart)$isopath
    linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=$isopath locale=zh_CN.UTF-8
    initrd (loop)/casper/initrd.lz
}

其中[第二分区的UUID]可以通过以下命令获取:

sudo blkid /dev/sdb2

其它ISO的启动可以参考Archwiki中给出的例子。

在Archlinux上安装Anbox

听说最近出了一个软件anbox,可以在Linux上原生运行Andriod程序,于是迫不及待想试一试。AUR已经有人打了包,所以装起来还算方便,只是系统镜像有点大,以及要编译的包稍微有点多。安装方法主要来自artex-files在GitHub上的评论

先安装所有需要的软件包 (anbox-image要单独先装,不然一直显示'cannot resolve anbox-image')

yaourt -S linux-headers dkms anbox-image
yaourt -S anbox-modules-dkms-git anbox-git

然后加载所需要的内核模块

sudo modprobe binder_linux
sudo modprobe ashmem_linux

再启动相关服务 (这里用start,如果你想开机自启可以再enable)

sudo systemctl start anbox-container-manager.service
systemctl --user start anbox-session-manager.service

最后在菜单中寻找anbox即可打开APP管理器。内置的一些程序如日历、设置等也会显示在菜单中,可以直接打开。目前内置程序还没有Google Play等,只能用ADB安装。

如果anbox还是不能运行,可以试试重启 (?),以及试试用下面这句启动session-manager

anbox session-manager --gles-driver=host

我的台式机上不需要上述操作,但笔记本需要,可能和显卡有关。如果还有其它问题,可以看看AUR里和GitHub上的一些评论:

https://aur.archlinux.org/pkgbase/anbox-git/?comments=all

https://github.com/anbox/anbox/issues/3

支撑这个博客八年的Dokuwiki

不知不觉已经用Dokuwiki写了八年的博客。最初的博客软件并没有太多选择,能符合我期望的轻量级、维基语法、访问权限控制的几乎只有Dokuwiki

最初的几年

最初用Dokuwiki写博客并不是一件简单的事。

当时的Dokuwiki有着一个并不算美观的默认主题,其它主题中适合博客的也是少之又少。它作为维基本身也不支持博客功能,需要通过一系列插件来辅助,而折腾这些插件的各种配置也是一件麻烦事。

我是参照一个中文独立博客上的文章把博客建立起来的,后来一次去看时,那个博客已换到了WordPress。

发展的几年

Dokuwiki作为博客的能力在随后几年得到了一定提升。

2012年的新默认主题能够自适应屏幕,美观,且只需稍作修改就能适应博客的需求。同时新的BlogTNG插件提供了整体的博客解决方案,不用再折腾一个个独立的插件。Dokuwiki自身也有很多进步,比如更方便的多媒体管理等。

那个时候我很快就对网站进行了更新,还写了关于用BlogTNG写博客的一系列文章。不过好景不长,BlogTNG这个“下一代博客引擎”没多久就停止开发了。

自给自足

BlogTNG停止后,我不想再因为插件的问题迁移来迁移去,于是按照最基本的功能需求写了Miniblog插件,新插件的配置和使用是极其简单的。

2015年Dokuwiki又推出了改自WordPress主题的Writr,更加美观好用。但Writr是整体偏左右侧大量留白的,在大屏幕上不好受,所以这几天我从WordPress改了Twenty Fifteen来用。

新的趋势 ?

随着Markdown不断兴起,各种用更轻量级的博客软件也不断出现,比如著名的Jekyll。用WordPress的都越来越少,更何况Dokuwiki,但我并没有切换的打算。一是这些软件在功能上不能满足我的要求,二是我不喜欢Markdown。

其实前几天我还看了一个新的纯文本CMS——Grav,感觉非常不错,差点都要叛变了。但实际使用后发现它要求每篇文章都要放到单独的文件夹里,并且文件名是你要用的模板名字而不是文章标题等。比如你要写一个题为“about”的博文,在Grav里就是这样的

01.something/
    item.md

不知道你是什么感觉,反正我是觉得简直不能再丑了,想象一下一大堆只包含单个文件的文件夹放在你面前的感觉…

看来Dokuwiki还会陪伴我很长时间。

改自WordPress Twenty Fifteen的新主题

之前的Writr虽然是个不错的主题,但用的时间也有点久了,而且是左对齐的,在大屏幕上总要斜到一侧看,于是打算从WordPress的主题里改一个新主题出来,最终就选择了Twenty Fifteen。

但由于Dokuwiki和WordPress的机制有些差异,有些地方难以做到完全一致,不过目前的效果还是我比较满意的。新主题的代码地址如下:

https://github.com/lainme/dokuwiki-theme-twentyfifteen

默认情况下,文章是没有底部信息的(如发布时间、作者、评论数),并且文章列表是显示在同一个白色区块内的,而不是像原主题那样每篇一个白色区块。如果想要和原主题更像,需要在所用的博客插件上作出一定的修改。

如果你用的是miniblog插件,直接用

<miniblog twentyfifteen>

替换原来的文章列表显示就可以了。

如果用的是别的博客插件,可以参考主题的README对插件进行相应的修改。