您的位置:首页 > 其它

Gentoo安装与应用实践

2014-07-09 08:29 387 查看
我从去年开始接触LINUX系统,开始的时候觉得linux系统完全是个天方夜谭,连最起码的:在桌面情况下,进入终端系统,我都很困难。后来,我开始看网上的视频教程,学习别人的操作步骤,模仿别人的操作。再过了一阵子,我不甘心一直这样,于是我开始了自己的探索之旅。
开始,我为了追求大众化,想到了LINUX的全球霸主厂商——readhat,于是开始了我的Fedora之旅,初次用linux的我不知道其中有什么应用价值,只是想把它变成windows的替代品,于是我开始搞一些现在看起来很没有意义的东西。后来,我看到网上的评论说:“fedora是redhat的小白鼠,好的功能将来会在RHEL上体现出来,差的功能就会被淘汰掉”。于是我心有不甘,再加上由于我的升级举动、使用的不熟练,导致了内核经常性的崩溃,我失望了。于是,我开始寻找我linux之旅中的第二个发行版,因为之前很多人用ubuntu,因为其简单易用,很多操作也是点点鼠标就行了。但是,这时我使用linux的方向发生了变化,我并不追求那些花哨的东西,开始研究一些命令之类,当然也都是一些日常的操作,因为平时还要上课,也就没什么时间搞。这一时期,我使用的是Debian系统,最近我才知道原来Debian做服务器并不比RHEL逊色。当时的想法是Debian反正是Ubuntu他爸,有什么问题可以有玩Ubuntu的人撑腰,一下子自信心大涨。于是使用了一段时间的Debian,又感觉它的软件版本太旧了,不符合我追新的个性。于是,我开始寻找那种可以经常更新的linux版本,终于找到了arch和gentoo两个版本。开始,我不顾自己依然是个小白,选择了编译安装的gentoo,由于心理上的害怕,我在虚拟机上开始尝试gentoo安装,一次不行两次,两次不行三次,这样一连十多次,每次都是失败,然后不甘心了,我怀疑自己是依赖虚拟机的方便了。放寒假了,我迫不及待地在实体机上开始尝试安装gentoo,又装了大约一个星期的时间,终于成功了一次,但是后面的桌面系统还是没有搞出来,寒假很快过去,水平并没有什么长进,但是基本系统命令都掌握了,后来认识到情况的不容乐观,我又装回了Ubuntu,就这样,我用Ubuntu一个多月之后,知道有UEFI,而自己的电脑又支持,最后经历了升级BIOS的心惊胆战之后,终于用上了UEFI+GPT启动的Ubuntu,心里很激动。再过一阵子,折腾的心又起来,迫不及待地换到了ARCH,直到这个暑假,我一直使用arch,这是我使用时间最长的linux发行版。
暑假回来了,对于寒假里折腾gentoo的遗憾,我决定弥补一下,同时我很自信地认为自己水平还可以了。于是,我把机器上的所有系统全部删除了,只装了一个gentoo,

下面是我的安装过程:
采用UEFI引导,GPT磁盘分区表格式,EFISTUB
Kernel,systemd,KDE

使用ubuntulivecd光盘,在UEFI引导下启动(启动前进BIOS更改启动模式为UEFI,关闭SecureBoot)。

进入livecd,开启终端,设置root密码,切换到root账户。

使用parted、gdisk分区,我的分区方案是(EFI分区,/,/usr/portage,/home),这样分区的理由是:这个系统以后是我日常使用的系统,并且计划运行虚拟机。

添加文件系统:除了EFI分区是fat32(linux下的vfat)分区,其他均为ext4分区。

挂在分区:
mkdir –v /mnt/gentoo
mount –vt ext4 /dev/sda2/mnt/gentoo
mkdir –pv /mnt/gentoo/boot/
mkdir –pv /mnt/gentoo/home
mkdir –pv/mnt/gentoo/usr/portage
mount –vt vfat /dev/sda1/mnt/gentoo/boot
mount –vt ext4 /dev/sda3 /mnt/gentoo/usr/portage
mount –vt ext4 /dev/sda4 /mnt/gentoo/home


下载并解压stage3:
cd /mnt/gentoo
tar –xvf stage3*.tar.gz</span>


nano –w /mnt/gentoo/etc/portage/make.conf</span>
添加Gentoo源:GENTOO_MIRRORS="http://mirrors.163.com/gentoo"

添加portage源:RSYNC=”rsync://mirrors.163.com/Gentoo-portage”

添加ACCEPT_KEYWORDS=”amd64 x86”

ACCEPT_LICENSE=”*”

MAKEOPTS=”-jN”(N为处理器核心数加1,Intel的可以多设一点,因为有超线程技术。)

LINGUAS=” zh_CN zh_TW”

修改CFLAGS –march=native –fomit-frame-pointer

修改USE:-gnome –gtk qt4 kde cdr alsa dvd </span>
顺便贴上我的make.conf
# These settings were set by the catalyst build script that automatically
# built this stage.
# Please consult /usr/share/portage/config/make.conf.example for a more
# detailed example.
ACCEPT_KEYWORDS="amd64 x86"
ACCEPT_LICENSE="*"
CFLAGS="-march=native -O2 -pipe -fomit-frame-pointer"
CXXFLAGS="${CFLAGS}"
# WARNING: Changing your CHOST is not something that should be done lightly.
# Please consult http://www.gentoo.org/doc/en/change-chost.xml before changing.
CHOST="x86_64-pc-linux-gnu"
MAKEOPTS="-j9"
LINGUAS="zh_CN zh_TW"
INPUT_DEVICES="evdev synaptics"
VIDEO_CARDS="nouveau intel"
# These are the USE flags that were used in addition to what is provided by the
# profile used for building.
USE="-gnome -gtk qt4 kde alsa cdr dvd systemd X consolekit networkmanager udisks policykit"
PORTDIR="/usr/portage"
DISTDIR="${PORTDIR}/distfiles"
PKGDIR="${PORTDIR}/packages"
GENTOO_MIRRORS="http://mirrors.ustc.edu.cn/gentoo/"
SYNC="rsync://mirrors.ustc.edu.cn/gentoo-portage/"

source /var/lib/layman/make.conf


复制DNS信息:
cp –L /etc/resolv.conf /mnt/gentoo/etc/


挂在虚拟文件系统:

            

mount –t proc /proc /mnt/gentoo/proc

mount --rbind /sys /mnt/gentoo/sys
mount --make-rslave /mnt/gentoo/sys
rm -rf /dev/shm && mkdir /dev/shm
mount -t tmpfs -o nosuid,noexec,nodev shm /dev/shm  #(由于我使用的live里的/dev/shm是一个符号链接,所以要重新挂载一下,不然chroot过后就找不到了)
     mount --rbind /dev /mnt/gentoo/dev
mount --make-rslave /mnt/gentoo/dev


切换根目录,进入目标系统:
chroot/mnt/gentoo /bin/bash
source /etc/profile
export PS1="(chroot) $PS1"  //我觉得这部就是标记chroot,其他没什么作用


自动同步最新portage:
emerge-webrsync
emerge --sync


选择profileKDE/systemd
eselect profile list
eselect profile set X


选择时区:
echo “Asia/Shanghai”  >> /etc/timezone


使时区生效:
emerge --config sys-libs/timezone-data


配置字符集:zh_CNzh_HK zh_TW en_US locale-gen
cat >> /etc/locale.gen << "EOF"
en_US.UTF-8 UTF-8
zh_CN.UTF-8 UTF-8
zh_HK.UTF-8 UTF-8
zh_TW.UTF-8 UTF-8
EOF


选择系统语言
eselect locale list
eselect locale set X
我设置为英文


更新环境变量
env-update && source /etc/profile


手工配置编译内核:
emerge gentoo-sources

cd /usr/src/linux

make defconfig
make menuconfig

make && make install modules_install

     28. 我的fstab贴上:

    

# /etc/fstab: static file system information.
#
# noatime turns off atimes for increased performance (atimes normally aren't
# needed); notail increases performance of ReiserFS (at the expense of storage
# efficiency).  It's safe to drop the noatime options if you want and to
# switch between notail / tail freely.
#
# The root filesystem should have a pass number of either 0 or 1.
# All other filesystems should have a pass number of 0 or greater than 1.
#
# See the manpage fstab(5) for more information.
#

# <fs>                  <mountpoint>    <type>          <opts>          <dump/pass>

# NOTE: If your BOOT partition is ReiserFS, add the notail option to opts.
#/dev/BOOT              /boot           ext2            noauto,noatime  1 2
/dev/sda1               /boot           vfat            defaults        0 0
/dev/sda2               /               ext4            noatime         0 1
/dev/sda3               /usr/portage    ext4            defaults        0 0
/dev/sda4               /home           ext4            defaults        0 0
/dev/sda5               /share          vfat            defaults        0 0
/dev/sda6               none            swap            sw              0 0
/dev/cdrom              /mnt/cdrom      auto            noauto,ro       0 0
#/dev/fd0               /mnt/floppy     auto            noauto          0 0
</span>


更改hostname,hwclock(local)
nano -w /etc/conf.d/hostname
在hostname=后的双引号内写上主机名

nano -w /etc/conf.d/hwclock

如果有windows系统,就把UTC改为local,不然会显示时间不对,没有win的忽略。


编译dhcpcd
emerge dhcpcd
rc-update add dhcpcd default


编译安装systemd:
内核选项中勾选systemd

直接在make.conf中USE标记上加入systemd,然后emerge -avuDN world,会自动装好systemd

编译安装Xorg
1、在/etc/portage/make.conf中添加显卡、输入设备信息:
VIDEO_CARDS=”nouveau intel”(nouveau是nVidia的开源驱动)

INPUT_DEVICES=”evdev synaptics keyboard mouse”


2、编译xorg驱动
emerge linux-firmware

emerge–ask xorg-drivers


    3、编译xorg-x11
emerge–ask xorg-x11
这里一般会提示有几个USE条件不满足,要求添加:
cat >> /etc/portage/package.use << “EOF”
x11-base/xorg-server udev
x11-libs/libdrm libkms
EOF
</span>



           最后编译KDEBASE
emerge -pv kdebase-meta
看一下要写入package.use的局部use,按照上面的方法写入。


使用部分:

gentoo的USE比较复杂,为了更深入地了解每一个USE的作用,我们可以编译安装gentoolkit,其中有很多命令比如:equery
uses + 包名,就可以查询包的每一个USE的用法,euse可以帮助我们修改make.conf中的USE。

中文输入法的安装(fcitx)
由于我在全局USE中去除了对gtk的支持,为了使fcitx能够在gtk程序使用,我必须在package.use中加上fcitx对gtk的支持:echo“app-i18n/fcitx
gtk gtk3”,接下来我们可个编译安装fcitx了,
emerge-avt fcitx fcitx-sunpinyin


但是,这是如果我们运行fcitx&,是看不到fcitx的窗口的,怎么办呢?我又想起了gentoo的wiki(wiki.gentoo.org,绝对是个好东西,没事多看看),还要安装kde的一个插件kde-base/kdeplasma-addons,在package.use中写上kde-base/kdeplasma-addonsfcitx,接着emergekde-base/kdeplasma-addons,最后在我们熟悉的桌面上添加wiget即可,但是也许这样你还是切换不出中文输入法的,我们必须在用户home目录下的.xprofile文件中加上:

export XMODIFIER=”@im-fcitx”

export QT_IM_MODULE=fcitx

export GTK_IM_MODULE=fcitx


加上这三行之后,再重新启动一次,我终于看见我的中文输入法,心里一阵激动。

推荐几款软件:
下载工具:ktorrent,amule
影音播放:kmplayer

我遇到的问题:

由于自己的一些原因,我第一次做EFISTUB Kernel遇到了很大的阻力:
首先启用EFI支持需要四项支持:
CONFIG_EFI_PARTITION=y

CONFIG_EFI=y

CONFIG_EFI_STUB=y

CONFIG_EFI_VARS=y

CONFIG_EFIVAR_FS=m</span>


第一次我都没编译全,现在看到最后一个居然还是编译成模块了,真搞笑,以后再修改吧,
如果你的硬盘分区分了/usr分区的话,需要启用initramfs支持,但EFISTUBKernel就是一个EFI文件,怎么弄initramfs,我又去请教wiki先生了,他告诉我要将initramfs编译到内核,并且不能启用压缩选项,还要使用cpio的后缀,我一下子被吓傻了,后来仔细一看选项,才知道也就是一个选项而已,而后缀对于linux来说也就是个更改文件名的事,最重要的是内核启动参数的设置(也就是我们要做一个编译在内核的命令行),
下面我讲讲我的做法:
在Processortype and features勾选Built-inkernel
command line,在下面的Built-incommandstring里写上root的设备号(/dev/sda2这是我的)和rootfstype=ext4,还有引导程序的具体位置,所以最后写下来就是:

root=/dev/sda2 rootfstype=ext4 init=/usr/lib/systemd/systemd quiet


在GeneralSetup下面勾选InitialRAM
filesystem and RAM disk(initramfs/initrd)support,并在下方的子选项中填写存储initramfs的位置,我的是/boot/initramfs-x86_64-3.12.21.cpio,注意这个后缀一定要是cpio,如果不是的话,编译内核的时候会出错的。
最后我们使用make和makeinstall来编译安装内核到/boot上。

make-jN && make install modules_install


这时我们在/boot分区已经可以看到我们编译好的内核、initramfs、config信息,下一步是要把内核变成efi文件,怎么变呢?也是很简单的,EFI引导起默认是扫描EFI分区上Boot目录下的efi文件,然后把启动权交给它,知道这层原理之后,我们可以在/boot分区上创建几个目录:

mkdir -pv /boot/EFI/Boot


接下来把内核文件改名为bootx64.efi并复制到这个目录下:
cp /boot/内核名 /boot/EFI/Boot/bootx64.efi

至此我们已完成EFISTUB Kernel的制作,我们可以不用安装任何引导器,直接使用EFI引导引入系统了。

U盘无法使用的问题:
我的U盘是fat32格式的,插上去KDE毫无反应,第一反应是内核的fat支持没有编译,后来进入相关内核选项,发现是编译好的,第一个错误排除,那还能有什么错误呢?我以为KDE无法自动挂载USB设备,于是我百度看下如何使用KDE的自动挂载功能,百度告诉我要启用全局的hal应用,于是我启用了,并
emege -avtDN world

一下,发现没有东西要重新编译,再到群里一问,才知道这个包早已不用了,为此还被群里的菜老师狠狠奚落一下,他告诉我用udisks,还告诉我要加USE,但我偏偏头脑愚钝,又去百度了,结果半天也无果,于是又去wiki看看,告诉我要用DBUS和polkit,于是全局加上这三个USE,再次Emerge-avtDNworld,还是没有任何包可以编译,心里想肯定不是这几个包的问题,况且systemd还和consolekit冲突,怎么可能让两个冲突的包都在全局的USE中呢?于是我打开google苦苦搜寻,终于找到了partprobe命令,
partprobe /dev/sdb (/dev/sdb是设备号,根据自己情况换)</span>

,我终于打开了我的U盘,至此问题全部解决,我两天的努力也得到了回报。

NetworkManager和dhcpcd:
这两个包,networkmanager需要添加到全局USE中,
<span style="font-size:14px;">emerge -avt networkmanager dhcpcd</span>

,后期开机启动的时候只需要启动networkmanager,如果两个都设置开机启动的话,是无法使用networkmanager的。

无线网卡显示site0:
这个问题一般可以通过编译linux-firmware这个包来解决,只要你是内核驱动都编译正确的话。内核编译驱动的时候可以有两种手段找到正确的驱动程序:
1、lspci查看硬件的信息,然后到内核里去找
2、编译内核前可以先执行make defconfig,再执行make
menuconfig,这样系统会根据目标系统的相关信息先生成一个config文件,然后自己再在上面修改,会比较方便点。
编译内核是个精细活,不要期待一次性优化到最佳,后期再慢慢优化。

参考资料:
1、http://unix.stackexchange.com/questions/52206/partition-table-not-recognized-by-linux-kernel
2、http://wiki.gentoo.org/wiki/EFI_stub_kernel
3、http://wiki.gentoo.org/wiki/KDE
4、http://wiki.gentoo.org/wiki/Xorg/Configuration
5、http://wiki.gentoo.org/wiki/Fcitx
6、https://wiki.gentoo.org/wiki/NetworkManager
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Gentoo