Gentoo 的 Minimal Install CD 每周都会自动构建一个版本,服务器通常使用最新的 x86_64 版本。 国内的镜像下载地址是:php
用 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
名称通常为 enps。session
启动 SSH 服务:app
/etc/init.d/sshd start #启动ssh服务
设置 root 用户的密码:dom
passwd
如今可使用 PuTTY 或者 Terminal 远程登陆到机器进行安装。
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 的几个基本命令:
使用这些命令为硬盘建立一个 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 的状况,须要采用相同的分区格式化 sda 和 sdb 两块硬盘,而且两块硬盘的 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
因为 Grub 不支持 ext4 的 boot 分区,因此 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
使用 mknod 和 mdadm 建立节点和设备。
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
挂载 md1 和 md3 两个节点。
mount /dev/md3 /mnt/gentoo mkdir /mnt/gentoo/boot mount /dev/md1 /mnt/gentoo/boot cd /mnt/gentoo
使用 links 命令下载最新版本的 x86_64 Stage3 和 portage,而后进行解压到当前目录。
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_MIRRORS 和 SYNC 参数,指定下载的镜像地址
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)。
时区的配置文件都保存在 /usr/share/zoneinfo 中。
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
Important
当服务器提供的服务须要为跨时区的应用提供服务时,且使用 MongoDB 和 NodeJS 时要将时区设为 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
修改文件中的 hostname 为 gentoo 。
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) 下的所有编译选项
在默认的 fstab 文件中,BOOT、ROOT 和 SWAP 须要用实际的分区名替换掉。
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
完成后就把当前系统更新到最新的版本,能够开始对系统进行更详细的定制。
修改 /etc/conf.d/hostname :
hostname="abc"
修改 /etc/conf.d/net :
dns_domain="xxxxx.com"
最终在 console 的登陆上显示为 abc.xxxxx.com 。
使用 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.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
root soft noproc 65535 root hard noproc 65535 root soft nofile 65535 root hard nofile 65535
root 表明用户,若是设置任意用户,可使用 *****,noproc 为进程数量,nofile 为文件数量,root soft noproc 65535 即 root 用户可以打开的最大进程数的软限制是 65535。注意软限制不能超过硬限制。
session required /lib/security/pam_limits.so
登录时调用 pam_limits.so,该库将会从 /etc/security/limits.conf 中读取配置参数并自动设置。
echo "65535" > /proc/sys/fs/file-max
注意 /proc/sys/fs/file-max 不能直接用编辑工具修改。
worker_rlimit_nofile 51200; #修改最大文件数为51200 events { use epoll; worker_connections 51200; #修改worker的最大链接数为51200 }
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 中使用 20120516 的 LiveCD 安装后启动出现错误:
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