ArchLinux 部署 SSD 缓存

在 Linux 系统上使用带宽更高、延迟更小的 SSD 作为 HDD 的缓存来打造软件实现的“混合硬盘”是一种容量和性能折中的方案。在 Linux 系统中使用高速外存作低速外存的缓存有两个成熟的方案:1. lvmcache 2. bcache。本文记录的是基于 lvmcache 在 Arch Linux 系统上的部署方法。

硬件情况
1. 一块120GB容量的固态硬盘 (/dev/sda)。
2. 一块1TB容量的机械硬盘 (/dev/sdb)。

分区规划

/dev/sda1     20GB     lvm
/dev/sda2     100GB    lvm
/dev/sdb      1TB      lvm

LVM 规划

VG (system) -> { PV (/dev/sda1) }
VG (data) -> { PV (/dev/sdb), PV (/dev/sda2) }
 
LV (system/arch) 19.9GB
LV (data/home) 917GB
LV (data/home_cache) 91GB

操作系统完全安装在 SSD 中, home 存放于 HDD 中,但使用 SSD 的剩余空间作为 cache。为什么不把所有数据存放于 HDD 中,仅用 SSD 作为 cache 呢?测试结果是当 cache 加入后就影响了系统的启动,所有只能应用于数据区。

详细步骤
1. 使用 ArchLinux iso 启动盘启动系统。
2. fdisk /dev/sda 先创建一个类型为 lvm 容量为 20GB 的标准主分区,再创建一个类型为 lvm 容量为 100GB 的标准主分区。
3. pvcreate /dev/sda1
4. pvcreate /dev/sda2
5. pvcreate /dev/sdb
6. vgcreate system /dev/sda1
7. vgcreate data /dev/sdb
8. lvcreate -L 19.9G system -n arch
9. mkfs.ext4 -E discard /dev/mapper/system-arch
10. mount /dev/mapper/system-arch /mnt
11. pacstrap /mnt 按照需要安装系统
12. arch-chroot /mnt
13. lvcreate –type cache –cachemode wirteback -L 91G -n home_cache data/home /dev/sda2
14. 另开一个 tty, mount -o bind /run /mnt/run
15. 回到原 tty, vim /etc/mkinitcpio.conf,找到 HOOkS,在 block 和 filesystem 之间增加个 lvm2
16. mkinitcpio -p linux
17. vim /etc/default/grub,找到 GRUB_PRELOAD_MODULES,增加 lvm。
18. grub-mkconfig -o /boot/grub/grub.cfg
19. grub-install /dev/sda
20. 退出,重启。

查看 cache 状态

sudo lvs -o cache_read_hits,cache_read_misses,cache_write_hits,cache_write_misses data/home

Over!

Fix backlight problem in Arch Linux

Sometimes, ACPI does not work well due to different motherboard implementations and ACPI quirks. This includes some laptops with dual graphics (e.g. Nvidia/Radeon dedicated GPU with Intel/AMD integrated GPU) – some examples of laptops with these problems are Dell Studio, Dell XPS 14/15/17 and some Lenovo series’ laptops. Kamal Mostafa, a kernel developer made patches for solving this problem – these are included after Linux 3.1 . Additionally, on Nvidia-optimus laptops, the kernel parameter nomodeset can interfere with the ability to adjust the backlight. You can try adding the following kernel parameters in your bootloader(grub, syslinux…) to adjust ACPI model:

video.use_native_backlight=1

Note: This kernel setting was added in Linux 3.13.

From: https://wiki.archlinux.org/index.php/backlight
Over!

Linux 系统使用 Sierra Wireless MC7750 连接 EVDO

最近买了一部联想的 ThinkPad T430s,之所以买它,很大的一个原因是它可以安装内置的移动网络数据模块,但是该死的联想公司竟然在 BIOS 中限制用户自由选择硬件模块(真想 FUCK 它),导致手头上现有的华为 EM660 不能用,额外花了 ¥600 买了一个 Sierra Wireless MC7750。

Sierra Wireless MC7750 支持 GSM/EGDE/UMTS/HSDAP CDMA/1X/EVDO LTE 等网络制式,在 Arch Linux 系统中使用 NetworkManager + ModemManager 连接 EVDO 可以获得 IP 地址(wwan0 网络接口),但 ping 任何一个外网 IP 地址都是 Timeout。经过分析后发现在 Linux (kernel 3.x) 系统中将会使用 qcserial 和 qmi-wwan 驱动。而应用程序 ModemManager (0.7.99) 默认的行为是在有 QMI 的情况下优化使用。但 QMI 接口可能是内核中还存在着 Bug 吧?只能使用传统的 PPP 模式。

详细配置
1. 禁用 qmi-wwan 驱动

echo "blacklist qmi-wwan" | sudo tee /etc/modprobe.d/qmi-wwan.conf

2. 配置 NetworkManager 网络连接
Number: #777
Username: ctnet@mycdma.cn
Password: vnet.mobi
Authication method: PAP

至此,就可以直接使用 NetworkManager 连接 EVDO 啦。

Over!

Raspberry Pi 平台最合适的 GStreamer VideoSink

受到 Wayland 的影响,想当然的认为 waylandsink 应该是不错的 Videosink,事实并非如此呀,或许我真是个笨蛋,使用仅支持 BGRA 的 waylandsink 输出 I420 格式视频,CS 转换是 Rpi 所承受不了的。

更好的选择应该是 eglglessink,目前官方的源代码中就已经包含了对 Rpi 窗口系统的支持,编译启用后测试下地效果是很好的。看上去它是使用 Overlay 实现,默认使用当前的 dispmanx display,在 Wayland 桌面上运行看不到任何输出,要到 FrameBuffer 上运行可见到全屏的视频图像输出。不知道它是否支持设置 Window handle,晚上再写个程序测试一下吧。

Over!

Running GStreamer on Raspberry Pi

在 Raspberry Pi 上已经有很多的多媒体应用程序可以使用了,如 omxplayer, xbmc 等,但我想用 GStreamer 1.0 和 Wayland。

IMAG0061

在 Arch Linux ARM 的源中 GStreamer 1.0 的相关包 gstreamer, gst-plugins-base, gst-plugins-good, gst-plugins-bad, gst-plugins-ugly 等都可以用了,但他们还依赖于 X11,虽然我是想只使用 Wayland 啦,所以就重新编译去掉这些我不需要的依赖吧。

目前先把 GStreamer 1.0 和 Pulseaudio 及 Wayland 整合起来,并能正常运行,下一步就是 GstOMX 啦,初步看了一下 Raspberry Pi 的 OpenMax 实现中包含了 Audio 和 Video Sinks,不知道我使用 GStreamer 的 pulsesink 和 waylandsink 的效果会怎么样?先试试吧。

步骤
1. pango
2. pulseaudio
3. gst-plugins-base
4. gst-plugins-good
5. gst-plugins-bad
6. gst-plugins-ugly

1. pango
pango 除去了对 X11 的依赖。
源码包:pango-1.34.0-1.src.tar.gz

2. pulseaudio
pulseaudio 除去了对 X11 的依赖。
源码包:pulseaudio-3.0-3.src.tar.gz

3. gst-plugins-base
gst-plugins-base 除去了对 X11 的依赖。
源码包:gst-plugins-base-1.0.6-2.src.tar.gz

4. gst-plugins-good
gst-plugins-good 除去了对 X11 的依赖。
源码包:gst-plugins-good-1.0.6-2.src.tar.gz

5. gst-plugins-bad
gst-plugins-bad 除去了对 X11 的依赖,编入了 eglglessink (for rpi)
源码包:gst-plugins-bad-1.0.6-3.src.tar.gz

6. gst-plugins-ugly
gst-plugins-ugly 可直接从官方源安装。

例子
1. 音频回放测试

gst-launch-1.0 audiotestsrc ! pulsesink

2. 视频回放测试

gst-launch-1.0 videotestsrc ! waylandsink

Over!

Running Wayland (Weston) on Raspberry Pi

在 Raspberry Pi 上编译与运行 Wayland (Weston Compositor),此为不依赖于 X11 的版本,所有与 X11 相关的依赖我都移除了,我只想跑个 Wayland Compositor,再跑个 GStreamer 1.0 就足够啦。

IMAG0060

环境
1. Raspberry Pi B
2. ArchLinux ARM (Base system & Compile toolchains (clang 3.2))

步骤
1. raspberrypi-firmware-pkgconfig
2. cairo (with glesv2 & openvg)
3. wayland
4. xkeyboard-config
5. weston

1. raspberrypi-firmware-pkgconfig
raspberrypi-firmware-pkgconfig 是 raspberrypi-firmware-tools 包的扩展,包含了 raspberrypi-firmware-tools 中库的 pkg-config 配置文件,后面的 cairo 与 weston 等程序编译将会依赖。
源码包:raspberrypi-firmware-pkgconfig-0.1-1.src.tar.gz

2. cairo (with glesv2 & openvg)
cairo (with glesv2) 为 weston compositor 的依赖,用于 2D 图形的渲染,需要关闭 GL 并打开 OpenGL ES v2 与 OpenVG 的支持。
源码包:cairo-1.12.14-4.src.tar.gz

3. wayland
Wayland 协议库,升级了基础协议。
源码包:wayland-1.0.90-1.src.tar.gz

4. xkeyboard-config
xkeyboard-config 提供了 xkb 的一切配置文件,weston 将会依赖,去除了对 libx11 的依赖等。
源码包:xkeyboard-config-2.8-1.src.tar.gz

5. weston
weston compositor 关闭了 x11, drm, fbdev, wayland 等 backend 支持,启用 raspberry pi 的 backend,并设置为默认。
源码包:weston-1.0.90-3.src.tar.gz

Over!

启用 ArchLinux 中 GNOME 3.6 的 IBus 集成

出于很多脑C的考虑,ArchLinux 系统集成开发者将 GNOME 3.6 的 IBus 集成给默认关闭了,导致很多使用 IBus 输入法框架的用户处在痛苦之中,更有脑C的人给出两种更脑C的建议,要么换输入法,要么就别用 GNOME 了,否则看上去好像这个问题就无解了!

不管这些人出于什么样的目的,诱导用户向错误的方向前进。作为 GNOME 和 IBus 的用户,有责任给出简单的解决方式:重新编译 gnome-settings-daemon,首先创建一个编译目录 gnome-settings-daemon,然后从 archlinux 的 git 仓库下载到 PKGBUILD 等文件,再去除 PKGBUILD 的 –disable-ibus,最后 makepkg 重新编译、打包并安装。

Over!

GNOME 3.6 不能使用 IBus 的中文输入引擎

今天正式升级到了 GNOME 3.6, Arch 的进度还是比较慢的。一直在使用的郑码输入法今天遇到问题了,死活调用不出来。

在几经查找定位过后,总结问题如下:
1. 当前的 ibus 编译中没有启用对 python 的支持,而 ibus-table 是依赖它的。
2. 自 GNOME 3.6 开始 gnome-shell 实现了 ibus 输入法框架的 UI,在 input sources 里可以指定输入法引擎,但在 Arch 中的默认配置并不是列出所有的输入法引擎的,郑码引擎就没有列出。

修复方法:
1. 重新编译 ibus 输入法,增加参数 –enable-python-library。
2. 执行命令 dconf write /org/gnome/desktop/input-sources/show-all-sources true

Over!

Arch Linux 使用 systemd

systemd? 不多说,最近它和 udev 玩的好。

安装

sudo pacman -S systemd systemd-sysvcompat systemd-arch-units

增加内核参数 init=/bin/systemd 至 /boot/grub/menu.lst

# (0) Arch Linux
title  Arch Linux
root   (hd0,0)
kernel /boot/vmlinuz26 root=/dev/sda1 init=/bin/systemd ro quiet
initrd /boot/kernel26.img
 
# (1) Arch Linux
title  Arch Linux Fallback
root   (hd0,0)
kernel /boot/vmlinuz26 root=/dev/sda1 init=/bin/systemd ro quiet
initrd /boot/kernel26-fallback.img

配置
主机名称 : /etc/hostname

myhostname

虚拟控制台字体与键盘映射表 : /etc/vconsole.conf

KEYMAP=us
FONT=lat9w-16
FONT_MAP=8859-1_to_uni

语言环境 : /etc/locale.conf

LANG=en_US.UTF-8
LC_COLLATE=C

时区 : /etc/timezone

Asia/Shanghai

自动加载内核模块 : /etc/modules-load.d/kvm.conf

kvm
kvm-intel

启用、禁用服务

# 网络服务 : NetworkManager.serivce
sudo systemctl enable NetworkManager.serivce
# OpenSSH : sshd.service
sudo systemctl enable sshd.service
# GDM : gdm.service
sudo systemctl enable gdm.service
 
# 禁用
sudo systemctl disable gdm.service

启用、停止、重启和重载服务

# 启动
sudo systemctl start sshd.service
# 停止
sudo systemctl stop sshd.service
# 重启
sudo systemctl restart sshd.service
# 重载配置
sudo systemctl reload sshd.service

查看服务状态

systemctl
# or
systemctl status sshd.service

Over!

Having pacman verify packages

For the past six months, pacman’s package verification features were turned off by default while we were figuring out the details of our public-key infrastructure.

They have finally been enabled in pacman-4.0.3-2; when you upgrade, you will be prompted to run:

pacman-key --init
pacman-key --populate archlinux

This sets up a local keyring for pacman, and populates it with the data needed to authenticate official packages. This includes five master keys used to authenticate Arch Linux packagers (developers and trusted users), so you do not need to know who joins or leaves the team: you only have to verify those five master keys once and for all. The populate command will prompt you to do so; please do this cautiously by checking the fingerprints displayed against those published on our website.

Then, merge your pacman.conf with pacman.conf.pacnew, that is, enable package verification through the SigLevel option, and you should be good to go.

For details on the development of pacman and archlinux-keyring, see the blog posts of Allan and Pierre.

Over!

From: http://www.archlinux.org/news/having-pacman-verify-packages/