制作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上的一些评论:
支撑这个博客八年的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对插件进行相应的修改。
修复PHP错误:There is no suitable CSPRNG installed on your system
前段时间Dokuwiki更新后无法显示页面,在php.ini里打开PHP错误信息显示后“There is no suitable CSPRNG installed on your system”。
搜索后发现是random_compat进行了更新,移除了openssl_random_pseudo_bytes()函数,目前需要使用/dev/urandom。详情参见https://github.com/paragonie/random_compat/releases/tag/v1.3.0。
目前的解决方法是将/dev/urandom增加到PHP的open_basedir路径中。