小内存VPS配置Gentoo系统的过程

一直痴迷于折腾Gentoo发行版,但是个人电脑要配置图形界面并且达到赏心悦目拿得出手的程度所消耗的精力实在是太大了。

前面一段时间觉得本本越来越跑不动程序了,运行起来各种卡顿,于是乎又开始蠢蠢欲动的想要折腾 Gentoo。为了压制住这种邪火,果断的将我的服务器抹掉了,准备将 Debian 折腾成 Gentoo。

这里记录一下折腾的过程,以便将来查用。

PS. 题目上说的小内存VPS是指内存256MB的VPS(不算SWAP),很久之前尝试128M的更小的VPS折腾失败了,因为编译内核总是跪…

PSS. 准备学习或者参考我这篇文章的娃娃,假设你应该已经知道一些基本的信息,关于什么是Gentoo,相比 Debian,Ubuntu Server 以及 CentOS 来说它的好处就不过多介绍了。关于VPS也不多说了,不过要是你使用虚拟机也可以参考参考哦!

首先备份系统就不多说了,重要的资料千万要保管好!

关闭VPS。

在VPS的控制面板上启动VNC,调整启动顺序,保证光盘优先启动,然后加载 gentoo 的安装iso镜像: install-x86-minimal-201xxxxx.iso,最后启动VPS并打开VNC且连接之…

准备工作

VNC已经连接,安装镜像已经启动成功,好了,搓搓手开始大干一场吧!

首先要设置网络是不,不然玩蛋啊?我的网络不是使用DHCP自动获取的,因为使用的是VPS服务器商分配的独立IP。总之,手动设置IP,子网掩码以及网关如下:

ifconfig eth0 ip.ip.ip.ip netmask 255.255.255.192
route add default gw ip.ip.ip.gw

现在别人可以联通你了,但是你联通不了别人啊!这是因为目前还没有设置DNS地址,所以解析不了域名导致的。

nano -w /etc/resolv.conf

添加一行内容: nameserver 8.8.8.8。

测试网络:

ping -c3 www.google.com

如果确定网络畅通无阻了,就可以进行下一步了——设置密码并开启ssh服务。

passwd
/etc/init.d/sshd start

在 Mac 或 Linux 中通过本地终端使用ssh登录到VPS中,如果是 Window 则使用相应软件,不多说了。不过,要记得先清除之前VPS的指纹。

rm ~/.ssh/known_hosts
ssh root@domain.vps

这样就通过SSH进入到了VPS中,准备工作到此完成!

手动安装系统

分区

使用 fdisk 对 VPS 的磁盘进行分区。

fdisk /dev/sda

那么小的内存就不要纠结分区方案了:256M的内存就对应256M的SWAP分区就,其它的硬盘就用作一个ROOT分区即可。尤其是硬盘也不充足的孩子更要听我的话,后面还有连招呢!

分区方案如下:

  • /dev/sda1 swap 256M 交换分区
  • /dev/sda2 ext4 其余 跟分区

对分区进行格式化,并添加标签:

mkswap -L SWAP /dev/sda1
mkfs.ext4 -L ROOT /dev/sda2

激活交换分区:

swapon /dev/sda1

挂载分区,准备开始安装基本系统:

mount /dev/sda2 /mnt/gentoo
cd /mnt/gentoo

安装操作系统基本环境

下载 stage 和 portage 到 /mnt/gentoo 目录中去,因为是为服务器做系统的,所以选择了 hardened 版本,内核也是。

1
2
wget http://ftp.ucsb.edu/pub/mirrors/linux/gentoo/releases/x86/current-stage3/hardened/stage3-i686-hardened-20140128.tar.bz2
wget http://ftp.ucsb.edu/pub/mirrors/linux/gentoo/snapshots/portage-latest.tar.bz2

解压缩到指定目录:

1
2
tar xvjpf stage3-i686-hardened-*.tar.bz2 -C /mnt/gentoo
tar xvjf portage-latest.tar.bz2 -C /mnt/gentoo/usr

到了这一步,基本的系统就已经完成了,但是还没有目前操作系统还没有内核,也不能启动,也就是说光有一个框架。所以要先打磨一下,上点基本配置。

复制域名的配置文件到gentoo中:

1
cp -L /etc/resolv.conf /mnt/gentoo/etc/

配置 portage 的 make.conf,Gentoo的魅力就在这里!!!

nano -w /mnt/gentoo/etc/portage/make.conf

在此文件中为服务器设置一些配置:

1
2
3
4
5
6
7
8
9
10
11
12
#不能要 -pipe 选项,不然编译起来快是快,但是太消耗内存,记得你是小内存VPS啊!
CFLAGS="-O2 -march=i686 -fomit-frame-pointer"
#稍微加快一下编译速度,聊胜于无
MAKEOPTS="-j2"

#我的USE参数:
USE="bindist -X -alsa -cdr -gtk -gnome -qt -kde nginx mongodb gd libwww ssl xml cjk -opengl -oss vim-syntax bash-completion jpeg png syslog"
#我使用Nginx,这里是nginx所包含的模块:
NGINX_MODULES_HTTP="spdy geoip gzip gzip_static auth_pam gunzip access auth_basic charset fastcgi limit_conn limit_req proxy rewrite ssl headers_more flv mp4 upload_progress"

#设置语言
LINGUAS="en_US zh_CN"

挂载 /proc /dev /sys

1
2
3
mount -t proc proc /mnt/gentoo/proc
mount --rbind /sys /mnt/gentoo/sys
mount --rbind /dev /mnt/gentoo/dev

在这里还有一个步骤要做,就是使用 screen 免得在后面配置系统的时候 ssh 断线,导致重头再来一次!

tmux

如果中途断线了,只要重新连接上服务器,然后运行下面的命令就可以了

tmux attach

chroot 到新环境中去,马上要开始重头戏了!!

chroot /mnt/gentoo /bin/bash
source /etc/profile
export PS1="(chroot) $PS1"

基本配置

先更新一下portage,这一步可有可无

emerge --sync

选择合适的配置方案,我选择的就是普通的 hardened。

eselect profile list
eselect profile set [number]

设置本地化信息,这里主要是语言

nano -w /etc/locale.gen

添加上:

en_US.UTF-8 UTF-8
zh_CN.UTF-8 UTF-8
zh_CN.GB18030 GB18030

然后生成语言:

locale-gen

设置语言,我选择了英文,懒得折腾中文显示了,到时候设置上接受远程环境了就可以自动显示中文了。

eselect locale list
eselect locale set [en_US.UTF-8对应的那个]
nano -w /etc/env.d/02locale

在文件中写入一下内容,设置接收远程环境:

LANG="en_US.UTF-8"
LC_COLLATE="C"

更新环境:

env-update && source /etc/profile

优化配置

你以为直接 emerge 内核就可以了吗? 错!! 绝对的内存不够用啊。

怎么办?只能再加点临时的 swap 用来缓存一下,但是想我只有5G硬盘的孩纸真的不敢多加太多的 swap,不过再上 256M 空间就足够用了!

cd /tmp
dd if=/dev/zero of=./swap bs=1M count=256
mkswap ./swap
swpaon ./swap
free -m

看看现在的内存情况,给力了吧?这就是关键啊,不然下面两步操作很有可能会报错内存不足的

下载内核,一般情况下是使用 gentoo-sources,但是我这里是服务器,就选用了配套的 hardened-sources:

emerge hardened-sources
emerge pciutils
ls -l /usr/src/linux

懒得去深究硬件,所以直接使用 genkernel 自动编译内核,另外要小心网络的问题,首先使用 lspci 看看网卡是什么,记下来。

lspci
zcat /proc/config.gz > /usr/share/genkernel/arch/x86/kernel-config
genkernel --menuconfig all

在 menuconfig 中将之前记下来的网卡驱动前的括号中打上 ‘*‘。

上面这一步需要很久的时间,耐心点,或者喝杯茶水。

创建/etc/fstab:

nano -w /etc/fstab

分别修改/dev/sda1 /dev/sda2,对应至swap /

配置网络信息:

nano -w /etc/conf.d/net

以下两行分别用来配置IP、子网掩码、网关

config_eth0=( "ip.ip.ip.ip netmask 255.255.255.netmask" )
routes_eth0=( "default via ip.ip.ip.gw" )
dns_domain_lo="info"

配置主机名:

nano -w /etc/conf.d/net

写入 dns_domain_lo=”homenetwork”

设置网络自动启动:

cd /etc/init.d
ln -s net.lo net.eth0
rc-update add net.eth0 default

修改root密码,并自动启动 sshd:

passwd
rc-update add sshd default

安装各种系统工具:

emerge syslog-ng
rc-update add syslog-ng default
emerge cronie
rc-update add cronie default
emerge mlocate

配置引导程序,直接使用默认的 grub2 就可以了!

emerge sys-boot/grub
grub2-install /dev/sda
grub2-mkconfig -o /boot/grub/grub.cfg

安装完成!

重启系统!

exit
cd
umount -l /mnt/gentoo/dev{/shm,/pts,}
umount -l /mnt/gentoo{/boot,/proc,}
reboot

开始使用吧^_^

添加用户

useradd -m -G users,wheel,audio -s /bin/bash username
passwd john

安装一些必要的程序

emerged tmux vim nginx git nodejs
npm install shadowsocks hexo -g

嗯,大功告成,我去折腾别的东西去了!

转载请著名出处:启明的日志《小内存VPS配置Gentoo系统的过程》