<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>bhzhuOS &#8211; bhzhuOS爱好者(原StartOS爱好者)</title>
	<atom:link href="https://www.bhzhu203.com/category/bhzhuos/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.bhzhu203.com</link>
	<description>QQ群号125732839</description>
	<lastBuildDate>Tue, 04 Apr 2017 15:31:50 +0000</lastBuildDate>
	<language>zh-Hans</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.5.7</generator>
	<item>
		<title>将物理机正使用的操作系统制作成LiveCD笔记[未测试]</title>
		<link>https://www.bhzhu203.com/2017/04/04/%e5%b0%86%e7%89%a9%e7%90%86%e6%9c%ba%e6%ad%a3%e4%bd%bf%e7%94%a8%e7%9a%84%e6%93%8d%e4%bd%9c%e7%b3%bb%e7%bb%9f%e5%88%b6%e4%bd%9c%e6%88%90livecd%e7%ac%94%e8%ae%b0%e6%9c%aa%e6%b5%8b%e8%af%95/</link>
		
		<dc:creator><![CDATA[bhzhu203]]></dc:creator>
		<pubDate>Tue, 04 Apr 2017 15:31:49 +0000</pubDate>
				<category><![CDATA[bhzhuOS]]></category>
		<category><![CDATA[linux知识]]></category>
		<category><![CDATA[images]]></category>
		<category><![CDATA[img]]></category>
		<category><![CDATA[livecd]]></category>
		<guid isPermaLink="false">http://www.bhzhu203.com/?p=432</guid>

					<description><![CDATA[目录(?)[+] 将物理机正使用的操作系统制作成LiveCD笔记[未测试] 作者 [&#8230;]]]></description>
										<content:encoded><![CDATA[<div class="bog_copyright"></div>
<div></div>
<div>
<p>目录<a title="系统根据文章中H1到H6标签自动生成文章目录" href="file:///home/tmp/Desktop/all/%E5%B0%86%E7%89%A9%E7%90%86%E6%9C%BA%E6%AD%A3%E4%BD%BF%E7%94%A8%E7%9A%84%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%E5%88%B6%E4%BD%9C%E6%88%90LiveCD%E7%AC%94%E8%AE%B0[%E6%9C%AA%E6%B5%8B%E8%AF%95]%20-%20%E6%8A%80%E6%9C%AF%E5%B9%B6%E8%89%BA%E6%9C%AF%E7%9D%80%20-%20%E5%8D%9A%E5%AE%A2%E9%A2%91%E9%81%93%20-%20CSDN.NET.html#">(?)</a><a title="展开" href="file:///home/tmp/Desktop/all/%E5%B0%86%E7%89%A9%E7%90%86%E6%9C%BA%E6%AD%A3%E4%BD%BF%E7%94%A8%E7%9A%84%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%E5%88%B6%E4%BD%9C%E6%88%90LiveCD%E7%AC%94%E8%AE%B0[%E6%9C%AA%E6%B5%8B%E8%AF%95]%20-%20%E6%8A%80%E6%9C%AF%E5%B9%B6%E8%89%BA%E6%9C%AF%E7%9D%80%20-%20%E5%8D%9A%E5%AE%A2%E9%A2%91%E9%81%93%20-%20CSDN.NET.html#">[+]</a></p>
</div>
<div></div>
<div id="article_content" class="article_content">
<p align="center"><strong>将物理机正使用的操作系统制作成LiveCD笔记[未测试]</strong></p>
<h2><a name="t0"></a>作者：张华  发表于：2013-09-30<br />
版权声明：可以任意转载，转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明</h2>
<h2><a name="t1"></a>( http://blog.csdn.net/quqi99 )</h2>
<p>1, 使用物理机上的相关目录制作根文件系统<br />
1）准备块设备<br />
dd if=/dev/zero of=/bak/images/livecd.img bs=10M count=1024<br />
mkfs.ext4 /bak/images/livecd.img<br />
sudo mount -o loop /bak/images/livecd.img /mnt<br />
2）拷贝物理机上的相关目录，并删除不必要的文件减小体积，因为LiveCD要采用专用的模块故删掉模块，到时候再安装新内核。<br />
sudo mkdir /mnt/system<br />
sudo cp -a /{bin,etc,lib,lib64,sbin,root,usr} /mnt/system/<br />
cd /mnt/system<br />
sudo rm -rf usr/src<br />
sudo rm -rf lib/modules<br />
sudo rm -f lib/udev/write_*<br />
sudo rm -f etc/udev/rules.d/70*<br />
3）创建/etc/fstab与/etc/mtab, 注意，因为是LiveCD，并没有挂载根分区，而是proc和sys等启动过程必要的分区。<br />
在initrd切换到根文件系统之前, 挂载信息不会体现在/etc/mtab文件中，为保持一致，我们也添加/etc/mtab文件。<br />
cat &gt; /mnt/system/etc/fstab &lt;&lt; EOF<br />
none    /proc       proc        defaults        0    0<br />
sysfs    /sys       sysfs    defaults        0    0<br />
devpts    /dev/pts   devpts   gid=4,mode=620  0    0<br />
tmpfs    /dev/shm   tmpfs    defaults        0    0<br />
EOF<br />
cat &gt; /mnt/system/etc/mtab &lt;&lt; EOF<br />
none    /proc       proc        defaults        0    0<br />
sysfs    /sys       sysfs    defaults        0    0<br />
devpts    /dev/pts   devpts   gid=4,mode=620  0    0<br />
EOF<br />
如果不是LiveCD，而是一个可以直接启动的镜像的话, 这个文件可以不变。<br />
除非根文件系统所在的块设备是个新的才需要给它设置卷标(如：tune2fs -L my-rootfs ubuntute.img），然后修改/etc/fstab中的UUID。<br />
sudo mount -o loop ubuntut.img /mnt<br />
sudo vi /mnt/etc/fstab<br />
UUID=my-rootfs / ext4 defaults 0 0<br />
4) 可将这些目录压缩成一个块设备：<br />
sudo mksquashfs bin etc lib lib64 sbin root usr SYSTEM.img<br />
这样，initrd就可以解压这些目录(mount -o loop -t squashfs /mnt/SYSTEM.img /mnt/system)，<br />
如果是LIVECD这个目录是只读的，所以可以创建一个在tmpfs文件系统，然后用aufs将这两个(一个可写的/SYSTEM和SYSTEM.img挂载的只读的/mnt/system)合起来再挂载到/SYSTEM上。<br />
注意：/SYSTEM即作源目录又作为目标目录，aufs将它们理解成两个不同的目录，不会发生冲突。<br />
sudo mount -t tmpfs tmpfs /SYSTEM<br />
sudo mount -t aufs -o dirs=/SYSTEM=rw:/mnt/system=ro aufs /SYSTEM<br />
然后再在initrd里补齐其他目录，并设置相应的权限，这样就是一个完整的根文件系统了。<br />
sudo mkdir -pv dev proc sys tmp mnt home root<br />
sudo chmod 1777 tmp<br />
sudo 0700 root<br />
sudo mkdir -pv var/{run,log,lock,mail,spool}<br />
sudo mkdir -pv var/{opt,cache,lib/{misc,locate},local}<br />
sudo touch var/run/utmp var/log/{btmp,lastlog,wtmp}<br />
sudo chgrp utmp var/run/utmp var/log/lastlog<br />
sudo chmod 644 var/run/utmp var/log/lastlog</p>
<p>2, 编译内核, 以下配置都应该编译进内核，而不是模块，所以应是&#8221;*&#8221;,而不是&#8221;m&#8221;。<br />
在运行make menuconfig之前先打AUFS的patch, 内核中没有AUFS的代码，要先打patch(撤销patch加-R参数） ，选择origin/aufs3.9分支（因为内核用的是3.9版本）。<br />
git clone http://git.code.sf.net/p/aufs/aufs3-standalone<br />
cd aufs3-standalone/<br />
git checkout -b aufs3.9 origin/aufs3.9<br />
cd /bak/images/download/linux-2.6<br />
git checkout -b v3.9  v3.9<br />
patch -p1 &lt; /bak/images/download/aufs3-standalone/aufs3-kbuild.patch<br />
patch -p1 &lt; /bak/images/download/aufs3-standalone/aufs3-base.patch<br />
patch -p1 &lt; /bak/images/download/aufs3-standalone/aufs3-proc_map.patch<br />
patch -p1 &lt; /bak/images/download/aufs3-standalone/aufs3-standalone.patch<br />
patch -p1 &lt; /bak/images/download/aufs3-standalone/aufs3-loopback.patch<br />
cp -av /bak/images/download/aufs3-standalone/{fs,include} ./<br />
1)，支持initrd [默认已经是&#8221;*&#8221;了]<br />
General setup -&gt; Initial RAM fielsystem and RAM disk(initramfs/initrd) support<br />
Device Drivers -&gt; Block devices -&gt; RAM block device support，并设置&#8221;Default RAM disk size(kbytes)&#8221;不小于16384.<br />
2), Loop Device的支持 [默认已经是&#8221;*&#8221;了]<br />
Device Drivers -&gt; Block devices -&gt; Loopback device support<br />
3), SquashFS文件系统的支持，SquashFS文件系统用于将目录压缩成块设备 [默认已经是&#8221;*&#8221;了]<br />
File system -&gt; Miscellaneous filesystems -&gt; SquashFS 4.0 &#8211; Squashed file system support<br />
4), AUFS文件系统的支持, 用于将不同目录的文件合在一个目录下. LiveCD的SquashFS不可写，所以在TmpFS上创建可写的文件系统，然后用AUFS将它们连起来。<br />
File system -&gt; Miscellaneous filesystems -&gt; Aufs (Advance multi layered unification filesystem) support<br />
-&gt; Detect direct branch access (bypassing aufs)<br />
-&gt; NFS-exportable aufs<br />
-&gt; Readdir in userspace<br />
-&gt; Respect the attributes (mtime/ctime mainly) of special files<br />
-&gt; Ramfs (initramfs/rootfs) as an aufs branch<br />
5), EXT2文件系统支持，initrd一般使用ext2文件系统。<br />
File system -&gt; Second extended fs support，及其下的所有子项也都打*项，<br />
6), ISO960文件系统的支持 [默认已经是&#8221;*&#8221;了]<br />
File system -&gt; CD-ROM/DVD filesystems -&gt; ISO 9660 CDROM file system support<br />
7), CDROM设备的支持 [默认已经是&#8221;*&#8221;了]<br />
Divice Drivers -&gt; SCSI device support -&gt; SCSI disk support<br />
-&gt; SCSI generic support<br />
-&gt; SCSI CDROM support<br />
8), [可选]如果是做LIVEUSB的话，在上面的基础上，还要加一个驱动：<br />
USB设备驱动  [默认已经是&#8221;*&#8221;了],<br />
Device Drivers -&gt; HID Devices<br />
-&gt; USB support<br />
LiveUSB一般采用VFAT或EXT3文件系统<br />
File system -&gt; Ext3 jouralling file system support, diable“Default to &#8216;data=ordered&#8217; in ext3&#8243;，然后enable它下列所有的子项<br />
File system -&gt; DOS/FAT/NT Filesystems, 将MSDOS编译进内核，将VFAT编译成模块（因为VFAT并非内核启动过程中必须支持的文件系统）<br />
9), 最后编译安装内核及模块<br />
编译内核, make -j 4<br />
安装内核，cp arch/x86/boot/bzImage /mnt/boot/livecd-kernel<br />
安装模块</p>
<p>3, 创建initramfs<br />
可以根据已有系统创建initramfs，也可以从头创建initramfs。<br />
1) 我们先说前者，使用mkinitrd命令可生成已有的/boot/initramfs-3.9.10-100.fc17.x86_64.img生成一个新的，-f指这个的新的initramfs的路径，<br />
其后的3.9.8-100.fc17.x86_64是指/lib/modules/3.9.8-100.fc17/, 添加新模块用&#8211;with参数：<br />
sudo mkinitrd -f /boot/initramfs-3.9.10-100.fc17.x86_64.new.img 3.9.8-100.fc17.x86_64 &#8211;with usb-storage<br />
还有一种方法是，解压initramfs，修改了之后，再重新生成即可。<br />
mkdir /tmp/tmp &amp;&amp; cd /tmp/tmp<br />
sudo gzip -cd /boot/initramfs-3.9.10-100.fc17.x86_64.img |sudo cpio -id<br />
修改了之后，再重新生成即可，<br />
find . -print |cpio &#8211;quiet -c -o |gzip -9 &gt; /boot/initramfs-3.9.10-100.fc17.x86_64.new.img<br />
2)如果从重开始创建intramfs的话，首先创建一些目录：<br />
1, cd /mnt/initramfs &amp;&amp; mkdir bin etc lib proc sys<br />
2,/bin目录，即下面init脚本用到的所有命令都得拷过来<br />
cp -a /bin/{bash,chgrp, cp, grep, mkdir,sed,dd,cat,chmod,mount,sleep} bin<br />
cp -a usr/bin/{touch,killall} bin<br />
cp -a /sbin/{switch_root,udevd,udevadm} bin<br />
3,/lib目录，可以使用一个脚本将/bin目录脚本的ldd所依赖的库全部持过来<br />
cp -a /lib/udev lib<br />
cp -a /etc/udev etc<br />
sudo ./create_lib.sh$MYLINUX<br />
$ cat create_lib.sh<br />
ROOT=$1<br />
libs=`find $ROOT/bin-type f -perm /111 -exec &#8220;ldd&#8221; {} \;|cut -d \&gt; -f 2|cut-d <span id="MathJax-Element-1-Frame" class="MathJax"><span id="MathJax-Span-1" class="math"><span id="MathJax-Span-2" class="noError">-f 1|sort |uniq`<br />
echo $libs<br />
for lib in $libs<br />
do<br />
if [ -f $lib ];then<br />
if [ !-f $ROOT/$lib ] ;then<br />
dir=`dirname $ROOT$lib`<br />
if [ ! -d $dir ];then<br />
mkdir -pv $dir<br />
fi<br />
cp -av $lib $ROOT$lib<br />
if [ -h $lib ]; then<br />
source=`dirname $lib`/`readlink $lib`<br />
cp -av $source $ROOT$source<br />
echo $source &gt;&gt; liblist<br />
fi<br />
fi<br />
fi<br />
done<br />
echo &#8220;Done!&#8221;<br />
4, 用户及组信息,<br />
cp -a /etc/{group, passwd} etc<br />
5, 创建一个空的fstab,<br />
touch etc/fstab<br />
6,创建LiveCD的卷标，这个和下面init脚本中的要一致<br />
echo &#8220;mylivecd&#8221; &gt; /mnt/LABEL<br />
7,首先创建init脚本，解释见脚本中的注释：<br />
#!/bin/bash<br />
##先要加载内核文件系统sysfs，以及很多地方都要用到的proc文件系统<br />
mount -t proc proc /proc<br />
mount -t sysfs sysfs /sys<br />
##使用udev加载dev设备到内存中(tmpfs)<br />
mount -n -t tmpfs -o mode=0755 udev /dev<br />
##启动udev设备需先创建三个特殊设备文件console, null和stdin<br />
mknod -m 600 /dev/console c 5 1<br />
mknod -m 666 /dev/null c 1 3<br />
mknod -m 666 /dev/stdin c 22 0<br />
chmod 1777 /dev/shm<br />
##避免如果uevent_helper里值是/sbin/hotplug时发消息给/sbin/hotplug<br />
echo &#8220;&#8221; &gt; /sys/kernel/uevent_helper<br />
##使用udev创建设备<br />
udevd &#8211;daemon<br />
mkdir -p /dev/.udev/queue<br />
udevadm trigger<br />
udevadm settle<br />
##initramfs执行完之后会switch_root到/SYSTEM目录，所以先创建一些mount要用到的目录<br />
export SYSTEM=/SYSTEM<br />
mkdir -p ${SYSTEM} /mnt<br />
mount -t tmpfs tmpfs /mnt<br />
mkdir -p /mnt/{cdrom,system}</p>
<p>##搜索LiveCD所在的设备，光盘的卷标位于32808节点开始的32个字节，找到之后去掉前后空格再比较<br />
CDROM_OK=&#8221;F&#8221;<br />
while [ &#8220;${CDROM_OK}&#8221; = &#8220;F&#8221; ]<br />
do<br />
for i in $(cat /proc/sys/dev/cdrom/info | grep &#8220;drive name&#8221; \<br />
| sed &#8216;s@drive name:@@g&#8217;)<br />
do<br />
LABEL=$(dd if=/dev/${i} bs=1 skip=32808 count=32 2&gt;/dev/null)<br />
LABEL=$(echo &#8220;${LABEL}&#8221; | grep -o &#8220;[^ ]\+\(\+[^ ]\+</span></span></span>*&#8221;)<br />
if [ &#8220;${LABEL}&#8221; = &#8220;mylivecd&#8221; ]; then<br />
mount -t iso9660 /dev/${i} /mnt/cdrom<br />
CDROM_OK=&#8221;T&#8221;<br />
break;<br />
fi<br />
done<br />
if [ &#8220;${CDROM_OK}&#8221; = &#8220;F&#8221; ]; then<br />
sleep 3<br />
fi<br />
done</p>
<p>##LIVECD的挂载(/mnt/system)目录是只读的(mount -o loop -t squashfs /mnt/SYSTEM.img /mnt/system)，<br />
##所以再创挂载一个可写目录/SYSTEM在内存tmpfs文件系统之上，最后用aufs将这两个目录合起来再挂载到/SYSTEM目录<br />
mount -t tmpfs tmpfs ${SYSTEM}<br />
mount -o loop -t squashfs /mnt/cdrom/SYSTEM.img /mnt/system<br />
mount -t aufs -o dirs=${SYSTEM}=rw:mnt/system=ro aufs ${SYSTEM}</p>
<p>##创建除SYSTEM.img中bin,etc,lib,lib64,sbin,root,usr以外的最终根文件系统所需要的其他目录<br />
mkdir -p ${SYSTEM}/{dev,proc,sys,tmp,mnt,initrd,home}<br />
chmod 1777 ${SYSTEM}/tmp<br />
chmod 0700 ${SYSTEM}/root<br />
mkdir -p ${SYSTEM}/var/{run,log,lock,mail,spool}<br />
mkdir -p ${SYSTEM}/var/{opt,cache,lib/{misc,locate},local}<br />
mkdir -p ${SYSTEM}/usr/src{,-all,-tmp}<br />
mount -t tmpfs tmpfs ${SYSTEM}/usr/src-tmp<br />
mount -o loop -t squashfs /mnt/cdrom/SOURCES.img ${SYSTEM}/usr/src-all<br />
mount -t aufs -o dirs=${SYSTEM}/usr/src-tmp=rw:${SYSTEM}/usr/src-all aufs ${SYSTEM}/usr/src</p>
<p>case $(cat /proc/cmdline | awk -F&#8217;book=&#8217; &#8216;{print $2}&#8217; | awk &#8216;{print $1}&#8217;) in<br />
CROSS)<br />
ln -s cross-sources ${SYSTEM}/usr/src/sources<br />
ln -s cross-patches ${SYSTEM}/usr/src/patches<br />
;;<br />
HURD)<br />
ln -s hurd-sources ${SYSTEM}/usr/src/sources<br />
ln -s hurd-patches ${SYSTEM}/usr/src/patches<br />
;;<br />
LOCAL | *)<br />
ln -s local-sources ${SYSTEM}/usr/src/sources<br />
ln -s local-patches ${SYSTEM}/usr/src/patches<br />
;;<br />
esac</p>
<p>touch ${SYSTEM}/var/run/utmp ${SYSTEM}/var/log/{btmp,lastlog,wtmp}<br />
chgrp utmp ${SYSTEM}/var/run/utmp ${SYSTEM}/var/log/lastlog<br />
chmod 664 ${SYSTEM}/var/run/utmp ${SYSTEM}/var/log/lastlog</p>
<p>killall udevd<br />
##initrd使用pivot_root命令针对挂载在根文件系统上的设备进行切换，<br />
##但initramfs本身就直接建立在根文件系统(rootfs,tmpfs的一个实例）之上，<br />
##不存在挂载，pivot_root无法完成任务,所以使用switch_root, switch_root相当于：<br />
## find -xdev / -exec rm &#8216;{}&#8217; &#8216;;&#8217; &amp;&amp; cd /newmount &amp;&amp; mount &#8211;move . / &amp;&amp; chroot . &amp;&amp; exec init<br />
exec switch_root ${SYSTEM} /sbin/init</p>
<p>8, 使用linux kernel源码里的gen_iniramfs_list.sh和gen_init_cpi脚本生成initramfs<br />
cd /mnt/initramfs/..<br />
sh ./gen_initramfs_list.sh initramfs &gt; file_list<br />
./gen_init_cpio file_list &gt; initramfs.img<br />
gzip -9 initramfs.img<br />
cp initramfs.img.gz /mnt/boot/</p>
<p>4, 安装grub<br />
1)创建目录，mkdir -p /mnt/boot/grub<br />
2)安装grub模块文件<br />
cp -a /usr/lib/grub/i386-pc/*.mod /mnt/boot/grub<br />
cp -a /usr/lib/grub/i386-pc/*.lst /mnt/boot/grub<br />
3)创建grub配置文件<br />
cat /mnt/boot/grub/grub.cfg<br />
set timeout=5<br />
menuentry &#8220;LiveCD for make GNU/Linux&#8221; {<br />
linux /boot/livecd-kernel book=LOCAL<br />
initrd /boot/initramfs.img.gz<br />
}<br />
menuentry &#8220;LiveCD for cross make GNU/Linux&#8221; {<br />
linux /boot/livecd-kernel book=CROSS<br />
initrd /boot/initramfs.img.gz<br />
}<br />
menuentry &#8220;LiveCD for make GNU/Hurd&#8221; {<br />
linux /boot/livecd-kernel book=HURD<br />
initrd /boot/initramfs.img.gz<br />
}<br />
insmod vbe<br />
set gfxpayload=800x600x16</p>
<p>5, 创建livecd启动文件，grub-mkimage命令将iso9660,linux和biosdkist模块合并一个模块组合文件，再用cat命令合并cdboot.img<br />
grub-mkimage -o core.img iso9660 linux biosdisk<br />
cat /usr/lib/grub/i386-pc/cdboot.img core.img &gt; /mnt/boot/livecd.img</p>
<p>6, 使用mkisofs生成iso文件<br />
mkisofs -R -boot-info-table -b /mnt/boot/livecd.img -V &#8216;mylived&#8221; -o mylivecd.iso iso</p>
<p>总结，<br />
如果不是将物理机正使用的操作系统做成LiveCD的话，只是想将物理机正使用的操作系统做一个OpenStack镜像的话，我想应该不用这么周折。<br />
<strong>不过这些我都没有测试</strong>，只是我理论上的想象。怎么做具有多个分区的镜像呢？有空再研究吧。<br />
1）准备块设备<br />
dd if=/dev/zero of=/bak/images/livecd.img bs=10M count=1024<br />
mkfs.ext4 /bak/images/openstack.img<br />
sudo mount -o loop /bak/images/openstack.img /mnt<br />
2）拷贝物理机上的相关目录{bin,etc,lib,lib64,sbin,root,usr}，并删除不必要的文件减小体积。<br />
注意：这里和上面不同的地方是不需要删除lib/modules，因为我们不需要重新编译内核<br />
sudo mkdir /mnt<br />
sudo cp -a /{bin,etc,lib,lib64,sbin,root,usr} /mnt<br />
sudo rm -rf usr/src<br />
sudo rm -f lib/udev/write_*<br />
sudo rm -f etc/udev/rules.d/70*<br />
因为根文件系统所在的块设备的UUID (<strong> 可用“sudo fdisk -l &amp;&amp; sudo blkid lxc.img”命令检查</strong>)变化了，所以要更新/etc/fstab文件<br />
UUID=00b037f0-8332-42e2-abf2-04207283b7f6 / ext4 defaults 1 1<br />
或者使用tune2fs给这个新设备设置一个新标签：<strong>tune2fs -L my-rootfs </strong>/bak/images/openstack.img，还要改/etc/fstab, 改成“<strong>LABEL=my-rootfs / ext4 defaults 0 0</strong>”</p>
<p>这样/boot/grub/grub.conf文件里的kernel段，下面两种方式都是可以的(如果是USB启动的话，设备名总是会变，还是用UUID为好）：</p>
<p>kernel /vmlinux ro<strong> root=LABEL=/</strong> rhgb quiet</p>
<p>kernel /vmlinux ro <strong>root=UUID=my-rootfs </strong>rhgb quiet</p>
<p>3）不需要重新编译内核，因为不是livecd，额外的驱动似乎不必要</p>
<p>4)initramfs也不需要重新生成，因为不是livecd, 不需要为livecd定制什么，<br />
但是对于initramfs里除bin,etc,lib,lib64,sbin,root,usr以外的最终根文件系统所需要的其他目录<br />
##创建除SYSTEM.img中bin,etc,lib,lib64,sbin,root,usr以外的最终根文件系统所需要的其他目录{dev,proc,sys,tmp,mnt,initrd,home}还应该要创建的。<br />
mkdir -p /mnt/{dev,proc,sys,tmp,mnt,initrd,home}<br />
chmod 1777 /mnt/tmp<br />
chmod 0700 /mnt/root<br />
mkdir -p /mnt/var/{run,log,lock,mail,spool}<br />
mkdir -p /mnt/var/{opt,cache,lib/{misc,locate},local}<br />
mkdir -p /mnt/usr/src{,-all,-tmp}<br />
touch /mnt/var/run/utmp ${SYSTEM}/var/log/{btmp,lastlog,wtmp}<br />
chgrp utmp /mnt/var/run/utmp /mnt/var/log/lastlog<br />
chmod 664 /mnt/var/run/utmp /mnt/var/log/lastlog<br />
5)应该就完了<br />
或者2)3)4)步直接通过dd命令全部拷过来了再删除不必要的目录，如: losetup -a &amp;&amp; dd /dev/sda7 /dev/loop0<br />
2013.10.05更新：</p>
<p>如果是qcow2格式的镜像文件，可以使用nbd打开, (<strong>还可以用kpartx或者guestfish</strong>)</p>
<p>1, nbd可以查看qcow2镜像中的分区，指定max_part参数开启nbd模块，默认nbd的增加分区的功能是关闭的，这个参数指定了一个nbd设备可以有多少个分区。<br />
modprobe nbd max_part=8<br />
2, 加载qcow2镜像到nbd设备中<br />
$ sudo qemu-nbd &#8211;connect=/dev/nbd0 /bak/images/centos6.4.img<br />
$ ls /dev/nbd0*<br />
/dev/nbd0  /dev/nbd0p1  /dev/nbd0p2  /dev/nbd0p3<br />
$ sudo fdisk -l /dev/nbd0<br />
Disk /dev/nbd0: 21.2 GB, 21172846592 bytes<br />
255 heads, 63 sectors/track, 2574 cylinders, total 41353216 sectors<br />
Units = sectors of 1 * 512 = 512 bytes<br />
Sector size (logical/physical): 512 bytes / 512 bytes<br />
I/O size (minimum/optimal): 512 bytes / 512 bytes<br />
Disk identifier: 0x000591db</p>
<p>Device Boot      Start         End      Blocks   Id  System<br />
/dev/nbd0p1            2048    18434047     9216000   83  Linux<br />
/dev/nbd0p2        18434048    20482047     1024000   82  Linux swap / Solaris<br />
/dev/nbd0p3   *    20482048    41353215    10435584   83  Linux<br />
3, sudo mount /dev/nbd0p3 /mnt2/</p>
<p>一个制作根文件系统的脚本：</p>
<p>#!/bin/bash<br />
# vim: set ts=4 sw=4 et nu<br />
set -e<br />
usage=&#8221;Usage: $0 &lt;name&gt;&#8221;<br />
name=$1<br />
if [ -z &#8220;$name&#8221; ]; then<br />
echo $usage<br />
exit 1;<br />
fi</p>
<p>libvirt_xml=&#8221;/bak/images/lxc/$name/libvirt.xml&#8221;<br />
rootfs=&#8221;/bak/images/lxc/$name/rootfs&#8221;</p>
<p>echo &#8220;Initializing rootfs: $rootfs&#8221;</p>
<p>mkdir -p $rootfs</p>
<p>mkdir -p $rootfs/home<br />
mkdir -p $rootfs/opt<br />
mkdir -p $rootfs/proc<br />
mkdir -p $rootfs/sys<br />
mkdir -p $rootfs/root<br />
mkdir -p $rootfs/media<br />
mkdir -p $rootfs/mnt<br />
mkdir -p $rootfs/srv<br />
mkdir -p $rootfs/var</p>
<p>for d in bin etc lib lib64 mnt sbin selinux usr var; do<br />
echo &#8220;Preparing files /$d &#8230;&#8221;<br />
#rsync -ap &#8220;/$d/&#8221; &#8220;$rootfs/$d&#8221;<br />
mkdir -p $rootfs/$d &amp;&amp; mount &#8211;bind /$d $rootfs/$d<br />
done</p>
<p>rm -rf &#8220;$rootfs/var/cache/*&#8221;</p>
<p>echo &#8220;Creating /dev&#8221;</p>
<p>dev_path=&#8221;$rootfs/dev&#8221;<br />
rm -rf $dev_path<br />
mkdir -p $dev_path<br />
mknod -m 666 ${dev_path}/null c 1 3<br />
mknod -m 666 ${dev_path}/zero c 1 5<br />
mknod -m 666 ${dev_path}/random c 1 8<br />
mknod -m 666 ${dev_path}/urandom c 1 9<br />
mkdir -m 755 ${dev_path}/pts<br />
mkdir -m 1777 ${dev_path}/shm<br />
mknod -m 666 ${dev_path}/tty c 5 0<br />
mknod -m 666 ${dev_path}/tty0 c 4 0<br />
mknod -m 666 ${dev_path}/tty1 c 4 1<br />
mknod -m 666 ${dev_path}/tty2 c 4 2<br />
mknod -m 666 ${dev_path}/tty3 c 4 3<br />
mknod -m 666 ${dev_path}/tty4 c 4 4<br />
mknod -m 600 ${dev_path}/console c 5 1<br />
mknod -m 666 ${dev_path}/full c 1 7<br />
mknod -m 600 ${dev_path}/initctl p<br />
mknod -m 666 ${dev_path}/ptmx c 5 2</p>
<p>echo &#8220;Creating network config eth0&#8221;<br />
cat &lt;&lt;EOF &gt; ${rootfs}/etc/sysconfig/network-scripts/ifcfg-eth0<br />
DEVICE=eth0<br />
BOOTPROTO=dhcp<br />
ONBOOT=yes<br />
TYPE=Ethernet<br />
USERCTL=yes<br />
PEERDNS=yes<br />
IPV6INIT=no<br />
EOF</p>
<p>#echo &#8220;Creating network config resolv.conf&#8221;<br />
#cat &lt;&lt;EOF &gt; ${rootfs}/etc/resolv.conf<br />
#nameserver 8.8.8.8<br />
#EOF</p>
<p>echo &#8220;Creating network config sysconfig/network&#8221;<br />
# set the hostname<br />
cat &lt;&lt;EOF &gt; ${rootfs}/etc/sysconfig/network<br />
NETWORKING=yes<br />
HOSTNAME=${name}<br />
EOF</p>
<p>echo &#8220;Creating config fstab&#8221;<br />
#<br />
cat &lt;&lt;EOF &gt; ${rootfs}/etc/fstab<br />
none /dev/pts devpts defaults 0 0<br />
none /proc    proc   defaults 0 0<br />
none /sys     sysfs  defaults 0 0<br />
none /dev/shm tmpfs  defaults 0 0<br />
EOF</p>
<p>echo &#8220;Creating etc/hosts&#8221;<br />
# set minimal hosts<br />
cat &lt;&lt;EOF &gt; $rootfs/etc/hosts<br />
127.0.0.1 localhost $name<br />
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6<br />
EOF</p>
<p># selinux<br />
echo &#8220;Creating selinux&#8221;<br />
cat &lt;&lt;EOF &gt; $rootfs/etc/selinux/config<br />
SELINUX=disabled<br />
SELINUXTYPE=targeted<br />
EOF</p>
<p>#<br />
echo &#8220;Creating init for guest&#8221;<br />
cat &lt;&lt;EOF &gt; $rootfs/bin/lxc_guest_init.sh<br />
#!/bin/bash<br />
export PATH=$PATH:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin<br />
export PS1=&#8221;[\u@\h \W]\\$ &#8221;</p>
<p>mount -t devtmpfs none /dev<br />
mount -t devpts none /dev/pts<br />
mount -t tmpfs none /dev/shm</p>
<p>/etc/init.d/network start<br />
/etc/init.d/sshd start</p>
<p>exec /bin/bash<br />
EOF<br />
chmod 755 &#8220;$rootfs/bin/lxc_guest_init.sh&#8221;</p>
</div>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>bhzhuos-64bit-170404</title>
		<link>https://www.bhzhu203.com/2017/04/04/bhzhuos-64bit-170404/</link>
		
		<dc:creator><![CDATA[bhzhu203]]></dc:creator>
		<pubDate>Tue, 04 Apr 2017 14:57:30 +0000</pubDate>
				<category><![CDATA[bhzhuOS]]></category>
		<category><![CDATA[170404]]></category>
		<category><![CDATA[64]]></category>
		<category><![CDATA[bhzhuos]]></category>
		<guid isPermaLink="false">http://www.bhzhu203.com/?p=428</guid>

					<description><![CDATA[]]></description>
										<content:encoded><![CDATA[]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>bhzhuOS1.0-beta4 is release</title>
		<link>https://www.bhzhu203.com/2016/09/11/bhzhuos1-0-beta4-is-release/</link>
		
		<dc:creator><![CDATA[bhzhu203]]></dc:creator>
		<pubDate>Sun, 11 Sep 2016 14:59:38 +0000</pubDate>
				<category><![CDATA[bhzhuOS]]></category>
		<category><![CDATA[beta4]]></category>
		<category><![CDATA[bhzhuos1]]></category>
		<category><![CDATA[release]]></category>
		<guid isPermaLink="false">http://www.bhzhu203.com/?p=358</guid>

					<description><![CDATA[]]></description>
										<content:encoded><![CDATA[]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>bhzhuOS虚拟机安装教程</title>
		<link>https://www.bhzhu203.com/2016/07/24/bhzhuos%e8%99%9a%e6%8b%9f%e6%9c%ba%e5%ae%89%e8%a3%85%e6%95%99%e7%a8%8b/</link>
		
		<dc:creator><![CDATA[bhzhu203]]></dc:creator>
		<pubDate>Sun, 24 Jul 2016 09:32:38 +0000</pubDate>
				<category><![CDATA[bhzhuOS]]></category>
		<category><![CDATA[bhzhuos]]></category>
		<category><![CDATA[安装]]></category>
		<category><![CDATA[虚拟机]]></category>
		<guid isPermaLink="false">http://www.bhzhu203.com/?p=304</guid>

					<description><![CDATA[有别于liveCD体验，下面我们要安装把bhzhuOS系统安装到虚拟机（实体机里 [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>有别于liveCD体验，下面我们要安装把bhzhuOS系统安装到虚拟机（实体机里，实体机安装方法与该教程大致相同，只是需要选择安装的分区盘符需小心选择），可以长久使用和体验它。</p>
<p>&nbsp;</p>
<p><strong>1。首先创建一个容量合适的虚拟机，32位，开启PAE扩展功能</strong></p>
<p><img fetchpriority="high" decoding="async" class="alignnone size-full wp-image-310" src="https://www.bhzhu203.com/wp-content/uploads/2016/07/GIFrecord_2016-07-24_151018.gif" alt="GIFrecord_2016-07-24_151018" width="852" height="657" /></p>
<p><img decoding="async" class="alignnone size-full wp-image-311" src="https://www.bhzhu203.com/wp-content/uploads/2016/07/GIFrecord_2016-07-24_151220.gif" alt="GIFrecord_2016-07-24_151220" width="800" height="643" /></p>
<p><strong>2。进入桌面后，右键，打开终端，将未分区的空盘建立分区</strong></p>
<p>sudo  su  提权至root权限</p>
<p>fdisk -l   列出所有盘，找到需要安装的盘名称。虚拟机上如果选错了盘不要紧，毕竟是虚拟机；可是实体机如果选错了盘，就找不回盘里的数据啦，哈哈哈</p>
<p>fdisk  /dev/sdx   使用fdisk 对某盘进行编辑分区。有一定linux基础的同学应该比较轻车熟路了，如何新建一个盘分区</p>
<p>依次按下  n 新建，p主分区，1 分区一，2个回车默认，最后输入wq保存退出，自此新建了一个分区 /dev/sdx1</p>
<p>分区、盘这些概念和windows是差不多的 /dev/sdx 是一个盘， /dev/sdx1是盘里划分出的一个分区</p>
<p><img decoding="async" class="alignnone size-full wp-image-313" src="https://www.bhzhu203.com/wp-content/uploads/2016/07/GIFrecord_2016-07-24_152234.gif" alt="GIFrecord_2016-07-24_152234" width="800" height="602" /></p>
<p><strong>3。使用ext4格式化分区，这个和使用ntfs格式化分区的意思是差不多的</strong></p>
<p>mkfs.ext4  /dev/sdx1</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-315" src="https://www.bhzhu203.com/wp-content/uploads/2016/07/GIFrecord_2016-07-24_152446.gif" alt="GIFrecord_2016-07-24_152446" width="800" height="602" /></p>
<p><strong>4.把格式化好的盘挂载到某个路径，如 /mnt ，这个和windows下显示盘符是差不多的，只不过windows是比较自动的</strong></p>
<p>mount /dev/sda1   /mnt   挂载新盘</p>
<p>mount  /dev/loop0  /media  挂载bhzhuos光盘设备至 /media 文件夹/路径，以便下一步把光盘内容复制到新盘</p>
<p>df -h  显示系统挂载点的信息</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-316" src="https://www.bhzhu203.com/wp-content/uploads/2016/07/GIFrecord_2016-07-24_153643.gif" alt="GIFrecord_2016-07-24_153643" width="800" height="602" /></p>
<p><strong>5。复制光盘系统内容到新盘</strong></p>
<p>cp   -ar   /media/*  /mnt              cp是复制命令，-a 参数，保留文件属性；-r 递归操作，就是把下级所有子文件夹都复制； /media/*  带*号表示/media/文件的内容，而不是/media/本身这一个文件夹，学会正则表达式的同学应该知道的。  /mnt是目的的路径</p>
<p>等待10分钟左右，复制完毕，如果想看到复制的详细的信息，加 -v 参数如 cp   -avr   /media/*  /mnt</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-317" src="https://www.bhzhu203.com/wp-content/uploads/2016/07/GIFrecord_2016-07-24_153853.gif" alt="GIFrecord_2016-07-24_153853" width="800" height="602" /></p>
<p>漫长的复制，哈</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-318" src="https://www.bhzhu203.com/wp-content/uploads/2016/07/GIFrecord_2016-07-24_154138.gif" alt="GIFrecord_2016-07-24_154138" width="800" height="602" /></p>
<p>/mnt下就是我们新系统的文件，文件已经复制到新盘了！</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-319" src="https://www.bhzhu203.com/wp-content/uploads/2016/07/GIFrecord_2016-07-24_155005.gif" alt="GIFrecord_2016-07-24_155005" width="800" height="602" /></p>
<p><strong>6。内容复制到了新盘，但是要去配置新系统里的信息，准备好chroot环境</strong></p>
<p>chroot是change root的意思，就是改变当前的根目录环境，进入到新系统里，chroot进去之后，所有的操作都是新系统的，而不是光盘环境的</p>
<p>mount  -o  bind   /dev  /mnt/dev    把光盘/dev/目录挂载到新盘的目录上 ，bind参数是目录挂载到目录的意思,/dev是设备目录</p>
<p>mount  -o  bind   /sys /mnt/sys   /sys是内核参数目录</p>
<p>mount  -o  bind   /proc  /mnt/proc    /proc是内存目录</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-322" src="https://www.bhzhu203.com/wp-content/uploads/2016/07/GIFrecord_2016-07-24_155230.gif" alt="GIFrecord_2016-07-24_155230" width="800" height="602" /></p>
<p>&nbsp;</p>
<p><strong>7。chroot，安装grub至新盘</strong></p>
<p><strong>chroot   /mnt   </strong> ，进入到/mnt的chroot环境，<strong>注意，这一步必须做，不然后续的操作都无效！，终端前显示 “root[/]”则是chroot成功<br />
</strong></p>
<p>grub-install  /dev/sda   把grub安装到盘的起始头。为什么不是/dev/sda1？为了避免不必要的麻烦，显示“No error reported”则是安装成功了grub。grub是一个多系统的引导，可以引导linux和windows</p>
<p>以下动图update-grub 了，先略去，不操作，下面几步再操作</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-323" src="https://www.bhzhu203.com/wp-content/uploads/2016/07/GIFrecord_2016-07-24_155701.gif" alt="GIFrecord_2016-07-24_155701" width="800" height="602" /></p>
<p><strong>8。把新盘的UUID写到/etc/fstab里，可以实现开机自动挂载根分区（在chroot环境）</strong>（好像根分区不写也没关系的，呵呵）</p>
<p>ls -l  /dev/disk/by-uuid/    ls是列出命令，-l参数是可以显示软链接指向，/dev/disk/by-uuid/ 是系统根据uuid的磁盘汇总信息，这时你可以看到对应磁盘的uuid，复制，并记住，下一步去修改fstab</p>
<p>（下图已经exit chroot环境了，不要exit。如果已经exit ，重新 chroot /mnt。注意查看终端前是否是  root[/])</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-325" src="https://www.bhzhu203.com/wp-content/uploads/2016/07/GIFrecord_2016-07-24_160057.gif" alt="GIFrecord_2016-07-24_160057" width="800" height="602" /></p>
<p>修改fstab</p>
<p>UUID=xxxxxxxxxxxx     /           ext4   defaults             1     1</p>
<p>根分区基本是 1  1  ，至于为什么是 1  1 ，可以百度一下fstab</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-327" src="https://www.bhzhu203.com/wp-content/uploads/2016/07/GIFrecord_2016-07-24_160643.gif" alt="GIFrecord_2016-07-24_160643" width="800" height="602" /></p>
<p><strong>9。生成initramfs，然后再update-grub（在chroot环境）</strong></p>
<p>mkdir -p  /tmp   光盘环境复制过来的系统没有  /tmp目录，新建一个</p>
<p>cd  /boot    先进入boot目录。不然生成的文件会直接跑到根目录，而不在boot目录，mkinitramfs脚本的问题</p>
<p>ls    列出boot目录下的文件，获取内核文件的版本号</p>
<p>mkinitramfs  内核版本号   -o  initrd.img-内核版本号        生成initrd.img，initrd.img它是系统引导启动用的一个子系统，是一个迷你系统镜像，vmlinuz 前缀的文件，就是大名鼎鼎的linux内核</p>
<p>update-grub   更新grub  ，注意查看grub是否已经配置了initrd.img，否则系统无法正常启动！mkinitramfs 完成后ls  /boot查看是否有initrd.img生成</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-328" src="https://www.bhzhu203.com/wp-content/uploads/2016/07/GIFrecord_2016-07-24_163532.gif" alt="GIFrecord_2016-07-24_163532" width="800" height="621" /></p>
<p>出现/dev/log错误可以忽略</p>
<p>显示“found initrd img ” 则是操作成功了，稍后exit退出，重启系统，系统安装完毕！</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-329" src="https://www.bhzhu203.com/wp-content/uploads/2016/07/GIFrecord_2016-07-24_163738.gif" alt="GIFrecord_2016-07-24_163738" width="800" height="621" /></p>
<p><strong>10。系统安装完毕，重启系统</strong></p>
<p>弹出livecd，进入自己安装在虚拟机上的系统</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-330" src="https://www.bhzhu203.com/wp-content/uploads/2016/07/GIFrecord_2016-07-24_164018.gif" alt="GIFrecord_2016-07-24_164018" width="800" height="621" /></p>
<p>看到 df -h  看到根目录为新盘 即为安装成功</p>
<p><img loading="lazy" decoding="async" class="size-full wp-image-331 aligncenter" src="https://www.bhzhu203.com/wp-content/uploads/2016/07/GIFrecord_2016-07-24_164138.gif" alt="GIFrecord_2016-07-24_164138" width="640" height="501" /></p>
<p>&nbsp;</p>
<p><strong>11。系统安装成功啦，配置新的用户名</strong></p>
<p>即使是安装到了硬盘上，默认的用户还是bhzhu，自己新建一个用户吧，可以使用系统面板里的新建用户。下面演示的是使用命令新建用户</p>
<p>useradd 用户名名称       添加用户名</p>
<p>passwd 用户名名称      修改用户名密码</p>
<p>mkdir  -p  /home/新用户名    创建/home下的用户名目录</p>
<p>chown -R 新用户名.新用户名  /home/新用户名            赋予该用户权限</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-332" src="https://www.bhzhu203.com/wp-content/uploads/2016/07/GIFrecord_2016-07-24_164651.gif" alt="GIFrecord_2016-07-24_164651" width="800" height="621" /></p>
<p>修改/etc/sudoers 文件 ，使该用户名可以不用密码直接 sudo</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-333" src="https://www.bhzhu203.com/wp-content/uploads/2016/07/GIFrecord_2016-07-24_165025.gif" alt="GIFrecord_2016-07-24_165025" width="800" height="621" /></p>
<p>注销，试试自己的新用户名吧！哦？不建议以新用户名登录cinnamon桌面，它默认的配置大多数是空白的，需要自己去配置。新手建议先使用mate桌面。mate桌面默认英文</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-334" src="https://www.bhzhu203.com/wp-content/uploads/2016/07/GIFrecord_2016-07-24_165228.gif" alt="GIFrecord_2016-07-24_165228" width="800" height="621" /></p>
<p>进入到用户名目录，ctrl+H显示隐藏文件，修改 .dmrc文件，把系统环境的语言改成中文的</p>
<p>[Desktop]<br />
Language=zh_CN.utf8<br />
Session=mate</p>
<p>运行mdmsetup，使新用户可以开机自动登录</p>
<p>&nbsp;</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-335" src="https://www.bhzhu203.com/wp-content/uploads/2016/07/GIFrecord_2016-07-24_165458.gif" alt="GIFrecord_2016-07-24_165458" width="800" height="621" /></p>
<p>注销试一下吧！</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-336" src="https://www.bhzhu203.com/wp-content/uploads/2016/07/GIFrecord_2016-07-24_165623.gif" alt="GIFrecord_2016-07-24_165623" width="800" height="669" /></p>
<p>选择mate桌面</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-337" src="https://www.bhzhu203.com/wp-content/uploads/2016/07/GIFrecord_2016-07-24_165746.gif" alt="GIFrecord_2016-07-24_165746" width="800" height="669" /></p>
<p>webkitgtk自带浏览器</p>
<p>MiniBrowser   输入url时记得写完整http://</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-338" src="https://www.bhzhu203.com/wp-content/uploads/2016/07/GIFrecord_2016-07-24_165907.gif" alt="GIFrecord_2016-07-24_165907" width="800" height="669" /></p>
<p>现在bhzhuOS安装完毕啦，下面的使用就和其它Linux发行版的操作方式差不多了。大功告成！</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<hr />
<p>别走开，下面还有彩蛋！</p>
<p>&nbsp;</p>
<p>Enlightenment桌面蛮酷炫的，可惜就是不怎么好用</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-342" src="https://www.bhzhu203.com/wp-content/uploads/2016/07/GIFrecord_2016-07-24_201310.gif" alt="GIFrecord_2016-07-24_201310" width="854" height="674" /></p>
<p>还是cinnamon桌面实用一点</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-343" src="https://www.bhzhu203.com/wp-content/uploads/2016/07/GIFrecord_2016-07-24_202057.gif" alt="GIFrecord_2016-07-24_202057" width="854" height="674" /></p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
