Oct 24, 2017 - 基于pc环境的再次LFS(Linux From Scratch)

  自从在树莓派LFS了之后(这个过程见我以前博客),想想原来在pc上LFS的时候是一个个命令执行,这样效率太低了,而且容易出错。既然树莓派上可以用脚本编译软件包,那pc上也可以这样做啊。于是就将树莓派上的LFS脚本修改了一下,在debain9上又LFS了一把,呵呵,可能我LFS上瘾了。
  宿主机系统:debain9
  LFS版本:网上(http://www.linuxfromscratch.org/lfs/)下载LFS8.1(好在软件包版本和树莓派上的版本基本一致,有少数软件包版本不同)
  建议先看一下LFS的文档,可以中文版7.7版本和8.1的英文版对照着看,主要了解一下LFS的大致过程。我的步骤相比标准的LFS过程,最主要的差别是所有软件包的编译在ch5-build.sh和ch6-build.sh两个脚本中进行,如果中间有错误,程序会自动停下来。本文档所有的脚本都可以在https://github.com/breezecloud/myLFS下载,但不包括源程序包,源程序包请自行根据文档下载。

  1. 宿主机安装必要的软件包
      安装debain9:网上下载dvd安装盘,在分区时为LFS单独分一个区,大小20G以上,另外分一个2G交换分区。   在debain系统的终端上执行:(以下同)
    sudo su
    apt-get update
    apt-get install bison gawk m4 texinfo
    apt-get install gcc g++ automake autoconf
    
  2. 准备LFS用新分区
    mkfs -v -t ext4 /dev/ ;在 LFS 分区上创建 ext4 文件系统,是分区的名字,如sda1
    export LFS=/mnt/lfs
    mkdir -pv $LFS;-p如果目录存在不报错
    mount -v -t ext4 /dev/ $LFS
    mkdir -v $LFS/sources
    chmod -v a+wt $LFS/sources
    mkdir -v $LFS/tools
    ln -sv $LFS/tools /  ;在根目录下建立链接
    ;增加交换文件
    mkswap /dev/ ;新建 swap 分区
    /sbin/swapon -v /dev/
    
  3. 下载软件包和补丁
      可以在http://www.linuxfromscratch.org/lfs/view/stable/chapter03/packages.html和http://www.linuxfromscratch.org/lfs/view/stable/chapter03/patches.html下载所有的软件包。建议使用迅雷之类的下载软件一次下载全部源程序包。(注意:SourceForge的网站无法用迅雷下载必须手工下载)。将下载的软件包拷贝到$LFS/sources目录下。   
  4. 添加lfs用户
      执行以下命令:
    groupadd lfs
    useradd -s /bin/bash -g lfs -m -k /dev/null lfs
    passwd lfs
    chown -v lfs $LFS/tools
    chown -v lfs $LFS/sources
    su - lfs
    export LFS=/mnt/lfs
    
  5. 构建临时文件系统
      以lfs用户执行4_4_set_env.sh,执行完之后退出lfs用户重新登录。确认一下环境变量$LFS(/mnt/lfs)正确。
    cd $LFS/sources
    ./4_4_set_env.sh
    exit
    su - lfs
    cd /lfs/sources
    ./ch5-build.sh ;执行编译脚本
    #编译完成的所有工具软件安装在/tools目录下,修改文件属性,以root用户执行:
    exit
    export LFS=/mnt/lfs
    chown -R root:root $LFS/tools
    

      

  6. 安装基本的系统软件
      ch5-build.sh执行之后,以下开始已root身份执行命令,执行s6.2.sh 确认一下/mnt/lfs/dev/consul ,/mnt/lfs/dev/null是否生成,执行:
    export LFS=/mnt/lfs
    cd $LFS/sources
    ./s6.2.sh
    ./s6.4_chroot.sh ;进入chroot,需要root用户执行,否则失败。如果机器重启之后要先执行s6.2r.sh再chroot。
    #执行s6.5_6.sh(生成相关目录、passwd、group文件):
    cd /sources
    ./s6.5_6.sh
    exec /tools/bin/bash --login +h
    touch /var/log/{btmp,lastlog,wtmp}
    chgrp -v utmp /var/log/lastlog
    chmod -v 664 /var/log/lastlog
    chmod -v 600 /var/log/btmp
    ./ch6-build.sh;执行编译脚本
    

      

  7. 清除系统及基本系统配置
      清除调试信息及/tools目录,此时/tools目录已经不需要可以删除。当然如果你想再次LFS,可以备份/tools目录,这样下次第一阶段(ch5-binuld.sh)就不需要执行了。
    logout
    export LFS=/mnt/lfs
    cd $LFS/sources
    ./s6.71_chroot.sh ;从现在开始,要在退出后重新进入 chroot 环境就要执行:
    s6.4_chroot.sh
    s6.71r_chroot.sh
    

      修改s7.2_9.sh脚本,脚本需要在/etc目录下生产了一个fstab,其中, 和 请修改脚本用适当的值替换。例如 sda2,sda5 和 ext4;另外假定根分区(或者是磁盘分区)是 sda2,脚本生成了/boot/grub/grub.cfg配置文件,如果启动文件不是sda2需要修改脚本。   ./s7.2_9.sh ;基本系统配置   pc版本的配置(包括启动配置)比树莓派复杂,这里请参考手册的介绍。另外这个版本的系统初始化是基于传统的Sysvinit,还有一个版本的LFS基于systemd的初始化管理,比Sysvinit更新,但也更复杂。建议先从Sysvinit这个版本开始。   

  8. 让LFS可引导
      顺利执行脚本s7.2_9.sh之后,基本完成了系统的配置,。然后编译内核执行:
      cd $LFS/source   ./s8.3.sh ;建议手工执行,也许编译中间出现问题呢?
      如果上面脚本胜利执行完成那就要请负责启动电脑的grub出场了。它是一个多重操作系统启动管理器,用来引导不同系统,如windows,linux。   grub-install /dev/sda ;命令将会覆盖已有的引导器。如无需要,请勿运行!!!   (此时也可以使用update-grub生成/boot/grub/grub.cfg配置文件,但发现找不到update-grub命令,update-grub是grub-mkconfig -o /boot/grub/grub.cfg的简化版,可以用grub-mkconfig代替)   但我的建议是既然宿主机debian上已经安装了grub(如果不是用LiveCD这样的方式安装的话),干嘛不配置宿主机的grub来启动我们的LFS呢?当然你需要学习一下如何配置grub以新增加启动的系统。不过明显这样做比较安全,我觉得花这点时间还是值的,如何配置就当思考题读者自己完成吧。   至此已经完成了全部的编译和配置,最后检查以下的配置文件是不是都是正确的吧。
    /etc/bashrc
    /etc/dircolors
    /etc/fstab
    /etc/hosts
    /etc/inputrc
    /etc/profile
    /etc/resolv.conf
    /etc/vimrc
    /root/.bash_profile
    /root/.bashrc
    

      终于完成了,先退出chroot:

    logout
    然后卸载虚拟文件系统:
    umount -v $LFS/dev/pts
    umount -v $LFS/dev
    umount -v $LFS/run
    umount -v $LFS/proc
    umount -v $LFS/sys
    卸载 LFS 文件系统本身:
    umount -v $LFS
    祈祷一下重启电脑试试是否能成功启动吧。
    
  9. 结束语
      由于很多步骤都已经写成了脚本,所以建议还是仔细阅读一下文档会对理解LFS的过程很有帮助,脚本只是让你能避免输入错误而无法成功LFS。虽然完成了LFS,但其实离真正理解linux还差很远,不过LFS给了我们一个概念,组成linux这盘大餐的原料是什么?它是怎么烧出来的?如果你想深入了解每个原料的原理可以进一步去出品这个原料的官方网站探索。

  最后要遗憾的指出目前完成的操作系统基本是无法在日常工作中使用的,只是具有基本的功能,不过LFS发展到现在也已经有BLFS和ALFS等”变种”,他们可以在LFS的基础上根据你的要求构建出一个为你所用的独一无二的操作系统。所以还是那句话:生命不息,折腾不止。

  本人的更多原创文章请加入个人微信公众号。

  

Oct 20, 2017 - 只想安安静静地听音乐--基于volumio的树莓派音频播放器

  一直想用树莓派做一个音频播放器,曾经试过kodi视频播放器去播放音频文件,感觉启动和使用比较慢,而且我只是响安安静静的听音乐而已,不想勉强树莓派播放高清视频。最近又在网上搜索基于树莓派的音频播放软件,发现原来有基于树莓派专门播放音频的发行版–volumio,真是”众里寻他千百度蓦然回首那人却在灯火阑珊”,赶紧下载来试试。

  1. 介绍
      (载自官网)volumio是一款傻瓜式的音频播放器,只需要将它连接到你的家庭音响系统或者你的DAC,然后连接到你的家庭网络就可以通过pc,mac,安卓或者ios控制它了。volumio可以从usb、网络存储、流媒体服务器播放音乐,也可以作为DLNA或者Airplay的播放器。   DLNA是什么?每一个音响爱好者大概都想过如何方便的实现音视频随时随地的切换,而不需要频繁的插拔一堆线缆,甚至想是否家里要买一个矩阵切换器来完成这个功能。有了DLNA,借助高速网络这一想法可以不用花一分钱实现了。DLNA它是消费电器,移动设备在内的无线网络和有线网络的互联互通协议,可以使数字媒体和内容服务在家庭网络间共享和控制,DLNA的口号是Enjoy your music, photos and videos, anywhereanytime,真的太棒了。
  2. 下载
      https://volumio.org/get-started/
      下载是一个zip文件,目前版本2.246,需要用解压软件解压img文件。
  3. 写入tf卡
      下载win32diskimager:https://sourceforge.net/projects/win32diskimager/   安装好win32diskimager(Windows环境)之后,将tf卡插入读卡器,选择上面解压的img文件写入tf卡。
  4. 启动
      将tf卡插入树莓派,上电启动。耐心等待几分钟之后使用电脑搜索热点,会发现有一个volumio的热点,连接此ap,密码是volumio2。连接成功之后在电脑浏览器输入http://volumio.local/,显示volumio的web界面则大功告成。
  5. 设置播放器
      可以有两种连接方式:有线连接、wifi连接。如果是有线连接直接用网线连接到路由器上就可以了;如果是wifi连接,在刚才的web界面的设置-网络里选择需要连接的AP和密码,设置后会重启,正常情况会连接你设置的ap,如果连接不成功还是会启用热点模式(但不知为何我总是无法成功连接)。
      另外连接成功之后手机或者其他设备需要知道volumio的ip地址,当然可以登录到路由器上去查,不过对我这种万年不登录路由器的人,密码早忘了。可以在pc上安装一款叫advanced ip scanner的小软件扫描一下你的网络,就能知道volumio的ip了。
      volumio所有的设置都在设置界面里,你可以选择界面语言、输出的音频设备、DSD直接输出或者over PCM(别问我DSD是什么)、插件等等。音频设备支持usb2.0声卡和I2SDAC(须选择支持的模块,大部分淘宝上有卖)。
      volumio可以播放NAS等局域网的音乐。在”我的音乐”中选择挂载设备,扫描音乐即可。最后就可以在音乐库中根据目录或歌手来管理和播放自己的音乐了。在正常连接的情况下,Volumio支持DLNA以及AirPlay无线音乐传输,目前很多手机app都支持DLNA,比如QQ音乐等,过DLNA投放到解码器或声卡上播放比手机内置的蓝牙功能有显著的音质提升。
  6. 手机app控制
      可以在安卓软件市场搜索volumio找到他的一款控制app(Sound@homefor volumio),也不知道是否是官方app,没怎么用感觉效果一般般。后来网上说有一款BubblePnP的app,也支持DLNA,是某神级人物大作。赶紧下来一试,顺便验证一下volumio的DLNA支持。安装之后一开始怎么也找不到我的volumio播放器。后来终于找到原因,原来我家里有两个AP,volumio和app分别连接了两个ap,虽然处于同一个网络BubblePnP也不能发现播放设备,必须连接到同一个ap。启动BubblePnP,在RENDERER下会出现volumio的播放设备,可以用手机控制volumio,也可以通过DLNA播放手机上的音频,这真是我需要的功能。

      BubblePnP的菜单上也支持很多云存储的访问,应该可以直接从云存储上播放音乐,比如dropbox,OneDrive等。BubblePnP是一款收费app,免费版本有很多功能限制,网上有破解版的没试过是否可以使用。网上说鼎鼎大名的foobar2000播发器也可以通过插件支持DLNA,下次试试。总之有了DLNA我们播放音乐和视频的方式变得简单、有趣。

      后续:树莓派自身带的声音设备底噪很大无法入耳,上述工作只是一个验证,真正要到达实用的话需要购买一个树莓派配套的声卡并且建议使用数字接口接入DAC和功放。这是后话而我会不忘初心继续DIY一个实用的HiFi播放器。

  本人的更多原创文章请加入个人微信公众号。

Aug 19, 2017 - 远离城市喧嚣,坐看云卷云舒--游花鸟岛记事

  这不是一篇攻略、也不一篇游记,只是记录下来给将来的自己看。其实这样的小岛根本不需要攻略,随遇而安更能体现小岛悠闲的慢生活,如果恰好能和自己所爱的人在岛上漫无目的地走,一直到天荒地老,那不是件最浪漫的事情吗?如果你正好有幸看到这段文字,并且能帮到你什么,纯属巧合。
  经过几次自虐的徒步游,总想来一次休闲的腐败游。本想去韩寒拍《后会无期》的东极岛,结果纠结于船票买不到。正在纠结之时,微信群里有位达人扯了一嗓”去花鸟岛吧,洋山港可以直达!”。似醍醐灌顶,百度一查,花鸟岛位于嵊泗列岛的最北面,其形如展翅欲飞的海鸥,岛上花草丛生,林壑秀美,故得名花鸟岛。关键是果然可以从洋山港沈家湾码头乘船直达花鸟岛,比去东极岛方便多了,就这么定了去花鸟岛的计划。
  查资料看攻略忙了几天,总结了去花鸟岛最重要的就是订民宿,虽然岛上民宿很多,但是由于在暑期旺季,联系了几家网上介绍有特色的民宿都说近期周末没房间了。最后好不容易找到一家叫”老兵之家”的民宿近期还有房间,就只能将就订了下来。只要提前交了房费,民宿的老板会替你订好从沈家湾码头到花鸟岛的船票,将游客的身份证号码报给他就行了。一切安排妥当,群里通知好大家注意的事项,就心心念念盼着出发的日子了。

DAY1 2017/8/11


  当天一早,一路好心情驾车到了沈家湾码头。码头有停车场可以过夜停车。船是11:50开,尽量提早到达。到了之后到大厅售票处的左面房间有一个接待处。说去花鸟岛定制游,工作人员会根据你提供的身份证确认是否有预订,并给你一张卡片告诉你去几号窗口领票。从沈家湾码头去花鸟岛的船只有一班,而且根据淡季旺季还不是每天都有的。好像不能当场买船票,只能通过花鸟岛的民宿老板预订。
  提前10分钟上船,是一艘大概200人的小型游船。一会儿就座无虚席,刚坐满就出发了,船速挺快的,坐在前舱会有点颠(回来时坐前舱,结果有点晕船),所以人也不能出舱看风景。大概一个半小时就达到了此行的目的地–花鸟岛。
  花鸟岛有两个村落,花鸟村和灯塔村。离码头近的花鸟村只有一条街,大部分的商店、民宿等分布在街的两侧。码头离街不远,我们预定的民宿老板给我们安排了电瓶车直接到住宿地。放下行李,我们就顶着太阳出去逛了。其实我们也也没做什么计划,就问当地居民哪里可以玩。当地居民都很友善热情,会告诉你去哪里,怎么走(其实小岛基本也这几个去处)。
  我们准备去看日出的地方踩点,于是问了路人就随意的走过去,大概十几分钟就到了。那地方叫佛手石,像一个手臂伸出小岛,上面有一个类似手型的石头。正值下午一个人都没有,清澈的海水远处漂着几个小岛我们自嗨起来,开始肆意拍照、凹造型。这就是小岛游的魅力吧,没有什么能让你买到如此清静的景点。
  晚上我们就在住宿的地方吃饭,在街上支起座椅摆好菜倒上啤酒就开始体验当地人的生活了。说实话老板的海鲜做的并不好,也不够新鲜(好像冰过),所以后来几次我们去了其他地方吃,这是后话。不过在大街上喝酒聊天,也很是惬意。
  吃完饭又开始瞎逛。偶然看到有块黑板写有”蓝色眼泪”的信息,忽然想起来岛上号称有发光的海,于是就问在哪里可以看,答曰:海滨浴场。我们就直奔海滨浴场去了。刚到浴场就见到了随着海浪泛起的淡淡荧光,这就是传说中的”蓝色眼泪”?随着海浪泛起的白色浪花,时而呈现一条蓝色亮光,附近的人也随着海浪推进岸上叫喊起来,惊叹于大自然的奇妙。可惜相机无法将此情景拍摄下来,只能用自己的眼睛记录下来,记在心里就好了。后来我们去码头那边看,发现那边的荧光有呈现不同的效果,蛮有意思。抬头仰望天空,小岛上的星星也分外明亮,仿佛又回到了小时候的情景。

DAY2 2017/8/12

  第二天一早4:30起床,日出时间5点左右。熟门熟路的走到昨天去过的地方,天蒙蒙亮,天气不够给力,天上有厚厚的云。等到5点半看到太阳,太阳已经升的老高了。不管了,我们拿起照相机一通猛拍,谁叫我们比太阳还热情呢。


  看日出回来随便在街上吃了点早饭,回房间休息。我去街上的游客中心缴费。来的时候船票没有付钱,在这里一并支付。九点左右我们去海滨浴场,交完钱海滨浴场就不用付费了。海滨浴场人不多,海水和沙滩还算干净,那天多云正好适合游泳。我们拍照、游泳、玩耍不负这沙滩、海浪的大好美景。
  下午坐车去花鸟灯塔,开车大概20分钟。灯塔其实也就拍几张照片,旁边的陈列室不知为何也没开。在回去的路上,我们在一个千岛观景平台的地方停下来了。这估计是岛上看风景的最佳景观点。道路的两边,一边可以看到起伏的海上小岛,一边可以俯瞰整个山脚的村庄。这里我们又开始逛拍一阵,之后闲庭信步走下山,过一把徒步的瘾。远离城市的喧嚣,一路上只有我们几个人放肆的聊天、拍照,仿佛天地只有我们。


  下山之后,我们去了一家叫伍码的民宿吃饭。这家装修的很有特色,很小资又背靠大海,风景不错。据说现在这个季节房费要一千左右。刚坐下准备点菜,看到旁边那桌有大盆的螺、小螃蟹、鱿鱼等海鲜,我们就说也点那个。没想到服务员说那是他们自己带的海鲜,饭店只加工。一问才知道他们租了一艘船去捕捞,租船费用一千,捞上来的海鲜全归你。原来还可以这样玩,也许是刚取消禁渔令不久,他们捕的海鲜还不少,人多的话可以试试。毕竟是正宗的厨师,饭店海鲜做得还不错,东西也很新鲜,我们算是酒足饭饱回房休息。

DAY3 2017/8/13

  这天我们也没什么安排,其实岛上就这几个景点,很多景点还没开发,路上有些地方还在大兴土木搞基础建设。本来想去什么登基石、夫妻石看看,结果走了一半没路了,随便经过一家叫”吴小姐的家”的民宿,感觉不错,上面是四间客房,下面是一个小型咖啡吧,可以吃吃早餐,喝点饮料。我们就进去每人点杯咖啡,一边看风景,一边聊天。岛上的生活就是这样没事适合闲逛,发呆、看看风景。

  简单吃过中饭,收拾好行李乘电瓶车到码头。开船时间是1:30分,和来岛上时候一样,码头上已经挤满了游客,感觉只有在码头开船时才能见到大堆的人,这些人丢在岛上,每个景点也没见到几个人,现在想想这船票难买的代价也是值得的,反正我是不喜欢扎闹猛的。 上船入座很快船就开动了,坐在前舱有点颠簸,居然有点晕船。还好一个半小时一会儿就到了,上岸开车回家,很快就到家了。明天又要早九晚五的生活了,偷得浮生两日闲忽然觉得如此不真实,留个记录,怕将来真的以为仅仅是做了个梦而已。
  整个行程除了自驾游的费用(过路费、停车费、汽油费)、船票340/人、景点门票95/人、电瓶车20/人、住宿350/间/天、吃饭平均100 /人/餐,其余没什么费用了。唯一遗憾的是没多去一些有特色的民宿逛逛,比如花之语、mata、吾喜欢等,如果能订到更好,不能订到可以去吃个饭喝个咖啡啥的,一般这些地方都有大露台,景色都不错。回来之后某人说Airbnb上有不少花鸟岛的民宿,可以试试看,另外Booking也可以查查,不过我都没看过,也许就没有下次了,管他呢。

如果你真的要看攻略,请点击下面链接:
花鸟岛攻略最详细版本–江浙周边最美海岛
http://3rd.mafengwo.cn/travels/info_qq.php?id=7095134
【至今最全的花鸟岛旅行攻略】 3天2晚舟山嵊
http://360.mafengwo.cn/travels/info_qq.php?id=7077599

  本人的更多原创文章请加入个人微信公众号。