Debian Linux 编译 Realtek (RTL8111/RTL8168) 网卡驱动

有一台电脑上用了 Realtek (RTL8111/RTL8168) 的网卡,lspci 显示:

01:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller (rev 06)

在这台电脑上装了 Debian wheezy,虽然 Debian 内核里有它的驱动(用了 r8169),也能使用,但网络很不稳定。所以我打算把 r8169 换成官方的 Realtek (r8168) 驱动。
继续阅读Debian Linux 编译 Realtek (RTL8111/RTL8168) 网卡驱动

archlinux 的 top 命令变红了

Archlinux 在某次更新了 procps-ng 后,top 命令变成红色了,如下图

看习惯了传统的 top 对这个还是很不习惯,所以找方法把它变成原来的样子:

首先删除 $HOME 目录下的 .toprc 如果有的话

rm ~/.toprc

然后启动 top,在 top 界面依次按如下键:

 z
 V
 1
 y
 m m
 t t t

这个时候,应该可以发现跟原来的 top 命令一样了,最后按 W 保存配置,这样就可以在 ~/.toprc 里写入 top 的配置,下次使用 top 命令的时候也是原来的样子了。

press W

红色top

参考:https://bbs.archlinux.org/viewtopic.php?pid=1474872#p1474872

Ubuntu 下移动 MySQL 的默认目录

最近配置了一台 Ubuntu 1404 的服务器,装好 MySQL 之后,准备把 MySQL 的数据目录(datadir)移动到其它地方(/srv/mysql),之前在 Debian 下面的话,直接做完下面几步就好了:

# service mysql stop
# cp -rp /var/lb/mysql /srv/mysql
# 在 my.cnf 中修改 datadir = /srv/mysql 
# service mysql start

但,这次在 Ubuntu 下直接启动不成功,抛出 start: Job failed to start,Google 之,发现原来在 Ubuntu 中引入了一个 AppArmor 的安全模组,它可以界定单个程序进入一组文件列表。

所以在 Ubuntu 下还需要做一步操作:

/srv/mysql/ 目录加入到 mysqld 的目录列表中去,编辑 /etc/apparmor.d/usr.sbin.mysqld

# vim /etc/apparmor.d/usr.sbin.mysqld

作以下修改

...
  /var/lib/mysql/ r,
  /var/lib/mysql/** rwk,
+ /srv/mysql/ r,
+ /srv/mysql/** rwk, 
...

重启 apparmor

# /etc/init.d/apparmor restart

然后启动 MySQL 就不会报错了。

# service mysql restart

关于 AppArmor 的官方介绍:https://help.ubuntu.com/14.04/serverguide/apparmor.html

RHEL/CentOS 6.x 添加 EPEL & remi 安装软件

在使用 RHEL/CentOS 的时候总是会嫌弃自身源里的软件包版本过旧,比如 php 官方最新稳定版本为 5.5.0,而 CentOS 上还是 5.3.3,而我又是一个版本控。解决这个问题就可以给系统加上 EPEL & remi 的源了。

EPEL(Extra Packages for Enterprise Linux) 是由 Fedora 社区打造,为 RHEL 及衍生发行版如 CentOS、CloudLinux 等提供软件包的项目,地址:http://fedoraproject.org/wiki/EPEL。

一、添加并启用 EPEL 源:

1. RHEL/CentOS/CL Linux 6.x 下安装 EPEL yum 源,根据不同的系统选择:

32bit:

# rpm -ivh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm

或 64bit:

# rpm -ivh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

导入key:

# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6

2. 安装好后会在/etc/yum.repos.d/下创建 epel.repoepel-testing.repo 两个配置文件,更改 epel.repo 的 [epel] 下的 enabled 为1:

[epel]
name=Extra Packages for Enterprise Linux 6 - $basearch
#baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch
failovermethod=priority
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
...

这样 EPEL 的源就安装完成了。
继续阅读RHEL/CentOS 6.x 添加 EPEL & remi 安装软件

Gnome 3.6 更换输入法为 fcitx

Archlinux 把 Gnome 更新到 3.6 了,在 Gnome 3.6 中 ibus 被作为依赖安装到了系统中。虽然集成性不错,但个人还是比较喜欢 fcitx 毕竟从接触 Linux 开始就一直使用  fcitx,所以把打算把输入法换成 fiitx 。结果发现在 Gnome 3.6 中换个输入法并没有那么容易。

最后看到在 fcitx 的 wiki 中有介绍:http://fcitx-im.org/index.php?title=Note_for_GNOME_Later_than_3.6

在 Archlinux 上我是这样做的:

  1. ~/.xprofile 中加入输入法配置:

    export XMODIFIERS="@im=fcitx"
    export GTK_IM_MODULE=fcitx
    export QT_IM_MODULE=fcitx
    
  2. 在 ArchLinux 上似乎并不能删除 ibus-daemon,因为它属于软件包 ibus。。。所以我们只要设置 fcitx 自启动就可以了。
    使用 gnome-session-properties 添加一个 fcitx 的启动程序。
  3. 最后禁用 gnome-settings-daemon 的键盘动作:

    $ gsettings set org.gnome.settings-daemon.plugins.keyboard active false 

ssh 单一用户登录限制

为了防止某一用户重复登陆,也为了防止滥用资源,我们可以用 PAM 来作限制以达到单点登陆的目的。

  1. 确保 /etc/pam.d/sshd 里添加了 “pam_limits.so”,一般情况下 Debian 系的发行版已经添加。
    session required pam_limits.so
  2. 在 “/etc/security/limits.conf” 里添加 “USERNAME – maxlogins 1″,意思是 UERNAME 这个用户的最大登录用户数为1,当然也可以用 * 来代表所有用户。
  3. 重启 ssh 服务 /etc/init.d/ssh restart,超过限制数的 SSH 登录就会提示 Too many logins for 'USERNAME'.

使用 logrotate 定期整理 Log 档案

有时候在跑一些 daemon 的时候,会遇到日志越来越大的情形。如何能做到像 apache 一样定期整理成像 xxx.1 xxx.2.gz 这样的文件呢?

这个时候就可以作到 logrotate 这个系统工作,它的配置文件在 /etc/logrotate.conf,设置方法也很简单 (参考自 Rotating Rails Log Files):

# Rotate Rails application logs
/path/to/your/current/log/*.log {
  daily
  missingok
  rotate 7
  compress
  delaycompress
  notifempty
  copytruncate
}

其中:

daily 表示每天整理,也可以改成 weekly 或 monthly
missingok 表示找不到 log 文件也无所谓
rotate 7 表示保留之前的 7 份文件
compress 表示压缩,默认用 gzip
delaycompress 表示延后到下一次 rotate 时压缩
notifempty 表示如果 log 是空的,就不 rotate
copytruncate 先复制 log 文件的内容后,再清空的作法,因為有些程序写在原来的 log 文件中,比如 rails。另一种方法是重新生成一个日志。

设置完成后,可以等到明天,或是运行 /usr/sbin/logrotate -f /etc/logrotate.conf 测试一下。

编译 Gentoo 及 LFS

上个周未突然来兴致说要编译一下 LFS 或者 Gentoo,所以看了一遍 Gentoo 及 LFS 的编译过程,就开始上手了。之前在大学的时候就尝试编译过 LFS——当时一些朋友说编译 LFS 是一个可以让人忘记上课,忘记睡觉,忘记吃饭的事——编译了30几个小时也没能成功,所以很挫败。

因为 Gentoo 的编译过程简单许多,就先拿它下手。照着文档,差不多就编译了一个内核,一个 Grub,过程并不复杂,也顺利,内核编译了两遍,第一次没有把 SCSI 编译进去,造成启动的时候认不出我的 SATA 硬盘,编译了第二遍终于可以了,很兴奋——原来编译 Gentoo 也是这么简单的事,然后又用 emerge 安装了 VIM 等一些常用软件,基本系统也终于可以用了。

然后又开始编译 LFS,照着文档,也顺利地编译好了环境与基本系统,最后到内核的时候也犯了很多错误,开始的时候是直接拿了 Arch 的Config编译的,把很多东西都编译成模块了,又没有做 initfs,系统没能启动。又开始找作 initfs 的方法,都失败了。又把驱动啥的都编译到内核里去,还是启动不了,不知为何。今天索性用 arch 的内核来启动 LFS,系统是启动了,可一些初始化的工作没有完成,最后发现是 inittab 里的启动级别没设置好,最后系统终于能正常启动了,撒花~

继续折腾系统去,有时间写写编译过程与注意事项~