比尔盖子 博客

Category: IT生活 (page 2 of 14)

OpenRC 无法正确配置 IPv6

Gentoo 的 OpenRC 配置 IP 的方式是非常简洁的,只需简单修改 /etc/conf.d/net 就能完成任务。
然而,比尔盖子的 Gentoo Hardened 一直无法正确的配置 IPv6,主要表现是可以配置地址和 DNS,却认为网关是无效地址。

config_eth0="106.187.49.164/24
             2400:8900::f03c:91ff:fe73:f8c7/64
"
routes_eth0="
    default via 106.187.49.1
    default via fe80::1
"

dns_servers_eth0="106.187.34.20 106.187.35.20 106.187.36.20 2400:8900::2 2400:8900::3"

有问题的就是这个 fe80::1

今天解决这个问题,发现这个问题的成因和解决方案都简单的气人。事实上,OpenRC 支持使用不同的工具初始化网络。在默认情况下,OpenRC 初始化网络的工具是最传统的工具,这些工具对 IPv6 支持有问题。而新的 iproute2 就没有这个问题。

emerge iproute2

然后在 /etc/conf.d/net 行首加 modules="iproute2" 让 OpenRC 使用 iproute2 的工具链配置网络即可。

高性能 ext4 临时文件系统

很多时候,我们的文件系统中并不保存重要数据。比如 /var/tmp, /usr/src/usr/portage,对于这些目录,我们可以专门创建一个文件系统,并以牺牲数据安全性(因为我们不需要)换取最高性能。

如果你的 ext4 分区中储存的是 /usr/portage 这样大量小文件构成的数据库,可以使用以下参数格式化:

mkfs.ext4 -b 2048 -i 2048 -O "dir_index" /dev/sdX

-b 2048 -i 2048 确保分区中有足够的 inodes,避免因大量小文件导致明明有空间却没有 inode 的困境发生;”dir_index” 会让内核以类似 ReiserFS 的 btree 储存文件,对于大量小文件有很大的性能提升。但其它类型的数据分区,比如 /usr/src/var/tmp 请勿使用此方法格式化,请使用默认参数。

使用不安全的写入方式提升性能:

tune2fs -o journal_data_writeback /dev/sdX

禁用日志:

tune2fs -O ^has_journal /dev/sdX

使用以下挂载参数(写在 /etc/fstab):

defaults,noatime,nodiratime,barrier=0,nosuid,nodev,data=writeback

noatimenodiratime 彻底禁用一切访问时间记录;barrier=0 禁用为安全保护而设计的写入屏障;nosuidnodev 提升安全性;data=writeback 使用不安全而最高效的写入方式。

效果拔群!

服务器 SSH 端口再次变更

由于众所周知的原因,现将服务器端口号重新变更为 22000。望互相转告,以免影响诸位的正常使用。

啥?你说我为啥不用 iptables 转发端口?抵抗的行为会让服务器 IP 遭殃的……

GRUB 2 里的 play 命令

GRUB 2 中,有个 play 命令,用来让蜂鸣器播放音频。这可不是什么玩法……

它接受无限个参数,对于一个典型的三参数的调用,文档如下

play [tempo] [pitch] [duration] {pitch2 duration2...}

tempo 是全局速度,所有的 pitch 都受到它的影响;pitch 即要播放的音频,单位为赫兹;duration 是持续时间。

为了播放音乐,需要搞清楚一个调用究竟是多长时间。把 play 看作一个函数,接受 tempo 和 duration 两个参数。经过试验:

tempo duration 时间
60 1 1 s
60 2 2 s
30 1 2 s
30 2 4 s
120 1 1/2 s
120 2 1 s

从这里大概可以看出来,

时长 (s) = 60 / t * d

这样,如果使 t = 60000,d 就正好对应于 0.001 s,即一毫秒。这样,就可以轻松的将基于毫秒时长的 Linux 下 beep 调用翻译成 GRUB 2 的 play 调用了。

另外,这还可以用于 sleep。GRUB 2 提供的 sleep 分辨率只有一秒,但使用 play,让 pitch = 0 Hz,就曲线实现了毫秒级的 sleep 命令。

Buffalo WZR-HP-G450H 刷 OpenWRT

三年前,比尔盖子买了一台 Buffalo WHR-HP-G54,这台路由器是曾经的神器,具有和 Linksys WRT54G 对抗的能力,是 802.11g 路由器的经典。

然而,仅 16 MB 的内存和 4 MB 的闪存,连运行 Linux 3.x 都存在困难,直接导致内核 OOM 杀掉重要进程,从而无限重启。虽然网络上充斥更换内存颗粒的教程,但比尔盖子这样的硬件杀手,即使有热风枪,也不敢下手,否则主板大概就要被我烤糊了。

后来,又使用树莓派充当路由器。ath9k_htc 的 USB 设备虽然开放,然而却有很多 Bugs,导致连接不稳定。就连 OpenWRT 团队,自己打了一堆没有并入内核的补丁,也只能说是基本而不是彻底解决 ath 的问题;发射功率低,信号不好;再加上受限于 USB 2.0 的传输速度(算上树莓派的硬限制,USB 2.0 的理论速度绝对是达不到的);同时,缺少有线接口,导致无线出现问题时无法上网,因此不适合长期使用。

因此,最近便打算购买一款新的路由器。

Continue reading

服务器 SSH 端口变更

由于众所周知的原因。服务器 SSH 的端口变更为 22001,请及时更换,以免影响您的正常使用。

关于龙芯开发的一点见解

月初的时候,Bowen Han 在《关于》页面问了这么一个问题:

我发现现在龙芯的开发者们都很分散,做的工作最后都因为版本的更新失效了,不知道你有什么高见么,龙芯官方不怎么给力啊。

感谢你的评论。这条评论我搁置了很长时间,十分抱歉。

我不想做完备的论述,此时此刻我还在调试 YeeLoong 8089D 用的 SM712 显卡驱动。我只想简单说一说我的第一看法,但是我依然不小心把它写成了一篇长论述。因此,特别将这个回答独立成博文一篇。

Continue reading

Fedora 20 的 r8168 与 rtl8723be 驱动

今天在 Freenode 的 #fedora-zh 上,有个网友的笔记本有线网卡使用的是 r8168,无线网卡是 rtl8723be,r8168 的驱动 r8169 存在问题,rtl8723be 的驱动才刚刚进入 Linux 3.16。因此两者均无法使用,需要下载 Realtek 发布的驱动。

如果在有网络的情况下,倒是非常好解决的。啥,你说没网?请先阅读《无网络》部分,使其有网络后,从这里继续。

Continue reading

流缓冲影响父子进程通讯的问题

a.k.a 《在 C 程序中禁用管道中 stdout 的流缓冲》

注意,本文中代码使用了 C99 特性,如声明 for 循环控制变量和 VLA 数组;同时使用了 GNU 的扩展。请使用 -std=c99 -D_GNU_SOURCE 编译。

最近,盖子正在重写服务器上的 php-loop 工具。这个工具的作用的不断重复运行一个程序。叫 php 的原因,是因为最初(也是现在)的需求是用来不停地运行 php-cgi,防止它死掉导致服务中断。

由于时常有人通知盖子虚拟主机上的 php-cgi 出错,因此日志是十分重要的。然而,php-cgi 打印的日志没有时间戳,因此,盖子的 php-loop 必须能够对 php-cgi 的输出做一点处理。

这种需求一点也不新鲜,思路自然从这里开始 —— fork() 出一个子进程去处理一些事情,并把随时把进展通过管道告知父进程。

然而,将这种方法扩展到 execvp 后,却发现由于 stdout 的流缓冲,无法及时获得输出信息。

Continue reading

Arduino 开发环境在 Gentoo/Systemd 下的搭建

虽说 Gentoo 下的嵌入式开发,有着 Crossdev 神器,避免自己粗制滥造工具链,使最纠结的交叉编译问题消失。但是,今天入手 Arduino Uno,搭建开发环境的时候,还是遇到了太多问题。尤其是我使用 Systemd,导致了更多 Bugs 发生。

本文对我配置开发环境的过程,和可能的错误、陷阱的解决方法,一一记录。

Continue reading

Olderposts Newerposts

Copyright © 2021 比尔盖子 博客

Theme by Anders NorenUp ↑