Gentoo 服务器安装手记

Gentoo 安装方案

第一步:下载安装介质

GentooMinimal Install CD 每周都会自动构建一个版本,服务器通常使用最新的 x86_64 版本。 国内的镜像下载地址是:php

第二步:启动机器,设置网络环境和开启 SSH 服务

Minimal Install CD 光盘启动进入到 livecd 的环境,在安装前须要设置网络环境。 若是网络环境里配置了 DHCP,经过命令 ifconfig 命令检查机器是否分配到IP。linux

能够经过下面的几条命令自行设置,也可使用 net-setup 命令进行设置:算法

ifconfig eth0 192.168.1.10/24 #设置IP地址:192.168.1.10
route add default gw 192.168.1.1 #设置网关:192.168.1.1
echo nameserver 192.168.1.1 > /etc/resolv.conf #设置域名解析服务器

Importantvim

实际过程当中有可能遇到从 Minimal Install CD 启动后,系统没法找到网卡,使得安装没法进行下去。遇到此类问题须要查看网卡的硬件状况,查看是否有加载对应的驱动模块。譬如在 DELL R610 机型中使用 Broadcom Corporation NetXtreme II 5709C 双端口千兆以太网卡时遇到虽然加载了驱动模块,可是依然没法识别网卡的状况,最终先将驱动模块删除再从新加载后才使得网卡设备被识别。bash

lspci -k #查询到网卡的驱动模块为bnx2。
lsmod #查询是否加载了bnx2驱动模块。
rmmod bnx2 #移除加载的bnx2驱动模块。
modprobe bnx2 #从新加载驱动模块。
net-setup eth0 #设置网络。

Important服务器

若是使用新版本的 Minimal Install CD,因为 udev 版本已经升级到 200 以上,不必定能使用 eth0 来链接网络,新的链接的名称能够用如下代码来得到:网络

udevadm test-builtin net_id /sys/class/net/eth0 2> /dev/null

名称通常为 enpssession

启动 SSH 服务:app

/etc/init.d/sshd start #启动ssh服务

设置 root 用户的密码:dom

passwd

如今可使用 PuTTY 或者 Terminal 远程登陆到机器进行安装。

第三步:准备使用 fdisk 命令对硬盘分区

fdisk /dev/sda
The number of cylinders for this disk is set to 6527.
There is nothing wrong with that, but this is larger than 1024, and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs (e.g., DOS FDISK, OS/2 FDISK)
Command (m for help):

fdisk 的几个基本命令:

  • n 建立一个分区
  • p 显示全部的分区
  • a 指定一个分区为启动分区,显示的时候这个分区标有一个 *****
  • d 删除一个分区
  • t 改变一个分区的类型,Linux swap / Solaris 的编号是 82
  • l 显示全部的分区类型

使用这些命令为硬盘建立一个 boot 分区,一个 swap 区和一个 root 分区:

Disk /dev/sda: 53.7 GB, 53687091200 bytes
255 heads, 63 sectors/track, 6527 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x5f13998e
Device Boot Start End Blocks Id System
/dev/sda1 * 1 17 136521 83 Linux
/dev/sda2 18 83 530145 82 Linux swap / Solaris
/dev/sda3 84 6527 51761430 83 Linux

使用 w 命令保存结果退出。

Important

建立两块硬盘使用 RAID 1 的状况,须要采用相同的分区格式化 sdasdb 两块硬盘,而且两块硬盘的 root 分区和 boot 分区都指定为 Linux raid autodetect 类型( fdisk 中用 t 命令指定分区类型时输入编号 fd )。

Device Boot Start End Blocks Id System
/dev/sda1 * 1 17 136521 83 Linux raid autodetect
/dev/sda2 18 83 530145 82 Linux swap / Solaris
/dev/sda3 84 6527 51761430 83 Linux raid autodetect

第四步:格式化分区并挂载到 Livecd 环境

因为 Grub 不支持 ext4boot 分区,因此 boot 分区格式化为 ext2 类型, root 分区能够格式化 ext3 或者 ext4 类型。

mke2fs /dev/sda1 #格式化ext2的boot分区
mke2fs -j /dev/sda3 #格式化ext3的root分区
mkswap /dev/sda2 && swapon /dev/sda2 #初始化和激活交换分区
#挂载分区
mount /dev/sda3 /mnt/gentoo
mkdir /mnt/gentoo/boot
mount /dev/sda1 /mnt/gentoo/boot
cd /mnt/gentoo

格式化 ext4 类型的 root 分区。

mkfs.ext4 /dev/sda3 #格式化ext4的root分区

Important

建立两块硬盘使用 RAID 1 的状况,须要先使用 partprobe 命令从新读取硬盘的分区表。

partprobe /dev/sda
partprobe /dev/sdb

使用 mknodmdadm 建立节点和设备。

mknod /dev/md1 b 9 1
mknod /dev/md3 b 9 3
mdadm --create /dev/md1 --level=1 --raid-devices=2 --metadata=0.90 /dev/sda1 /dev/sdb1
mdadm --create /dev/md3 --level=1 --raid-devices=2 /dev/sda3 /dev/sdb3

格式化建立的节点和交换分区。

mke2fs /dev/md1
mke2fs -j /dev/md3
mkswap /dev/sda2 && mkswap /dev/sdb2
swapon -p 1 /dev/sda2 && swapon -p 1 /dev/sdb2

挂载 md1md3 两个节点。

mount /dev/md3 /mnt/gentoo
mkdir /mnt/gentoo/boot
mount /dev/md1 /mnt/gentoo/boot
cd /mnt/gentoo

第五步:安装最新版本的 Stage 和 Portage

使用 links 命令下载最新版本的 x86_64 Stage3portage,而后进行解压到当前目录。

links http://mirrors.sohu.com
tar xvjpf stage3-*.tar.bz2
tar xvjf /mnt/gentoo/portage-latest.tar.bz2 -C /mnt/gentoo/usr

第六步:配置编译选项

的环境是没有 VIM 的,只能使用 nano 编辑配置文件。

nano -w etc/portage/make.conf

make.conf 中添加 MAKEOPTS 参数,使用 MAKEOPTS 能够定义在安装软件的时候同时编译的数量,通常是 CPU 的数目加 1

MAKEOPTS="-j3"

添加 unicode 的全局编译参数,保证编译的软件支持 unicode 编码。

USE="bindist unicode bash-completion vim-syntax jpeg png mmx sse sse2"

添加 GENTOO_MIRRORSSYNC 参数,指定下载的镜像地址

GENTOO_MIRRORS="http://mirrors.sohu.com/gentoo/"
SYNC="rsync://rsync.cn.gentoo.org/gentoo-portage"

其它的一些经常使用的设置项

APACHE2_MODULES="authz_host cgi dir mime actions alias asis auth_basic auth_digest authn_alias authn_anon authn_dbd authn_dbm authn_default authn_file authz_dbm authz_default authz_groupfile authz_owner authz_user autoindex cache cern_meta cgid charset_lite dav dav_fs dav_lock dbd deflate disk_cache dumpio env expires ext_filter file_cache filter headers ident imagemap include info log_config log_forensic logio mem_cache mime_magic negotiation proxy proxy_ajp proxy_balancer proxy_connect proxy_ftp proxy_http reqtimeout rewrite setenvif speling status substitute unique_id userdir usertrack version vhost_alias unixd socache_shmcb authn_core authz_core"
NGINX_MODULES_HTTP="addition fastcgi flv geo geoip sub access auth_basic charset dav gzip gzip_static image_filter limit_req limit_zone map memcached perl proxy realip referer rewrite secure_link ssi stub_status upstream_ip_hash userid xslt random autoindex browser cache_purge degradation empty_gif headers_more push random_index scgi split_clients uwsgi slowfs_cache upload upload_progress"
NGINX_MODULES_MAIL="imap pop3 smtp"
ACCEPT_LICENSE="*"
PHP_TARGETS="php5-4"
PHP_INI_VERSION="production"
LINGUAS="en_US zh_CN zh_TW"

第七步:切换系统

cd /
mount -t proc proc /mnt/gentoo/proc
mount -o bind /dev /mnt/gentoo/dev
cp -L /etc/resolv.conf /mnt/gentoo/etc/
chroot /mnt/gentoo /bin/bash
env-update && source /etc/profile
export PS1="(chroot) $PS1" #盘符从livecd变为(chroot)。

第八步:设定locale、时区和主机名

时区的配置文件都保存在 /usr/share/zoneinfo 中。

cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

Important

当服务器提供的服务须要为跨时区的应用提供服务时,且使用 MongoDBNodeJS 时要将时区设为 GMT0,避免由于服务器的时区形成数据的时间错误,减小客户端在时区判断上判断的流程。

若是须要把主机设置成格林威治标准时间,则把 GMT0 文件拷贝到 /etc/localtime

cp /usr/share/zoneinfo/GMT0 /etc/localtime

为了可以使用中文,在 locale 中添加中文 UTF-8 的支持,修改 /etc/locale.gen 文件。

nano -w /etc/locale.gen

添加:

en_US.UTF-8 UTF-8
zh_CN.UTF-8 UTF-8
zh_CN.GBK GBK

执行 locale-gen 命令让修改的 locale 生效。

locale-gen

设定主机的名称。

nano -w /etc/conf.d/hostname

修改文件中的 hostnamegentoo

第九步:配置编译内核

emerge -avt gentoo-sources genkernel
zcat /proc/config.gz > /root/config/kernel-3.8.13.config
genkernel --color --loglevel=5 --menuconfig --save-config --makeopts=-j9 --kernel-config=/root/config/kernel-3.8.13.config all

编译后会在 /boot 目录下生成内核文件。

Important

不少软件和驱动的运行都须要有内核的支持,具体的依赖关系在此文的附录中有一些说明,这里只强调使用 RAID 1 模式时须要选择 Multi-device support (RAID and LVM) 下的所有编译选项

第十步:编辑 /etc/fstab

在默认的 fstab 文件中,BOOTROOTSWAP 须要用实际的分区名替换掉。

nano -w /etc/fstab
/dev/sda1 /boot ext2 noauto,noatime 1 2
/dev/sda3 / ext3 noatime 0 1
/dev/sda2 none swap sw 0 0

若是是 ext4 文件系统,须要将对应的 ext3 改成 ext4

/dev/sda3 / ext4 noatime 0 1

系统启动时会读取 fstab 中的配置并自动对硬盘进行挂载,所以若是有其余硬盘须要自动挂载,也需在 fstab 中进行配置。例如服务器有第二块硬盘 /dev/sdb 并分红一个分区 /dev/sdb1 ,文件系统为 ext4,须要在系统启动时挂载到 /opt,则需在 fstab 中加入以下一行配置:

/dev/sdb1 / ext4 noatime 0 1

Important

RAID 1 状况的 fstab 文件写法不一样,主要是分区名应该为建立的节点名,没有为交换分区建立节点,因此2个 swap 分区都要写到 fstab 文件中。

/dev/md1 /boot ext2 noauto,noatime 1 2
/dev/md3 / ext3 noatime 0 1
/dev/sda2 none swap sw 0 0
/dev/sdb2 none swap sw 0 0

boot 分区的启动参数中 noauto 的意思是说启动分区不自动 mount 到系统中。

第十一步:系统基本配置

配置系统的网络地址、启动 SSH 服务、设置 root 用户的密码、安装一些系统的基本服务和在系统启动时启动一些服务。 eth0 根据不一样机器须要改为相应名字。

echo 'config_eth0="192.168.1.10/24" ' >> /etc/conf.d/net
echo 'routes_eth0="default via 192.168.1.1" ' >> /etc/conf.d/net
echo 'dns_servers_eth0="192.168.1.1 8.8.8.8" ' >> /etc/conf.d/net

passwd

emerge -avt syslog-ng vixie-cron pciutils gentoolkit
rc-update add sshd default
rc-update add syslog-ng default
rc-update add vixie-cron default

Important

RAID 1 须要 mdadm 在启动的时候就运行,因此须要在系统安装完成以前就安装,并把它的启动级别设为 boot

emerge -avt mdadm
mdadm --detail --scan >> /etc/mdadm.conf
rc-update add mdadm boot

第十二步:配置引导程序

Gentoo 推荐使用 Grub 来引导系统, 这里介绍的配置文件写法不涉及多个系统共存,安装 grub 后配置 grub.conf 文件。

emerge -avt grub
nano -w /boot/grub/grub.conf
default 0
timeout 30
splashimage=(hd0,0)/boot/grub/splash.xpm.gz
title Gentoo Linux 3.8.13
root (hd0,0)
kernel /boot/kernel-genkernel-x86_64-3.8.13-gentoo root=/dev/ram0 init=/linuxrc ramdisk=8192 real_root=/dev/sda3 rootfstype=ext4
initrd /boot/initramfs-genkernel-x86_64-3.8.13-gentoo

Important

若是是 ext4 的分区,须要在 kernel 一行加入 rootfstype=ext4 的参数。

使用 grub-install 命令安装。

grep -v rootfs /proc/mounts > /etc/mtab
grub-install --no-floppy /dev/sda

Important

RAID 1 的模式不能使用 grub-install 命令安装,只能使用 grub 命令进行安装。

grub
grub> root (hd0,0)
Filesystem type is ext2fs, partition type 0xfd
grub> setup (hd0)
Checking if "/boot/grub/stage1" exists... yes
Checking if "/boot/grub/stage2" exists... yes
Checking if "/boot/grub/e2fs_stage1_5" exists... yes
Running "embed /boot/grub/e2fs_stage1_5 (hd0)"... 16 sectors are embedded.
succeeded
Running "install /boot/grub/stage1 (hd0) (hd0)1+16 p (hd0,0)/boot/grub/stage2 /boot/
grub/menu.lst"... succeeded
Done.
grub> root (hd1,0)
Filesystem type is ext2fs, partition type 0xfd
grub> setup (hd1)
grub> quit

第十三步:重启进入新系统

exit
umount /mnt/gentoo/dev /mnt/gentoo/proc /mnt/gentoo/boot /mnt/gentoo
reboot

通过这样的安装有了一个最基本的系统。

第十四步:更新系统

emerge --sync
emerge -avt gentoolkit
emerge --update --deep --newuse -avt @world
revdep-rebuild
etc-update

完成后就把当前系统更新到最新的版本,能够开始对系统进行更详细的定制。

第十五步:定制hostname和domain

修改 /etc/conf.d/hostname :

hostname="abc"

修改 /etc/conf.d/net :

dns_domain="xxxxx.com"

最终在 console 的登陆上显示为 abc.xxxxx.com

第十六步:定制SSHD登陆方式

使用 ssh-keygen 建立 rsa 算法的 key

ssh-keygen -t rsa -C 'abc.xxxxx.com'
cp id_rsa.pub authorized_keys

生成的 id_rsa 私钥拷贝到须要登陆的机器,修改文件权限为 400。修改 /etc/ssh/sshd_config 配置文件:

Port 18402
AddressFamily any
PasswordAuthentication no
ChallengeResponseAuthentication no

使用 ssh 命令登陆到机器的命令时使用 -i-p 两个参数:

ssh -i .ssh/id_rsa.dashboard -p 18402 root@222.222.222.222

第十六步:设定Shorewall防火墙

修改 shorewall.conf 配置文件:

STARTUP_ENABLED=Yes

interfaces 文件中加入网卡,其中 enp4s0 为当前机器的网卡名:

net     enp4s0      tcpflags,nosmurfs,routefilter,logmartians,sourceroute=0

zones 中加入网络的设置:

net     ipv4

修改 policy 文件:

$FW net ACCEPT
net all DROP  info
all all REJECT info

修改 rules 文件,加入 18402 端口的开放:

#Don't allow connection pickup from the net
#
Invalid(DROP) net   all   tcp
Invalid(DROP) net   all   udp
#
# Allow Ping from the local network
#
Ping(ACCEPT)  net   $FW
#
# Accept 80(Nginx) connection from internet
#
ACCEPT net $FW tcp 80
#
# Accept 18402(SSH) connection from internet
#
ACCEPT net $FW tcp 18402

第十七步:配置系统默认参数

/etc/security/limits.conf

root soft noproc 65535
root hard noproc 65535
root soft nofile 65535
root hard nofile 65535

root 表明用户,若是设置任意用户,可使用 *****,noproc 为进程数量,nofile 为文件数量,root soft noproc 65535root 用户可以打开的最大进程数的软限制是 65535。注意软限制不能超过硬限制。

/etc/pam.d/login

session required /lib/security/pam_limits.so

登录时调用 pam_limits.so,该库将会从 /etc/security/limits.conf 中读取配置参数并自动设置。

/proc/sys/fs/file-max

echo "65535" > /proc/sys/fs/file-max

注意 /proc/sys/fs/file-max 不能直接用编辑工具修改。

Nginx

worker_rlimit_nofile 51200; #修改最大文件数为51200

events {
  use epoll;
  worker_connections 51200; #修改worker的最大链接数为51200
}

/etc/sysctl.conf

net.core.rmem_max = 33554432
net.core.wmem_max = 33554432
net.ipv4.tcp_rmem = 4096 16384 33554432
net.ipv4.tcp_wmem = 4096 16384 33554432
net.ipv4.tcp_mem = 786432 1048576 26777216
net.ipv4.tcp_max_tw_buckets = 360000
net.core.netdev_max_backlog = 2500
vm.min_free_kbytes = 65536
vm.swappiness = 0
net.ipv4.ip_local_port_range = 1024 65535

特定机型的记录

Dell R610

DELL R610 中使用 20120516LiveCD 安装后启动出现错误:

bnx2: Can't load firmware file "bnx2/bnx2-mips-06-06.2.1.fw"

最终修改内核:

CONFIG_FIRMWARE_IN_KERNEL=N

安装 linux-firmware

emerge -avt linux-firmware
相关文章
相关标签/搜索