从黑客到极客——hacker文化的演化

    说到黑客文化,就不能不提到技术。黑客是一个复杂的文化,不同的人,不同的时代有不同的解读。黑客的一端是技术,另一端是文化。如同武侠一般,一端是武,一端是俠。金大侠说过,武好写,侠难写。同样,要讲述技术,虽然艰涩,但总是可以表达的,难以表达的是黑客文化中的种种现象。对于没有背景的人来说,这些文化现象并不比技术易懂到哪里去。下面我们首先统一解说一些名词概念,以便下面的阐述。

名词解说

    hacker 从原生意义上说,是喜爱计算机技术而充满叛逆的年轻人。藐视传统,不按照常规方法使用软件和服务,而是通过自己的洞察力,非法(或在后来被定义为非法)的使用。例如音频拨号时代,某位(绰号Captain Crunch)发现通过发出特定音频可以绕过收费机制,于是就公开了这个机制。hacker的原生目的不是破坏,而是表达自己的叛逆,炫耀自己的技术。而目前在主流媒体和民众中的形象是恶意的系统破坏者,会给你带来麻烦,并且以技术手段获得不法收入。在文中注意区别hacker的前后两种不同含义。
    cracker 没有歧义,从一开始,就指软件的破坏者,但是不一定以此牟取私利。cracker和hacker的界限很模糊。
    geek 原意是怪人,善于研究不善于交往的怪人,和书呆子(nerd)类似。但是近些年随着网络文化兴起,逐步变成褒义词,指喜爱技术(不特指计算机技术),充满DIY精神的人。
    black hat 黑帽子,hacker中为了达成私利性目的而非法使用系统的人。通常常见的情况有,勒索(例如不付钱就会破坏系统和数据),盗用账户,获得非法虚拟货币等。
    white hat 白帽子,和黑帽子相对,为了修补系统问题而研究系统的人。白帽子不代表免费,相反,白帽子通常催生了某类安全产业,不少白帽子是挂靠在安全公司名下,甚至自己经营安全公司。他们致力于寻找大型系统中的漏洞,并且向企业汇报漏洞,换取收入。白帽子可以看作是企业对hacker妥协的一次结果,与其让这些年轻人精力充沛的寻找漏洞,然后不知道发生什么事情。不如雇用他们为自己寻找漏洞,减轻自己的风险。
    grey hat 灰帽子介于白帽和黑帽之间,你可以理解为,他们有的时候当白帽,有的时候当黑帽。也可以理解为,如果我卖你漏洞你不要,那我就卖给要抢你的人。
    script kids 脚本小子。指一些并没有技术能力的人,利用他人已经完成的脚本进行攻击行为。这显然有悖于传统黑客伦理,充满乐趣的发现问题是第一位的,至于漏洞只是发现问题的结果。通常而言,普通人碰到的90%以上被认为是hacker的人都是script kids。
    红客 红客是一批非官方的,使用技术“维护国家和民族尊严”的人。严格来说,有不少“红客”是原生的hacker,只是激进的表达爱国主义和民族主义,这批人可以视为黑客中的一个特殊群体。然而不断有技术不足的人为了“维护中国尊严”而加入,导致一些自称红客的人实际上只能算是利用技术的script kids。由于试图以技术为手段表达政治意图的人数量庞大的关系,因此红客在一词在使用的时候,script kids的比例异常的高。在不少文章中经常混谈两者,阅读的时候应当注意区别。
    飞天面条教 具体查wiki“飞天面条怪物”一词。这个是用于反对“智能设计论”的。即某些宗教主张,人类是由一个超自然的智能所设计。因此Bobby Henderson同样创造出一个符合智能设计论的神进行反讽。列入本文是因为很多geek本着找乐子的心情加入了相关恶搞。关于这个问题请仔细阅读飞天面条怪物的相关页面并去那里讨论,本文不掰扯宗教问题。
    海盗党 具体wiki“海盗党”“盗版党”。瑞典的一大政党,主张现有的版权制度过度的限制了知识的发放,阻碍了人类的进步。主张减少版权限制,增进知识交流,注重隐私保护。
    DDOS 分布式拒绝服务攻击。使用大量的肉鸡(傀儡)来访问某个服务,导致服务器过载,从而无法继续服务。本质上说DDOS很难防御,因为他实际上就是一种过载。
黑客文化历史
    我们首先阐述的是黑客文化的背景。在大部分的文章里面,会提到黑客起源于美国的朋克文化。实际上基本如此,但是黑客属于朋克文化在校园中的一个变种,更专注于技术。这个变种是如此的具有生命力,以至于今天仍在极大的影响世界。关于这点,更进一步可以阅读(http://man.lupaworld.com/content/develop/joyfire/project/7.html),其中《黑客文化简史》这部分。说一点题外话,链接的这篇文档收录了ESR的不少名文,可以看作是传统黑客文化的讨论和总结,是相当不错的文档。
    时代在变化,背景在变化,黑客在大众中的形象也在变化。黑客首次为大众所知,是在1988年,莫里斯蠕虫造成大量主机宕机。此次事件经过媒体大规模渲染,很大的影响了黑客文化在大众中的形象。实际上,传统的黑客文化很不稳定,极易被误解。因为传统的黑客文化信条之一是表达叛逆,而表达叛逆往往跟随着破坏现状,这点非常容易被滥用。很多人无视了注重技术,充满趣味的工作等其他信条,而只专注于挑战权威,从而成为臭名昭著的破坏者。而另一些人则在不违背信条的情况下,试图利用自己的技术赚钱。这催生了黑客产业链(当然,这不全是坏事)。而黑客产业链肯定会为用户和企业带来额外的麻烦。
    另外提一句,在亚洲地区,黑客第一次为大众所知估计是CIH病毒。这也是第一个大规模破坏硬件的病毒。
    由于种种因素,黑客在大众中的形象逐步变为了破坏者,找麻烦的人,以技术作恶者。实际上,在hacker的原始含义中是没有这个意义的。
从黑客到极客
    在现代,hacker这个词和cracker这个词实际上已经很类似了。如果说区别的话,cracker更偏向于破坏程序本身,而hacker则引入了以技术作恶的意味。但是hacker的精神不死,他以其他词的形态出现。现代替代hacker出现的词是geek,这个词类似于原来的hacker,但又有所不同。我们首先回顾一下hacker的信条。
1.充满乐趣的工作,为了乐趣而工作。
2.挑战权威,自由万岁。
3.专注技术。
4.一个问题不应该被解决两次,无聊的工作是罪恶。
    我找不到一个权威的geek信条,但是我个人总结如下:
1.关注原理而不关注结果。
2.为了自己的乐趣而非利益工作。
3.乐于挑战其他人无法完成的事情,并视为一种成就。
4.不限于coding,也包括以各种有技术含量的手段达成炫耀技术的目的。
    对比两者,我们可以看出差别。hacker主要注重的是计算机技术,而geek更偏向于指代各种技术。hacker叛逆,挑战权威,自由万岁,而geek虽然喜欢自由,但是并没有强调挑战权威。两者都强调乐趣,强调技术。这些区别主要是由于各种时代的变化所致的。相比起来,geek文化更类似于hacker文化的一个普及和切割。去除了挑战权威的味道,泛化了技术,使得更多人有可能成为geek。
    我们举一个当代的传统hacker的例子,Arron Swartz试图下载JSTOR的论文并散布,这是典型的一个hacker行为——下载并散布论文并不是出于为了获得私利,而是为了表达自己的观点——人类获得知识的权力不应当被阻碍。从法律上说,是的,这是违法行为。但是这个事情反过来,让我们关注了这么一个事实——JSTOR的收费论文库是否还有必要存在?或者说,一个更本质的问题。以校园墙为界限阻止知识获取,并以这种行为牟利是否合理。当然,思考的结果可能是合理的,也可能不合理。hacker并不在乎违法,实际上,很多hacker就是在违反法律的同时走向伟大。要找类似例子,可以wiki“五角大楼文件泄密案”,当然,主角不是黑客。
    而geek就没有这么叛逆,以当代的典型geek形象——TBBT中那一帮书呆子而言,基本就看不到多少反叛气息。Sheldon的却进过监狱,可是理由可不是因为挑战现有制度,而是在法庭上找抽。很多geek有自己的政治主张,会讨厌某个政党,或者认同hacker文化中的思想。但是并不会像hacker们那样,无视法律,使用技术手段直接表达。
当代其他和黑客有关

    另外有一些很特殊的例子,是黑客文化极端介入政治,导致产生的各种政治和宗教流派。例如飞天面条教,就我所知有不少geek程序员加入了恶搞行为,甚至参与了网页制作或线下活动。另外一个不得不提的和黑客文化有关的政治事务则是海盗党。海盗党的主张和hacker挑战权威,自由万岁的想法完全一致。不同的是,hacker(此处取褒义)以技术手段,破解他们认为非法的数据。而海盗党则以政治运动和政党体系为手段,推进政治改革。

    介入经济的黑客则演变成了很有名的黑客经济链条。大致上说,这个链条呈金字塔结构。最上层的是极少数黑帽子,负责寻找系统的“硬”漏洞。其下则是为数不多的程序员,通过各种手段购买漏洞,非法的内部文件,实现各种破坏性工具。这些工具被各个地区的老板购买,分发到大量的普通技术员(甚至不需要技术)手中,利用技术来作恶。例如种下大量木马,利用获得的肉鸡进行DDOS,收费破坏敌对系统的运行。或者是诱骗用户点击木马,收集用户游戏账户或银行/支付宝账户。
    链条的意义在于,链条上每向后推进一个环节,牵涉到的人和财富会以倍数增长。一个价值数十万的漏洞从黑帽子手中流出,到了程序员手里成为工具时,可能价值已经上百万。而这个工具最终被分发到技术员手中,用于诈骗的财富可能高达上千万。这个链条,使得上游精通技术但没有足够时间的专家,和下游渴望获得金钱但是没有技术的普通人相结合,使得少数专家可以指导大量普通人进行犯罪活动。因此才出现了灰帽子和白帽子两个行业,毕竟直接收购漏洞相比损失来说小的多。
    当技术为政治所用,产生的则是GFW,JFCCNW等。关于这个不进一步阐述。
在中国,我如何成为一名geek
    本文不会谈论如何成为一名hacker,毕竟后者在大众眼中的形象不佳,同时ESR也有一篇《如何成为一名黑客》说的甚好,我就不拾人牙慧了。不过限于中国特殊的情况,我还是说说你如何成为一名计算机技术geek。
    geek不是能够培养的,而是自发产生的,geek是在苦逼的道路上蛋疼且快乐着。
    要成为geek,一个首要的条件就是能够享受技术的乐趣,而不是被吓倒。在面对复杂的文档(对于国人而言,尤其是英文文档)时,仔细的阅读,并且找到系统工作的原理。无论是hacker还是geek,对于他们感兴趣的东西,仅仅知道如何使用是不够的。通常而言,大部分的geek都有自己动手拆解修改一些系统的经历。这个行为有一个术语——hack。例如,我们可能会希望http在转发请求的时候增加一些头部帮助识别信息,而原生的http服务器没有这个内容。怎么办呢?下载一份源码,然后找到相关部分,修改并重新编译一遍,这是最简单的hack行为。如果你不知道怎么修改,可以阅读文档。然而你完全没有“我可以修改http服务器”这个想法时,是注定无法培养成为geek的。也就是说,成为geek的必要条件是强烈的求知欲和与之相匹配的动手能力。
    有了求知欲,我不相信你还可以若无其事的使用windows系统。你有没有希望了解系统开机时发生了什么事情?希望知道系统是如何工作的?如果有,你必定会想要下载一份linux的源码,并且进行编译安装。当然,对于初学者而言,我建议你先从ubuntu开始入手。
    ubuntu的安装门槛相对比较低,但是对于初学者,还是会有很大的门槛。你可以求助于当地lug,目前中国比较大的lug有,bjlug,shlug,szlug,gzlug,hzlug。对应于北京,上海,深圳,广州,杭州。以上几个地方的同学,可以直接搜索lug,然后寻找同好求助。其他地方的只能更多的求助于线上资源。
    有了ubuntu的使用经验,也许你的脑子里会跳出更多复杂的念头。例如有一台多余的旧电脑,是否可以配一块硬盘,作为nas来服务整个家里。是否可以在这个nas上加载其他系统,完成自己的需求,例如在上面开一个网页服务器。这个网页服务器是否可以监控家中的摄像头等设备,等等。
    自由的思考,进而发现现状中的不足,然后快乐的折腾改进,这是geek的根本。当然,这会花费大量的时间,甚至金钱。你可能会没有时间交往男女朋友,或者要自费购买价值不算低的高阶路由器。这就是为什么我说,geek是在苦逼的道路上蛋疼且快乐着。
    而进阶则可以安装arch或者gentoo。最后,你可以试试lfs。当然,所谓试试lfs,绝对不是复制粘贴,而是通过自己的了解,改变lfs适用的过程。例如你可以通过脚本和make来简化复制粘贴过程,简化测试过程。或者通过自己的了解在虚拟机上跑起lfs来。如果这些都没问题了,那么你可以看看《如何编写操作系统》和《操作系统:设计和实现》两本书。这些都没问题后,基本就可以通晓系统的方方面面,然后用mac或者用回windows。
    是的,这不奇怪,geek中有不少windows用户,也有不少macos用户。一旦了解了系统的方方面面,没道理还保留一个实验用的系统在自己日常工作的机器上。
    其次,你需要学习至少三种语言,一种是汇编,一种是C,一种是lisp。如果你需要经常使用,也许还要学习一种快速开发语言,例如ruby或者python。作为一个geek,没有掌握一种以上语言是不可能的。
    为什么要学习语言,而且学习那么多种?因为语言是人类操纵机器的大门,不同的语言会改变你对机器的认识。汇编语言教给你的是机器的硬件工作原理,包括中断原理,输入输出控制。C语言教给你的是内核工作机制,如何结合硬件和软件进行工作。而lisp教给你的则是数学。
    当然,作为入门,你可以先从bash开始,这种语言相当的简洁而且对人友好,可以很好的粘合系统中现有的程序开始工作。但是在进阶的时候会变得复杂,所以一般很少作为一门主力语言使用。
黑客文化的未来
    世界各地的版权组织,总是努力使我们确信,盗版抢走了“我们”的钱,因此我们需要捐款,并身体力行的反对盗版。但是从我个人的体悟来看,实际上的情况,是版权比盗版更加恶劣的影响我们的生活。当然,盗版是恶,这点没有错。在盗版横行的国度,例如中国大陆,程序员的劳动并不得到尊重,这点我反复强调过。但是相反的,在注重版权的国度,例如美国,另一些问题更加困扰着我们。我们需要了解java底层的运作(jvm,不是底层库)?抱歉,这个受到版权的保护。我们需要查阅一些文献。抱歉,这个paper的copyright属于JSTOR。甚至,我们需要在一种新的设备上使用一种已经成为工业标准的语言,都必须经过版权所属公司的批准,甚至可能被恶意阻止(android上的java)。
    比这个问题更恶劣的,是美国的音乐和影视作品版权保护。美国的影视作品享有70年的版权保护期限,而且可以被继承。政客们提出的理由是,如果没有足够的版权保护,就没有人愿意生产歌曲和影视作品。但实际上,美国的软件保护年限只有20年,还是有源源不断的软件被生产出来。
    版权保护和知识自由是一对矛盾。没有版权保护,就没有人会重视知识劳动成果,那样会使得更少的人去生产知识。而过度的版权保护,会使得大家都重视知识劳动成果,但是却无法获得知识。不平衡的两者,都无法促使我们创造出更好的东西。
    另一个和hacker有关的问题则是隐私保护和言论自由的矛盾。通常来说,我们对隐私保护越重视,则会相应的妨碍言论自由。因为你对他人的批评几乎不可避免的会涉及到他人的隐私。美国对这个问题的约束通常是,公众人物的隐私受到更少的保护。hacker的传统是注重自由,其中就包括言论自由。如果有一个hacker认为你为非作歹,他会通过他能做的把你的家底狠狠的翻一遍,而不管你是不是个公众人物。理所当然,这对个人隐私保护是个严重威胁。现在在中国大陆地区越演越烈的网络实名制其实就有这方面的冲突。
    网络实名制主要用于对应"人肉",即网友通过查询网络数据,获得某个网络帐号的真实身份,进而查询出他的各种相关信息。在当代,几乎没有人是没有网络数据留存的,因此几乎每个人都有被人肉的可能。
    实际上,我认为每个人都应当思考一下,版权保护和知识自由的界限,以及隐私保护和言论自由的界限。
    这会为hacker文化引入的新的信念。

有一种错误,叫做太常见了以至于视而不见

    最近整XEN,出了一个奇怪的错误。

ERROR (SrvDaemon:355) Exception starting xend ((22, 'Invalid argument')) 

Traceback (most recent call last): 
   File "/usr/lib/xen-4.0/lib/python/xen/xend/server/SrvDaemon.py", line 

335, in run 
     xinfo = xc.xeninfo() 
Error: (22, 'Invalid argument') 

    根据网络上的内容,首先排除没有xen模块——有了,然后是/proc/xen目录是否mount——有了,然后是/sys/hypervisor/下面的一堆属性——有了,然后是版本——不对。xen-utils-4.1是4.1.2版本,而xen-tools是4.2版本。不过xen-utils并不依赖xen-tools,没有后者应当也可以运行这些玩意。hypervisor和xen-utils的版本是一致的。那问题是什么?
    出错的文件是/usr/lib/xen-4.1/lib/python/xen/lowlevel/xc.so里面发生的异常,下载xen的源码检查,这个函数主要是检查属性。属性检查会出什么错?
    正在一头雾水的时候,突然想起一个问题。我安装的是xen-hypervisor-4.1-amd64,因为kernel是linux-image-3.1.0-1-amd64。然而,我这个系统有一个非常大的特殊——在64位CPU上运行的32位系统。因此,实际上xen-utils是32位的。行了行了,下面的事情用膝盖都能想到。
    叹气,这世界上,真的有种错误,叫做太常见了以至于视而不见。不要认为自己不会犯。

最新一期的freenas测试报告

    去年我写过一篇freenas和解决方案,今年我又测试了一下,发现这玩意更加完善了,更企业化了,也更不适合玩玩了。今天写一下大概的步骤,供需要的参考一下。

    freenas提供以下几种服务,afp,活动目录(AD),CIFS(windows共享),动态DNS(绑定域名到动态IP),FTP,LDAP,NFS,Rsync,SNMP,Ssh,tftp,iSCSI。基本涵盖了非IT企业常见需要的所有服务(除了邮件服务)。目前镜像的大版本已经升级到8,所以我下到的是8.0.3,大概100M多点。
    新版和旧版最大的区别在于,新版本去掉了bt下载,upnp,iTunes和http这四个家庭常用服务(实话说,http还是企业常用的)。加入了远程同步,snapshot,10G网卡等功能。内存要求也更加高,从7的256M-512M,变成了4-6G。对比起来更加企业化和专业化,但是更不适合随便玩玩。
    首先,你需要准备合适的硬件。一台老式的机器,或者atom平台的mini-itx板子都是很不错的。即使是新的atom板子,便宜点的400也能弄到手,加上一条2G的内存,除掉硬盘大概也就1000。故障毕竟比较少,而且省电。存储需要一块硬盘和一个U盘,注意,两者不是或的关系。因为FreeNAS安装到某个物理设备后,会强制使用设备的全部空间,因此这个设备无法再用来存储数据。整个FreeNAS才500M,4GU盘绰绰有余,读取速度也不慢。除了升级和改配置外,没有什么太大写入,很节约。
    然后,你需要去官网下载最新的iso镜像,用这个iso启动系统(注意,此时最好不要接上数据硬盘,只挂U盘)。当然,要省事的可以在windows下用vmware来装,不过对非IT专业人士来说,有点困难。启动后,在出现的选择中选择1,安装到硬盘上。在出现的安装目标选项中选择U盘(如果只挂U盘,这里就一个选项),然后等。最多两分钟,安装就完成了,选3重启系统。
    去掉光盘(甚至可以去掉光驱),使用U盘和数据硬盘启动系统,并且将系统设定为从U盘启动(这点很重要,因为硬盘一般比较优先,但是硬盘上没有系统)。进去后什么都不干,会自动识别你的网卡,并且dhcp到一个ip。你可以在系统启动完成后使用选项1来重新配置ip,或者在dhcp上干脆给这个mac指定一个ip。对于使用路由器的小型公司来说,这点并不困难。
    用浏览器访问这个ip,你可以看到freenas的控制界面。作为中国用户,先去setting里面改为中文,保存。然后关闭浏览器页面,重新打开(这点很重要),后面的设定都是中文了。然后,在存储,卷下面,新建一个卷。你现在可以把数据硬盘挂起来用了。
    然后,再去服务里面把你需要的服务全部启动起来,并且配置合适的用户。这些就按照自己的高兴配了,界面都是中文的,应该不用我教吧。
    如果无法启动服务,重启再试。你也可以参考这篇(http://www.c-dd.org/post/214/)。写的很详细,不过他安装的版本稍旧,是7。

简易debian livecd打造手册

    废话不说,上干货。先装一下syslinux,genisoimage,kvm,debootstrap,squashfs-tools。

$ mkdir debcd

$ cd debcd

$ mkdir isoroot

$ cp /usr/lib/syslinux/isolinux.bin isoroot/

$ cat > isoroot/isolinux.cfg << "EOF"

prompt 0

default linux

label linux

    kernel vmlinuz

    append initrd=initrd.img

EOF

$ cp /boot/vmlinuz-3.2.0-1-amd64 isoroot/vmlinuz

    完成上述步骤后,你就准备好了一个基础的iso镜像文件系统,并有了一个基础的引导模块和内核。现在,我们尝试把这玩意烧到iso上,并且测试一下。

$ genisoimage -o output.iso -b isolinux.bin -c boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table isoroot/

$ sudo kvm -cdrom output.iso -m 512

    如果没法装kvm,换成qemu。屏幕会停在内核引导过程中——因为你没有initrd.img,所以在isolinux.cfg中指定的initrd就不正确。下面我们会设法弄一个initrd.img。

$ cp -a /etc/initramfs-tools/ initramfs

$ mkinitramfs -d initramfs -o isoroot/initrd.img

$ genisoimage -o output.iso -b isolinux.bin -c boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table isoroot/

$ sudo kvm -cdrom output.iso -m 512

    现在看看?你应该能看到有initrd被加载上去了,但是很可惜,没有root,因此也无法启动。所以下一步,我们需要弄一个root。

$ mkdir sysroot

$ sudo debootstrap –arch amd64 stable sysroot/ http://localhost:9999/debian/

$ sudo chown -R user.user sysroot

$ mksquashfs sysroot isoroot/rootfs -all-root

    把上面的源换成你喜欢的——我用approx做了一个缓存,所以一直使用这个缓存进行加速。在脚本执行完后,你会有一个压缩为squash格式的rootfs,可以作为root。但是这个root有两个缺陷。1.不能直接mount。2.即使mount了,启动的时候也会因为只读而挂掉。所以你需要做一点调整

$ cat >> initramfs/modules << "EOF"

squashfs

aufs

EOF

$ cat > initramfs/scripts/local-premount/iso << "EOF"

#!/bin/sh

case "${1}" in

    prereqs)

        echo 'iso script run'

        exit 0

        ;;

esac

mkdir /cdrom

mount -t iso9660 /dev/sr0 /cdrom

mkdir /cdroot

mount -t squashfs /cdrom/rootfs /cdroot

mkdir /shadow

mount -t tmpfs -o size=128m none /shadow

mount -t aufs -o br:/shadow=rw:/cdroot=ro none /root

EOF

$ chmod +x initramfs/scripts/local-premount/iso

$ mkinitramfs -d initramfs -o isoroot/initrd.img

$ genisoimage -o output.iso -b isolinux.bin -c boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table isoroot/

$ sudo kvm -cdrom output.iso -m 512

    好,现在再make clean,make test,光盘基本就OK了。

    root密码多少?我怎么知道你的root密码呢?用sudo chroot sysroot切换到自己的系统里面去改。另外,你可能需要安装一些软件,这时候记得把/sys /proc挂到chroot里面。还有记得调整一下/etc/udev/rules.d/70-persistent-net.rules,把主机里面的记录删掉(或者干脆删掉文件)。调整/etc/network/interfaces,把以下内容加进去。

auto lo

iface lo inet loopback

# The primary network interface

auto eth0

iface eth0 inet dhcp

    基本来说,可定制的引导系统就是这样。不过这个系统有以下几点需要注意:

1.可写入数量只有128M,如果写多了就完蛋。

2.128M全在内存中,内存不足完蛋。

3.一次一次生成很麻烦,我用的是make。

TARGETS=isoroot/initrd.img isoroot/rootfs

all: output.iso

test: output.iso

sudo kvm -cdrom $^ -m 512

clean:

rm -f output.iso $(TARGETS)

output.iso: isoroot/isolinux.cfg isoroot/vmlinuz $(TARGETS)

genisoimage -o $@ -b isolinux.bin -c boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table isoroot/

isoroot/initrd.img: initramfs

mkinitramfs -d $^ -o $@

isoroot/rootfs: sysroot

mksquashfs $^ $@ -all-root

4.可以用一个dsvc保存中间结果,我用的是git。下面是gitignore。

*.iso

isoroot/vmlinuz*

isoroot/initrd*

isoroot/rootfs*

sysroot

Progress Linux

    别紧张,我不是要progress Linux,这是一种新的distribution(算是吧)。 http://progress-linux.org,是一个基于Debian的dist。
    为什么要有这个dist?其实严格意义上说,这不是一个完整的dist。不同于Ubuntu,这个dist可以完全的寄生在Debian stable(squeeze)上面。你不需要真的去官网上下载一个ISO,然后安装。只需要安装Debian stable,然后加入 Progress-Linux的source就好了。如果你胆敢在Ubuntu上这么干,只会把系统弄的一团糟。当然,直接下载Progress-Linux的安装ISO也是可以的,这个ISO基于Debian Live,作者(Daniel Baumann)本人也是DD,是Debian Live的主要作者之一。

    为什么要这样?因为Debian是以严谨到变态而闻名的系统。例如,mdadm这个包有一个很小的不便。每个月当检查RAID的时候,会发一封mail。如果你有一堆电脑需要管理,这件事情就非常烦人了。要修正这个问题,只需要在其中一个脚本中加入参数-q。但是Debian修这个bug修了9个月。因为具体的包维护者并不是很关心这个事情(低优先级),而Release Term需要确保这个bug必须先在Sid中修复,确认没事了(基本是没问题的,只加一个-q而已),再修复testing的,最后修复stable的。于是,你的邮箱要被一堆垃圾持续淹没9个月。

    Progress-Linux就快多了。
    但是为什么要做成dist呢?
    Debian的模式设计,是方便fork,而严格控制release的。Debian的版本库更新要很多条件,例如符合DSFG(也就意味着符合一系列的开源授权协议),更新的时候首先作用于SID,Release Term说了算等等。DD也没有权利要求更新Debian stable中的包,他必须申请Release Term批准。想想也能明白,如果真的每个DD都能直接更新包,那才天下大乱了。我们不能绕过Release Term去解决问题,也不想让这些问题留着。

    那么怎么办?只有自己做一个仓库。Debian鼓励这么做(有很多dist就是这么做的),但是这时就不能用Debian的名字,因此作者才做了一个新的dist。DSFG这时变成了一个优势,Debian的所有包,都满足DSFG的第8条,“不仅仅对Debian授权”,可以直接应用。
    因此,其实Progress-Linux是一个基于Debian的改进。更快的bug fix,更多的backport,更少考虑版权问题。当然,限于作者关心的包。另一个激动人心的特点是, Progress-Linux的包和backport包不会碰撞,因此使得stable可以简单的安装很多新的包。如果你喜欢,可以在安装系统后加入他的source,作为系统的改进。但是不要指望有什么实质性变化,都是一些细节改进而已。如果你希望知道几个例子,可以看这个页面(http://www.progress-linux.org/project/about/)。

    也许你希望使用一个中国区的mirror来做这个事情(这样更快,也省去中间的一些其他麻烦),http://mirrors.ustc.edu.cn是debian中国区域的主镜像(即http://ftp.cn.debian.org),这个节点已经完成Progress-Linux的镜像。

    Relax, I don't mean to progress Linux, it's a new distribution (kind of).  http://progress-linux.org, a new dist based on Debian.
    Why people made this dist? Technically, it is no a fully dist. Unlike Ubuntu, this dist can totally on the top of Debian stable(squeeze). You don't need to download a ISO from website and install. Just install Debian stable, and add source of Progress-Linux. It will be done. If you do something like that under Ubuntu, it will destroy your system. Even though that's possible:  Progress-Linux install CD is based on the Debian Live (the main author of  Progress-Linux, Daniel Baumann, is a Debian Developer, and he is the main person behind Debian Live).

    Why? Because Debian is a preciseness dist. For example, the package mdadm had a little tiny inconveniences. It will send you a Email When check RAID every month. So if there are huge amounts of computers, it will be annoying. To fix it, one of the scripts need to be added a extra parameter '-q'. But it toke 9 months to fix it. Because maintainer don't care much about this issue, and Release Term insist this bug MUST be fixed in Sid first, then testing, finally stable. So your mailbox will be submerged under log reports for 9 months.

    Progress-Linux is faster.
    But why new dist?
    The design of Debian, is easy to fork, but strictly in release. There are many of conditions to be met to upgrade some package, like DSFG (which means a series of open source license), upgrade in Sid first, Release Term make the decision, etc. Never, a DD can update a package in Debian stable directly. He has to ask approval from the Release Term. If every DDs can update package in stable directly, that will be the hell. DD can't cut through the Release Term, and we can't wait for the issues.
    What's gonna do? Make a new repository! The Debian project encourage you to do so (and many dist do), but new repository can't use the name of Debian. So the author of  Progress-Linux made a new dist. Now, DSFG is a advantage. Every package in Debian is meet No.8 rule of DSFG, License Must Not Be Specific to Debian.

    So, Progress-Linux is a improvement based on Debian. Faster bug fix, more backport packages, less license considering. Of course, that only work for the packages author care. Another exciting fact is, all the packages in Progress-Linux and it's backport will not clashing. It help stable to install many new software easily. If you like, you can add it's source for an enhance. But don't expect too much, it all above details. If you wanna know some of them, try this page (http://www.progress-linux.org/project/about/).

    Maybe you wanna a mirror in China to run update(which faster, and less trouble).  http://mirrors.ustc.edu.cn is the primary Debian mirror of China(alias to http://ftp.cn.debian.org), which has a mirror of Progress-Linux.