我的Gentoo Overlay和Linux软件推荐

Gentoo Overlay (Self)

  Gentoo自用的overlay,没有研究怎么public出去,大家如果感兴趣的话,可以将这个仓储clone到/usr/local/,然后将文件etc_portage_repo.postsync.d_local.conf复制到对应的位置,再sync应该就可以了。

  这里面的ebuild都不是我自己写的,而是在网上收录的,创作权归原来的作者所有。

  同时,自己系统的使用软件也在此整理,并不定期同步更新(如果有更改的话),供感兴趣的人参考。

系统的桌面贴图

image

image

软件整理

内核

gentoo的主流内核有三种:sys-kernel/gentoo-sources sys-kernel/ck-sources sys-kernel/vanilla-sources,第一种是gentoo官方打了补丁的内核,优点是menuconfig的时候配置方便,缺点是毕竟改过点东西,不是最稳定的选择;第二种是打了鸡血的内核,主要修改了cpu和硬盘的调度补丁,据说对桌面系统交互相应会好很多,缺点是更不主流;第三种是官方原版的内核,干净的很。
我以前用ck-sources,现在用gentoo-sources。
分区和引导方式为GPT+EFI,grub被废弃,用的sys-boot/refind帮助引导系统。

驱动

这个跟每个人的硬件有关系,基本在编译内核的时候,根据自己的情况进行相应的精简。我的电脑用的DELL的无线网卡,内核的开源驱动性能很低,换成net-wireless/broadcom-sta,性能和稳定性好了很多。

系统美化

桌面主题

  • GNOME SHELL: ZukiShell
  • GTK: Numix

桌面图标

  • Numix-Circle

桌面壁纸:varitey

  • variety 这是个壁纸自动替换程序,最初出现在Ubuntu上(已收录),可以自己设置壁纸的源、自动切换的时间等参数。

字体:infinality + 宋体

在行内有一句话,高分屏用什么字体都好看,低分屏用什么字体都渣渣。都这么多年头了,手机都2K屏了,笔记本居然还是720p。低分屏字体需要优化一下,不然太难看了。下面的方案是折腾了很久感觉最耐看、最好效果的。(见图)
安装app-eselect/eselect-infinality和media-libs/fontconfig-infinality,然后

1
2
3
sudo eselect infinality set 2 [infinality]
sudo eselect lcdfilter set 3 [infinality]
sudo eselect fontconfig disable/enable

将fontconfig中除了52-infinality.conf和65-nonlatin.conf两个enable之外,所有的conf都disable掉。
再将你windows系统的宋体(simsun.ttc)安装到Linux系统,修改/etc/fonts/conf.d/65-nonlatin.conf,第一个字体用好看的英文字体(宋体的英文显示太难看了,我用的Liberation Sans),然后跟中文宋体(NSimSun),这样在显示的时候,英文会优先使用第一个字体,然后遇到中文没法显示的时候,用下面的宋体显示。然后你GNOME中所有的字体都设置成Liberation Sans就可以了。

GNOME SHELL插件扩展:

Gnome Shell扩展那个之多啊,我启用的都列在下面了,自己没事可以走一下GNOME插件 ,需要注意的是由于接口还是协议的变化,chrome已经不支持了,请用火狐浏览器打开。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Applications Menu
Battery percentage
Caffeine
Clipboard indicator
Dash to dock
Focus my window
Freon
Frippery move clock
Frippery panel favorites
Impatience
Input method panel
Lock keys
Native window placement
Panel-docklet v18
Recent(item)s
Refresh wifi connections
Removable drive menu
Show desktop button
Status area horizontal spacing
Suspend button
Topicons
Pixel Saver
Turn off display

Docker容器技术使用实例

  本来不想这么快研究这个东西的,实在是上一个VPS Provider太让人失望和无语了:服务器无法访问,告诉我服务器配置错误。我问那该怎么办,答复我要VPS要重装。网络不通,数据也无法备份,关键是我重装之后还是不能访问,他们也没找到问题,最后发现是只有某些版本的系统的网络能通,也是无语了。之前运行了近一年了没有出现问题,现在服务器的数据全部没了,很多的额服务器需要重新配置,这也让我对系统的运营和部署产生了足够的重视。
  之前对Docker有一些了解,或许现在正是我这种情况的用武之地了,主要的服务和设置用Docker来部署,而私密的数据毕竟少量,自己按时备份。这样如果下次再出问题,几条命令就可以重新把环境部署回来了。
  对于企业级的部署,docker也是一个很好的解决方案,因为你只需要关心容器特定版本的实现,而不用关系host的环境,就是说你的服务可能只开发了RHEL的版本,但是可以方便的被部署到CentOS、Debian、Ubuntu、CoreOS等各个发行版上去,虽然对原生的性能会有所损耗,但是在现在计算机的配置几乎可以忽略不计了,国外已经有银行用容器部署他们的业务了,可靠性也是得到验证了的,是不是很酷?

下面开工:

1.注册账号

  DockerHub 注册用户账号。这个DockerHub相当于GitHub类似的,可以免费帮你存储公有的容器,别人都可以访问和下载(所以前面强调私有的数据要另外保存),然后每个用户可以免费创建一个私有的容器,更多的私有容器就需要花美刀了,跟GitHub是一个运营模式。

2.创建应用容器

2.1 安装相应的工具

  我用的是Fedora 22 Server,这些东西默认就给我装上了,其它版本请参照官方的安装手册。(官方文档说的添加docker组可以让docker在非root用户下运行,但是试验发现、改变/var/run/docker.socket权限后会自动变回来,所以fedora是没有办法的,只能sudo了)。此外docker在fedora的官方维持了一个版本,同时docker自己也维持了一个版本,两者差不多。

1
2
3
4
5
user@localhost  ~  sudo dnf install docker -y
user@localhost  ~  sudo systemctl enable docker
user@localhost  ~  sudo systemctl restart docker
user@localhost  ~  sudo docker run hello-world
user@localhost  ~  sudo docker run -it fedora:22 ping 8.8.4.4

直接使用docker可以查看docker的可用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
attach Attach to a running container
build Build an image from a Dockerfile
commit Create a new image from a container's changes
cp Copy files/folders from a container to a HOSTDIR or to STDOUT
create Create a new container
diff Inspect changes on a container's filesystem
exec Run a command in a running container
history Show the history of an image
images List images
info Display system-wide information
kill Kill a running container
login Register or log in to a Docker registry
logout Log out from a Docker registry
logs Fetch the logs of a container
pause Pause all processes within a container
port List port mappings or a specific mapping for the CONTAINER
ps List containers
pull Pull an image or a repository from a registry
push Push an image or a repository to a registry
rename Rename a container
restart Restart a running container
rm Remove one or more containers
rmi Remove one or more images
run Run a command in a new container
save Save an image(s) to a tar archive
search Search the Docker Hub for images
start Start one or more stopped containers
stop Stop a running container
tag Tag an image into a repository
top Display the running processes of a container
unpause Unpause all processes within a container

搭建基于Postfix和Dovecot的邮件服务器

最近帮飞哥搭建了一个Linux Mail Server,捣鼓了一天终于搞掂了。这里记录下来以备后用,由于时间仓促,很多参数和功能还不知所以然;-(。

1. 服务器环境

操作系统:CentOS 7.1
环境:apache php mariadb
软件:postfix dovecot roundcubemail postfixadmin
其它:在域名商添加邮件服务器的A记录和MX记录,这里用的mail.freesign.net
同时请申请数字证书,中文版页面的免费申请地址很难看到,估计就是故意不想让人找到的。前段时间还是3年的,现在签发只能管一年了。
关于LAMP环境的搭建网络上已经一大堆了,此处不表。Apache推荐开启https,因为postfixadmin和roundcubemail是网页端访问的,这样会比较安全。
添加邮件专用用户vmail:vmail
groupadd -g 5000 vmail
useradd -g vmail -u 5000 vmail -d /home/vmail -m

2. 邮件服务器搭建

2.1 设置服务器

在数据库中专门添加一个邮件的数据库。同时由于邮件服务器涉及到多个软件,这些软件的系统也是通过操作数据库的操作来实现的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
user@localhost  ~  mysql -u user -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 3857
Server version: 5.5.44-MariaDB MariaDB Server
Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>
MariaDB [(none)]> create database postfix;
MariaDB [(none)]> CREATE USER 'postfix'@'localhost' IDENTIFIED BY 'postfixadmin';
MariaDB [(none)]> CREATE USER 'postfix'@'localhost.localdomain' IDENTIFIED BY 'postfixadmin';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON `postfix` . * TO 'postfix'@'localhost';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON `postfix` . * TO 'postfix'@'localhost.localdomain';
MariaDB [(none)]> FLUSH PRIVILEGES;

(把数据库操作过程的输出信息省略了)

2.2 安装roundcubemail和postfixadmin

postfixadmin没有被打包到库中,所以需要手动下载源代码来安装。roundcubemail是epel中被打包了的,可以直接yum安装。

1
2
3
4
5
user@localhost  ~  sudo yum install roundcubemail
user@localhost  ~  cd /usr/share
user@localhost  /usr/share  sudo wget wget http://jaist.dl.sourceforge.net/project/postfixadmin/postfixadmin/postfixadmin-2.93/postfixadmin-2.93.tar.gz
user@localhost  /usr/share  sudo tar xzvf postfixadmin-2.93.tar.gz
user@localhost  /usr/share  sudo mv postfixadmin-2.93 postfixadmin

把postfixadmin解压到/usr/share目录,其实这步骤是跟roundcubemail学的。在安装roundcubemail 的时候,会在/etc/httpd/conf.d/roundcubemail.conf产生一个虚拟主机,对这个虚拟主机的别名和目录做如下设置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Alias /roundcubemail /usr/share/roundcubemail
Alias /mail /usr/share/roundcubemail
Alias /postfixadmin /usr/share/postfixadmin
<Directory /usr/share/roundcubemail/>
Options none
AllowOverride Limit
Require all granted
</Directory>
<Directory /usr/share/postfixadmin/>
Options none
AllowOverride Limit
Require all granted
</Directory>
<Directory /usr/share/roundcubemail/installer>
Options none
AllowOverride Limit
Require all granted
</Directory>

记得重启apache服务器。

postfixadmin算是一个postfix的管理前端,邮件服务器管理域名和用户账户都在这里。解压之后修改config.inc.php文件(官方推荐是创建config.local.php文件,便于后续升级),其实最主要是数据库相关的设置信息(重要的修改列出如下):

1
2
3
4
5
6
7
8
9
10
11
$CONF['configured'] = true;
$CONF['setup_password'] = 'abc123def';
$CONF['default_language'] = 'cn';
$CONF['database_type'] = 'mysqli';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfix';
$CONF['database_password'] = 'postfixadmin';
$CONF['database_name'] = 'postfix';
$CONF['admin_email'] = 'yourmailaddress@126.com';
$CONF['encrypt'] = 'dovecot:CRAM-MD5';
$CONF['dovecotpw'] = "/usr/bin/doveadm pw";

坑点说明:(1)setup_password需要满足密码复杂性要求,不是随便设置的,第一步设置明文,然后在页面生成加密后的密码,再将加密后的密文替换abc123def之后,才能进行添加管理员的操作;(2)encrypt需要修改,要跟后面其它部分设置一样;(3)CentOS7中doveadm打包到了/usr/bin目录,所以这里的路径需要更新;(4)templates_c目录的所属权限需要改为apache;
(postfixadmin的DOCUMENTS目录下的内容是个比较好的参考文档)

然后访问https://mail.freesign.net/postfixadmin/setup.php进行安装:第一步会生成加密的setup_passwd密码,替换config文件中的明文密码后,会让你创建一个管理账户,创建完成验证能登陆之后就先别做其它操作和设置了,因为很多东西还没有设置,创建域啥的没啥意义;
管理员和普通用户的管理路径在下面:
https://mail.freesign.net/postfixadmin/login.php
https://mail.freesign.net/postfixadmin/users/login.php

RedHat系列软件打包实例(二)

  上一篇算是对RPM软件一个简单的入门介绍。这一篇文章里,将对spec文件的各个参数进行较详细的探究和学习。其次,我们也将对strtest软件包进行改造,让它变的在Linux平台更“专业”像样一点。

1.修改strtest文件

  这里,我们对strtest的源代码进行修改,让它变成一个类似于后台服务进程一样的。
  当然不想弄一个复杂的服务端出来,因为这里只是进行验证测试:就让strtest心跳2s输出自己还活着的信息。由于现在的系统服务管理经过一段时间无力的抵制和抗议之后,全部屈服成systemd的了,所以这边也添加一个systemd的服务管理单元。
  src/str.cpp的代码内容如下(原谅我一个披着CPP的纯C)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
[makerpm@localhost SPECS]$ cat ~/dist/strtest-1.0.2/src/str.cpp
#include "str.h"
#include <unistd.h>
#include <stdio.h>
#include <time.h>
#include <sys/time.h>
const char* logfile = "/var/log/strtest.log";
int main(int argc , char **argv) {
struct timeval tv;
time_t timet;
struct tm* timep;
FILE* fp = fopen(logfile,"a");
if(!fp) {
fprintf(stderr,"Open logfile[%s] failed!\n", logfile);
return -1;
}
time(&timet);
timep = localtime(&timet);
fprintf(fp, "[%d-%d-%d %d:%d:%d]Starting service [%s] ...\n", timep->tm_year, timep->tm_mon, timep->tm_mday,
timep->tm_hour, timep->tm_min, timep->tm_sec, argv[0]);
while(true) {
fprintf(fp, "service[%s], I am alive --", argv[0]);
if(!gettimeofday(&tv, NULL)) {
fprintf(fp, "system time info:%ds-%dus\n", tv.tv_sec, tv.tv_usec);
}
fflush(fp);
sleep(2);
}
fclose(fp);
return 0;
}

2.添加strtest的systemd管理单元

2.1编写service文件

  systemd依赖于service文件管理服务,放置在/usr/lib/systemd/目录下,注意的是,systemd管理单元应当是操作系统的一部分,而不是strtest软件代码的一部分,不应当打包到源代码下面,而应该将下面的strtest.service放到和strtest-1.0.2.tar.bz2一样的~/rpmbuild/SOURCES/目录下面。(这个service文件是抄袭的openssh滴!)关于systemd的相关信息,后面可能还会再学习整理,这里先不细究。

1
2
3
4
5
6
7
8
9
10
11
12
13
[makerpm@localhost SOURCES]$ cat strtest.service
[Unit]
Description=Strtest server daemon
[Service]
ExecStart=/usr/bin/strtest $OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target

2.2 修正spec文件

  修改strtest的源代码,对spec文件没有影响(主要是版本号和修改日志等无关紧要的)。目前主要修改使得strtest.service打包进去:
  在%install部分,添加如下内容

1
2
3
# 用于安装systemd服务
install -d -m755 $RPM_BUILD_ROOT/%{_unitdir}
install -m644 %{SOURCE1} $RPM_BUILD_ROOT/%{_unitdir}/strtest.service

然后在%file部分,添加如下内容

1
%{_unitdir}/strtest.service

OK, we all done!

RedHat系列RPM软件打包实例(一)

  对于Linux操作系统,由于软件大部分都是开源软件构成,所以软件打包算是维护一个发行版的绝大多数任务。在Linux那个远古的时代,大家告诉你软件的安装都是下载源码、配置、编译和安装。

  下面以Fedora 22为例子演示,CentOS可能会有一些差异,暂且不表。且是在本地进行打包的,没有用到Fedora的Koji系统。

1.配置环境

1.1 安装打包软件

1
user@localhost  ~ sudo dnf install fedora-packager @development-tools rpmdevtools

1.2 配置打包环境

  手册强烈建议不要使用root打包,以防破坏系统;也不要使用系统常用用户打包,以防上传一些用户的私密信息;所以建议建立一个专门打包的普通用户。

1
2
3
4
5
6
7
8
9
user@localhost  ~ sudo useradd makerpm
user@localhost  ~ sudo usermod -a -G mock makerpm
user@localhost  ~ sudo passwd makerpm
user@localhost  ~ su makerpm
Password:
[makerpm@localhost ~]$ rpmdev-setuptree
[makerpm@localhost ~]$ ls
rpmbuild
[makerpm@localhost ~]$

然后打包环境就建立好了。

2.编写spec文件

2.1 参考已经打好的包

  Fedora发布的软件都是包含源代码的,所以可以借鉴这些包的打包脚本,先模仿再创作是最便捷的学习方式。

1
2
3
4
[makerpm@localhost dist]$ dnf download --source p7zip
[makerpm@localhost dist]$ mkdir p7zip-9.20.1-8.fc22
[makerpm@localhost dist]$ cd p7zip-9.20.1-8.fc22/
[makerpm@localhost p7zip-9.20.1-8.fc22]$ rpm2cpio ../p7zip-9.20.1-8.fc22.src.rpm | cpio -i

然后慢慢品味p7zip.spec吧!

2.2 准备打包的源代码包

  起始环境建立好之后,打包的过程,就是编写spec文件的过程。
  使用的材料是上一次的strtest工程进行打包,注意包的命名规范:name-version.tar.gz

1
2
3
4
5
user@localhost  ~/Study/project/to_linux  mv strtest strtest-1.0.1
user@localhost  ~/Study/project/to_linux  tar czvf strtest-1.0.1.tar.gz strtest-1.0.1
user@localhost  ~/Study/project/to_linux  sudo cp strtest-1.0.1.tar.gz /home/makerpm/rpmbuild/SOURCES/
user@localhost  ~/Study/project/to_linux  sudo chown makerpm:makerpm /home/makerpm/rpmbuild/SOURCES/strtest-1.0.1.tar.gz
user@localhost  ~/Study/project/to_linux 

利用autotools自动生成项目的Makefile

Linux下的软件,大多要不是各个发行版打好包的,要不是源代码下来后,

1
./configure && make && make install

  三步曲来完成安装的。对于一个工程,简单的话可以手写Makefile,但是随着项目不断的增长,需要跟踪的文件越来越多的时候,手动维护Makefile会比较的麻烦;同时随着各个发行版和平台的差异性的处理也很尽善尽美;(当然我主要是对Makefile不太熟悉,用这个工具可以傻瓜生成Makefile,是我最大的动力!

1.安装autotools

  在我的地沟油下,是被打包成下面两个文件的:

1
sudo dnf install automake autoconf

2.建立代码目录,添加测试的源代码文件

  这里直接无耻地照搬了这里的两个测试文件str.h和str.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
user@localhost  ~/Study/project/to_linux/test_project  mkdir include src
user@localhost  ~/Study/project/to_linux/test_project  cat include/str.h
#include <stdio.h>
int str(char *string);
user@localhost  ~/Study/project/to_linux/test_project  cat src/str.cpp
#include "str.h"
int str(char *string){
printf("\n----PRINT STRING----\n\"%s\"\n",string);
return 0;
}
int main(int argc , char **argv){
char str_read[1024];
printf("Please INPUT something end by [ENTER]\n");
scanf("%s",str_read);
return str(str_read );
}
user@localhost  ~/Study/project/to_linux/test_project 

3.生成configure.ac

  autoscan工具在给定目录及其子目录树中检查源文件,若没有给出目录,就在当前目录及子目录树中进行检查,并生成一个configure.scan文件。我们将这个文件命名为configure.ac(有的也命名成configure.in文件,但是.ac是新名字,建议用这个哦!)

1
user@localhost  ~/Study/project/to_linux/test_project  mv configure.scan configure.ac

修改之,添加或者修改如下条目(最终的修改结果会在文末贴出)

1
2
3
4
AC_INIT([strtest], [1.0], [taozhijiang@gmail.com])
AM_INIT_AUTOMAKE
AC_PROG_CXX
AC_CONFIG_FILES([Makefile])

4.执行aclocal

5.创建Makefile.am

  这是另外一个比较讲究的文件。
  一个工程可以创建多个可执行文件,每个可执行文件可以依赖自己的源文件、编译参数等信息。
  AUTOMAKE_OPTIONS提供了三个strictness等级,分别是foreign, gnu(默认), gnits三个,主要差异是对目录下的NEWS、README等要求,以及编译的输出等级等,foreign是最小等级。
  详情请见info automake 3.2 Strictness

5.1 方案1

  我们简单使用的文件如下:

1
2
3
4
5
AUTOMAKE_OPTIONS = foreign
bin_PROGRAMS = strtest
strtest_SOURCES = src/str.cpp
strtest_CPPFLAGS = -I include/ -include ./WINTYPES.H

  下面很明显啦,就是每个执行文件的名字,及其源代码和额外的编译参数。

开源的个人密码管理器软件KeePass

  这个文章的标题都建立了好久了,一直没有去写。觉得就是一个软件推荐,十分的没有技术含量啊。但是用了这么久,感觉确实好用,因此整理出来推荐给大家。

一、KeePass的优点

1.1 主流的密码管理器

  感觉主流的密码管理器,主要分成两类:保存在网络的和保存在本地的。

  • 前者以LastPass作为代表,所有的数据信息加密保存到云端,所以优势就是共享和更新比较的方便,但是缺点就是,万一你的密码或者供应商的数据和加密信息泄漏,你就完全被暴露了。LastPass这家公司曾经是出过此类安全问题的,有兴趣的同学可以扒扒这段历史
  • 后者主要以1Password和LastPass作为代表。主要区别是1Password是公司的商业产品,需要很多很多美刀,支持主流的平台(Linux除外),所以基本是高帅富的钟爱,这一点在AppStore的排行榜就可以看见。后者是社区化的开源产品,所有平台都支持(甚至黑莓、WindowsPhone都支持,良心软件啊!),Linuxer的首选,但是没有商业支持,所以死活完全自理。这一类是将密码数据库加密存储到本地,不会传递到互联网上,所以理论上是最安全的。你也可以将加密数据库存储到dropbox等网盘中,实现多设备的同步操作。
    以上列出的管理器,都有浏览器插件支持,后面再叙述。

1.2 KeePass的优势

  • 开源
      虽然我没有精力去查看他的源代码到底安不安全,有没有后门,但是开源的东西公布在网上,我相信大众的智慧会保证产品的质量,同时众目睽睽之下没有人会做这种留后门之类的事情。
  • 支持Linux
      曾经是Linux的忠实拥憋,现在还看见很多人折腾它。虽然现在都在“瘟都死”下学习娱乐,但对这种真正负责任的跨平台印象还是不错的。多平台多软件选择可以参见文档。
  • 免费
      1Password几十上百刀的价格确实把我吓尿了。对于生活在一个“软件不要钱”的国度,我买过的最贵的软件就是Windows序列号RMB10,以及Runtastic二十多块钱折扣时候买的。
  • 保存在本地,安全
      人家说在世界,尤其是天朝,互联网是有国界但是没有隐私的。所以我变得“焦虑、多疑”,我只相信数据在我的手中才是安全的。所以当前我的电脑插了一个SD卡,密码数据文件放在SD卡中,SD卡可以随身携带。

在Windows下通过虚拟机搭建Linux内核的学习和调试环境

  其实,这边文章在我的linux的repo里面已经介绍了,此处着重进行归纳和整理。

本文重点

  • Windows下虚拟机的嵌套
  • 内核编译和ramfs镜像的制作
  • Qemu使用特定内核启动

一、Windows下面VMware虚拟机嵌套KVM虚拟机

  像我之前用Gentoo,然后搭建个KVM的虚拟机,编译启动内核是十分方便的。但是碍于现在在Windows环境工作的原因,使用Gentoo作为桌面系统,还是有些不方便的。
  此外还有的一个原因,是感觉自己过了那种折腾的年龄了。往昔那种优化美化Linux桌面,寻求各种方式替代Windows的应用软件,对我已经没有任何的吸引力了。(我已老矣)
  在Windows下,至少需要一个Host来交叉编译内核,然后再找个Host启动跟踪这个内核,在一台机器上面如果用虚拟机,势必涉及到虚拟机的嵌套(因为如果开两个虚拟机,我还不知道调试的虚拟机怎么指定内核来启动,除非你将新内核拷贝到测试机覆盖文件系统上的内核,显然很麻烦!!!)Qemu+KVM就是这帮搞Linux的维护开发的,看看Qemu的启动参数就能吓尿你,所以用这家伙学内核乃是正道。
  默认的VMware是不支持这种嵌套虚拟化的,需要修改虚拟机的配置文件。我用的VMware Workstation 9,测试添加这些内容可行

1
2
3
apic.xapic.enabled = "FALSE"
vcpu.hotadd = "FALSE"
hypervisor.cpuid.v0 = "FALSE"

  然后在VMware里面安装你的Guest(将来也是Host)的系统吧!(我用的地沟油,贱兔太浪费时间和精力了)
  然后用qemu或者virt-manager再建立一个真正的Guest系统,我同样使用的Fedora。怎么用qemu或者virt-manager装系统,我不想说,你可以去参考archlinux或者gentoo的wiki。