Introducing the brand new nodejs packaging

There has been no activities for nodejs in openSUSE for a while. (Since 13.2) But it doesn’t mean it’s dead. It’s actually evolving. Today the brand-new nodejs-packaging answers all the questions. For a long time and traditionally we openSUSE prefer to keep consistence with Fedora in RPM packaging (Although small differences still present). So did nodejs packaging. We used the nodejs-packaging tool from Fedora to package for openSUSE before. But it introduced lots of troubles:...

January 23, 2016

本周开发札记

盘点一下本周自己在 openSUSE 上面做的工作: 解决了 wine 的 desktop file 长期以来位于未知类别的 bug openSUSE 的 wine 从 Ubuntu 抄来了一些 desktop files。而这些文件的 Categories 都是错的(Categories=Wine;Emulator;Documentation;)。根据 freedesktop 的 desktop entry specification 规定,Emulator; 只能跟在 Games; 或者 System; 后面使用,所以是错的,而 Wine; 本身不是一个合法的 Desktop Category; Documentation; 又不符合。统一调整到了 System;Emulator; 类别,而一些可以独立使用的比如 notepad 则视同原生 App 调整到了对应的比如 Utility;Texteditor; 类别。 对 devel:languages:nodejs 源进行了 big cleanup 主要是为了我马上要开发的 nodejs-packaging 做准备。npm 由独立打包回归到了与 nodejs 一同打包,而我开发的 nodejs-packaging 又准备使用 bundled packaging 的模式,那么独立打包 npm 时的一些依赖包就不再需要了。这些依赖很早就被我用自动化脚本(简单的 shell script 和 ruby)从 openSUSE:Factory 批量删除了,现在 d:l:nodejs 源里还有一些 broken 状态的尸体。用自动化脚本批量 revoke 了一些 factory-auto-submit 导致的被 rejected 的 SR,然后跑脚本 wipebinaries 从服务器删除 RPM,从服务器 remote delete 掉。...

January 23, 2016

脑洞大开的周末

这个周末其实只打算维护下我的 upstream-notifier 的😂。好吧原来我只是想更新几个软件包,结果觉得既然都去更新包了,不如把给 upnoti 用的 json 也写了。 写的过程中要测试,发现 github 上面的有些项目的 release page 底下没有内容,于是又改 upnoti 的 github mod 支持这种情况。然后又觉得 upnoti 太慢,加了 multithread 支持,然后又开始优化性能,代码风格之类的。 好不容易搞定了,这时 home:opensuse_zh 已经更新完几个包了,没法生产环境测试了,又去 d:l:go 里把 docker 的几个依赖抓回来,发现 golang-packaging 在 sles11 上面 test 宏出错,又给自己加了一项工作任务。 然后在 features.opensuse.org 上看到有个人要 tox 整合进 openSUSE,想起来我还维护着 cutegram 和 qtox,于是去更新 cutegram。 结果觉得我的用 _service 抓 git 的软件包这么多,每次更新基本都是无脑的,干嘛不做个自动化工具呢?于是 obs-scm-autoupdater 就这么诞生了😈 写完 osa 的基本功能,又开始怀疑人生了。rpm 打包这么难,新手不爱学啊!就连我自己也经常是本来要简简单单安装个软件,比如 vokoscreen,录个视频给 konsole 的人看 bug,结果看到 vokoscreen 版本太低去更新,就把报 bug 这事岔开了。生产力就是这么低的!打包不应该那么耗时间,应该简单得像本机编译一样,甚至比那个还简单,新手才喜欢。 关于这个问题有三个办法: 第零个是不学打包直接本地编译。我烦死本地编译了,之前本地编译安装了个 basket,后来时间长了把源代码删了,没法 make uninstall,有洁癖的我就又编译了一遍就是为了卸载掉。哦对了 basket 有 kde5port 了!我当年想学 c++ 其实就是为了维护这个项目,虽然我各种待办事宜软件搞了不少,其实有 todo 的时候多半还是用脑子记,因为要么那时手头没工具要么人太烂,就好比我是学金融的却没老老实实用 skrooge 这样的手帐软件记满哪怕一个月,嘿嘿...

January 18, 2016

高手创造工具

今天整理出来了自己这些年碰过的软件包,不算 M17N 之类拥有 repo maintainer 角色的源里的软件包,就有 178 个。加上那些总量要过 300 了。 金融领域,一个基金经理维护 20 只左右股票组成的资产池就需要一个庞大的团队。300+ 的软件包几乎可以说是早到了 upper limit 了。至于技术,基本上再提高就不会是在打包这里了,而是去真正的学习各种编程语言来解决编译错误了,这其实做的已经是 upstream developer 的事情了。我的 github profile 这些年累积下来很好看,它说我的主力编程语言有 4 种(笑~),还被 Google HR 发过邮件(笑~)。 我维护着很多的中文社区相关的包。偶尔有一种莫名其妙的责任感:有用户在 forum.suse.org.cn 说哪个软件 openSUSE 没有,就想赶紧包出来,潇洒一 post。或者谁说 openSUSE 出了什么 bug,感觉就跟自己系统不能用了一样。几乎每天在 build.opensuse.org 和论坛上面站台,打包点东西,帮 factory 修修 bug。 这一年我掉到了 nodejs 和 go 这两个我到现在依然不会写的语言的大坑里去了。npm 有 200+ 个依赖,导致我其它包的维护几乎就是停滞了。 现在来看还是要上帝的归上帝,凯撒的归凯撒。论坛我不去,他们几个管的也挺好的,phoenixlzx 也没伸手要钱; 有些软件包不是我打的,比如 bcloud,大家也用上了;Leap 发布我没组织,用户一样也不少。有些空白总是能够填补的。openSUSE 是一个社区,能成长起来一批有自治意识、能够且有能力自主奉献的人就是对开源的贡献了。 而我自己的打包工作,我学了一些 ruby。元旦把之前实验性的 github.com/marguerite/golang-packaging 形成生产力了。这个项目简单说就是用 ruby 实现了一些 rpm macros。可以让你不需要真正懂 golang 的编译环境是怎么构建的、环境变量是怎么设置的,甚至连最后的 rpm 文件列表(%file)都不用你来写。你都不需要知道 openSUSE 的 golang 软件包安装到什么路径就能做出包,大大降低了打包需要了解的背景知识(当然这些知识还是记录在了 wiki 上面),只需要根据错误提示写固定格式的编译依赖(运行依赖 Requires 和 Provides 是自动处理的。甚至 Requires 都只是为了以后 golang 支持 shared linking 做的准备)。...

January 12, 2016

RPM specfile 中 值的研究

研究这个问题是因为论坛上的一个讨论:zypper reinstall package 略过楼主的实现是否正确不谈(因为他不给我看 specfile 估计是公司的软件),简单来说可以分成几个子问题: 第一个是 RPM specfile 的 %postun 部分的 $1 变量到底是什么: if [ $1 == 0 ] ; then $1 的值当然是有意义的,它代表安装在你系统上的同名软件包的版本数。比如你升级软件包,那默认是 1,但在某个状态是 2,因为这时新包装上旧包还没卸载,0 就代表这个包在你系统上已经不存在了。 http://stackoverflow.com/questions/7398834/rpm-upgrade-uninstalls-the-rpm 第二个是 RPM reinstall 的作业流程是怎样的,是遵循升级的流程也就是: 软件包升级的过程是先安装新包后卸载旧包,只有来自旧包的差异文件会被删除。也就是 pre -> install -> post; preun -> uninstall -> postun 还是另有一个流程。$1 值的变化可以推测出这个问题的答案。 第三个是使用 zypper 和 rpm 分别进行重装,$1 值的变动是不是一致的。 这个问题我们需要做一个实证,代码在这里: https://build.opensuse.org/package/show/home:MargueriteSu/rpm-reinstall-demo 相应的测试用 RPM 也可以在那边取得。下面直接上结果: sudo zypper --no-refresh install --force rpm-reinstall-demo-0.0.0-5.1.x86_64.rpm drwxr-xr-x 1 root root 0 8 月 2 22:25 demo 通过 /var/tmp/demo 的时间戳记可以发现安装前后 demo 没有被删除重建。...

August 2, 2015

关于 Deepin 用户开发者大会的浅见

这篇文章是唱反调的,可能会不舒服的可以离席了。 最早长微博写了一半(好吧我弄了一个真·@openSUSE娘),觉得一个喧嚣的场合不太合适搞技术的(好吧我又给自己脸上贴金了)坐下来互相交流(喷),于是就发在这里,也特意选择 DAU 大会这个话题冷下来的时候说,避免给他们造成负面的影响。深度团队要觉得我是个倒灶的就无视掉好了。 先说两点: (1) 某些 Deepin 的粉丝可能会觉得我吃不到葡萄说葡萄酸。 第一,我没有直观感受过 Deepin 作为一个发行版有多少用户(不是 Deepin Music 这些应用软件),这不像 Ubuntu 那么明显,所以从用户基数的角度来看,我没有概念,也就没有说酸的基础。 第二,我这里说的是他们的战略大方向,他们拥抱了哪些技术,营销的定位,这些东西,而不是去像黑 Ubuntu 那样,“哈 U 的用户用 U 都是为了让别人知道它在用 Linux 而不是为了解决自己的需求”。 深度团队是 Linux 中文圈里比较靠谱的团队。另一个比较靠谱的我认为是安同。而优麒麟处在第二梯队,遗产流的那种。后面如果还记得优麒麟的话,可能会拉它出来做反例。唉,我也勉强算 Linux 中文圈的大前辈了,这种褒贬倾向真不该轻易流露,会给别人造成负担的。 首先深度团队的人比较 nice。我记得有一个陈祥帮吧,曾经在 openSUSE 中文论坛给我发私信说两个社区合作的事情,当时正好生活上有一些变动,后来就不了了之了(欢迎重启)。但总体印象较好。现在的“国产操作系统”的人有一点不好,为了吸引用户而越来越没下限了,有些时候觉得跟百度 Linux 吧的人差不多。深度算是有一些水准的,相对于同样没有经历过大发行版社区培养的人来说。 其次深度的人相对比较能够出活儿。他们有 30 多个人,武汉有深之度公司,连中文圈比较稀缺的画师娘都招了,像「深谈」这样的应用程序还是很惊艳的。当然激情上面应该比安同(骚年强则中国强)要差一些,毕竟是领钱干活的个人有个回报率和职业发展的考量,但比起优麒麟眉毛胡子一把抓,开发者不少,成果稀少(估计是瞄准高端定制市场和政府采购去了),还是要好一些。 第三他们有想法,并且一定程度上比较能够遵守规则,虽然对上游的贡献不是很多,但是对自己的成果的态度还是很开放的。 所以真心希望他们能够出彩。 铺垫完了,下面开黑: Deepin 2014 发布和主要的三个演讲(Gitcafe,Crossover,Seafile)没什么好黑的。甚至还有点小艳羡,比如那一大堆赞助伙伴和合作媒体,有公司实体,我们这些爱好者群体和国外机构在华分支在本地化上确实比不了。 主要黑两点: 默认搭载 Crossover,哈,这不是我黑的,Qian Hong 还有点面子的嘛,再说你在中国做发行版都不搭载商业/免费软件,未免逼格太高。 我要黑的是,似乎 Deepin 要入 Mono 这个坑?(微博上是这么感觉的) 首先说明,我个人对于任何铺平 Windows 到 Linux 之路的举动都是支持的,但我更认为这种事情应该由「使用者教育」比如建设 Wiki 和社区来实现,而不是由技术手段去抹平差异来实现,因为之所以有差异就证明抹不平。这不是「我饿了,于是吃饭」的逻辑,而是「我饿了,吃了米饭,又去吃馒头」,不可能有米饭味儿的馒头,那是饭团。 先介绍下什么是 Mono,它是在 Linux 上搞 .NET 开发的一个东西,是 SUSE 创建的,后来觉得这个脑洞太大,把整个 mono 团队都开革了。...

July 11, 2014

openSUSE 下配合 Nginx 搭建 qwebirc 网页 IRC

做这个的初衷很简单:IRC 对小白太远了。 它不像论坛,打开网页就能刷; 不像 QQ/Gtalk,软件是人都能找到,装上就能上。它需要专用客户端(比如 konversation),而且装完你还不能上,还有一堆命令等着你,何况还有 20 年早期互联网流传下来的各种名词、礼仪。总之它是一整个与世隔绝的黑客生态圈。 但是吧,不学还不行,你看哪个开发者不会使用 IRC 的?于是我想先降低一下它对小白们的陌生感,做一个给蠢人用的玩意。(成功把自己从其它蠢人中分离开以示区别哦耶!) 于是最蠢的来了:qwebirc,是一个自由开源的网页 IRC 客户端,最早是给 QuakeNet 游戏网开发的。这是目前我能找到的唯一一个开源的。 看了下,发现它居然不支持多语言!好吧,硬 hack 出了一个繁体中文版(别问为什么不用简体,因为硬 hack 就是只能使用一种语言,没有动态切换,那简体用户繁体一样能看懂,自豪吧?)。 安装依赖(openSUSE 下) sudo zypper in nginx python-Twisted python-simplejson java-1_7_0-openjdk 下载 然后随便找个文件夹,因为 qwebirc 和 HTTP 服务器的关系不是常规那样的,常规是在 /srv/www/htdocs(又叫 webroot)下面放一些 html/php 文件,然后 HTTP 服务器让那个文件夹下面的东西能被访问,但是 qwebirc 其实是自己跑起来了一个专用的 http 服务器,为什么呢?据说是通用 HTTP 服务器设计不是用来服务大量的、长期活动的连接的,它们可以处理的是大量的但是都是一次性的连接,这种基于线程或者多进程的服务器(Apache 被点名了)没办法处理太多的这种连接,到时候会把你的网站一起拽下线呦! 但 qwebirc 的专用服务器是开在 9090 端口的,你不想访问 yourircserver.com:9090 这种丑丑的链接吧?所以你需要一个反向代理,还不能用被怒黑的 Apache。。。也就 nginx 了吧?好在我们别的服务器也是用的 nginx,因为 openSUSE 社区穷 VPS 内存小。。。 言归正传。找到文件夹了吧?然后在命令行下载最新的稳定版 qwebirc: wget http://qwebirc.org/download-stable-zip 它没后缀但它是个 zip,解压:...

October 12, 2013

openSUSE 特殊国情有关的 FAQ

引子 —— 能解决的是技术,不能解决的是人心。 为什么我们开发者要用 Gtalk 和 IRC? 跟 Google 没一毛钱关系。我们需要一个全球性的网络,因为我们面对的不只是用户,还有其它国家地区的开发者。就 openSUSE 来说,我没有理由去要求台湾地区的开发者用 QQ,也没有理由去要求他们的用户在官方论坛转简体。我们需要开放而成熟的技术,以便于进行二次开发。二次开发就是「修复」一些原本没有「坏」的东西来满足自己的需要,非开放而不能为。Gtalk 后面的 XMPP 协议坏了吗?没有,但是我需要与 IRC #opensuse-cn 互通的机器人、需要群组机器人、需要网页的聊天记录,于是我「修复」了它。现在我们有了 ~~talk@suse.ws,有了 https://talk-marguerite.rhcloud.com。~~Update: Gtalk 群组地址变更为 talk@suse.org.cn。(IRC/Gtalk/QQ 群三网合一),聊天记录地址变更为 https://forum.suse.org.cn/log.html 而 IRC 就像你们的 QQ 一样,我一样不爱用。我至今不会它的指令,也不会每天挂着。但是有需要我还是会去,就像开会要去会议室一样。你可以不参加会议,你可以选择不去会议室听自己非常想听的东西,但你不能要求别人围着你的桌子开会。 为什么我们要用论坛? 我们需要一个 default to open 的地方,能够存档我们回复过的东西,避免重复工作。 我们需要一个延时的地方。避免你滴滴滴滴吵到我们的工作和生活。 我们需要一个多人的氛围。 为什么我们要用维基、文档甚至 manpage? 我们需要一个说明书性质的东西。 说明书一个人是写不完的,在所有人都有权利去写的情况下,说维基、文档不全实际上是在骂你自己,不全?你干嘛了? 为什么我们不用 QQ 群? Update:1. 勇敢地像现实低头 2. Gentoo 社区的 microcai 博士开发了搞定 QQ 的 avbot, Fcitx 社区的 csslayer 翁学天博士友善帮助在自己的服务器运行它,Ubuntu 社区的 shellexy 大神帮助推荐了印度阿三的人肉验证码识别服务 3. 我的一些个人思想转变。于是支持了。但是,QQ/贴吧永远只会是你 Linux 生涯的一个暂住之地,如果你非要永久居留,那你是体会不到 Linux 社区的魅力的。我们为你点亮了一盏灯,而不是帮你推倒窝棚鸟枪换炮,真正的风景在 openSUSE 中文论坛...

March 26, 2013

培育开源 NGO 的一些思考

这是周六北京 GNOME 小组活动 openSUSE 社区的讲稿。撰稿人是我。主讲人是来自 SuSE 的 Lance Wong。 大家来自不同的社区,面对的问题也不同。我这次先来拨一拨 openSUSE 中文社区这只洋葱。 首先提到 openSUSE,大家想到的应该是: 华丽 稳定 用户少 很少人讲 千年老二。红帽的小弟。 一个华丽而稳定的系统,为什么 Linux 中文圈却没有声音?我能想到的有两方面: 宣传不到位 沉默的大多数 这就是我们的现状。为什么会有这些现状,玛格丽特有几篇选料生猛的文章。社区的管理者应该都有共鸣。我们试图解决这一问题。 宣传不到位 宣传不到位的常见原因有以下几种: 投入不够 政策错 没有细分用户 投入不够 这里的投入不够不只是批评 SUSE,也在批评社区自己。SUSE 对 Linux 社区一直是有期待的,这种期待到了什么程度呢?如果你是一个来自其它社区的成员,想要去参与 openSUSE Conference,我们的 Travel team 出机票。SUSE 也曾为 openSUSE 在大陆的推广做过很多工作,「最漂亮的 Linux 发行版」,听说过吧,但是很遗憾,在一个没有培育出「我应该怎样」的国家,这些努力都可悲的失败了。这是所有开源活动都会面临的问题,玛格丽特总结的很好,大家都是站在泡沫上的,人家爱的就是你这股冒傻气似的不要钱。 金钱社会,奉献总是看得很轻。这就是为什么至今中国开源运动的中坚依然是 70 末 80 初这些人。因为理想已经被现实取代了,我们没法在用「开源是为人类解放」来招揽用户了。或者说,在一个全民追求「装逼又不贵」的社会,我们已经断代了。在这样的社会,用户的多少已经不能说明问题了。我们必须认识到:现在是末法时代,不是传教的时代,不是我扯起大旗就能拉帮结伙的时代,而是,我们要把我们的理想,贩卖,给我们想要卖的人。 为什么要批评社区呢?因为中文社区没有发出过自己的声音。会哭的孩子有奶吃。Ubuntu 宣传的多,人家就认识它。你中文社区没有哭过,国际社区和 SUSE 又怎么会知道你饿? 很幸运,现在这个问题已经开始着手解决了。SUSE 中国目前指定了两位 Site Manager,Sunny 和 Jia ju 来作为联系社区的纽带,再加上 SUSE Desktop Team 的协助,弹药的问题总算解决了,现在能拉起一个加强排还是一个加强连,就看社区能够吸引到多少大头兵了。 政策错 这是很多社区都不愿承认的问题。Linux 社区总是基友少,嘴炮多,越活跃的,嘴炮越多。像 openSUSE/Fedora 这种完全没冲突的基友社区,少。但我想问一句,我们的理想不是一起的么?...

March 23, 2013

openSUSE 中文社区面临的若干问题

一直有人批评 openSUSE 的玛格丽特时代带了意识形态,还给我总结出两个凡是:凡是 openSUSE 的都是好的,凡是 openSUSE 上出现的问题都是用户不对。那我就来巴一些坏处,只有一个声音是不对的。但我巴坏处肯定是想让它好,毕竟我是玛格丽特女王大人。 (一) 中文社区 Ubuntu 肯定是最大的中文社区,Arch 肯定是最活跃的中文社区,Fedora 肯定是最爱交际的中文社区,openSUSE 肯定是最宅的中文社区。 首先我们应该没有多少活跃的大学用户。我们的用户据我观察应该是企业用户居多。这种人的优点在于他们都非常强,缺点在于他们都非常懒。如果我能解决自己的问题,而且我只用 openSUSE 挣口粮,那我为什么要帮助你使用 openSUSE?你能想象一群 Intel 员工,SuSE 员工,中兴的软件开发科长做你的成员,然后中文社区的基础设施是一个人生前 22 年没见过立式服务器的女生搭建的么?就像我在 Gtalk 群里怒喷的一样:你们呀,什么都会,就是不帮我,对吧。 其次我们一直是一个单核心的社区。我不是说开发,是说社区建设。开发牛人多了去了,我这种 CPP 指针数组都不会的肯定排不上号。苏哲时代(SuSE 9),我在上初中,但提 SuSE 9 老人都知道,几乎就是:Linux 是 SuSE 9 与硬件通信的工具。Thruth 时代,我在上大学,「用 SuSE 就是用 Thruth」,这也不是我说的。现在是缝缝补补吃老本的玛格丽特时代。我不会开发啊,只能根据长老们灌顶得到的经验盲修 bug,修好了,说明我逻辑和交际比较强。我一般是,看到 bug,用人类逻辑而不是机器逻辑去猜,不能开机?好,systemd,然后去找 Lennart; btrfs?去找 John; GNOME?Vincent/DimStar; Build Service?Adrian/Coolo; 输入法坏了?翁学天出列; Bash 支援?花花; Python?以前是 Hicro Kee 现在是 Felix Yan。懂了吧,openSUSE 的社区管理对我来说就是打牌,我就是拿着满手不情不愿看你是女生帮帮你的大王,用户出什么我都出大王,用户出大王?好,是用户你的不对,我不赢钱白跟你玩牌,你怎么能出大王赢我呢? 但我给自己的定位是 Coordinator,中文翻译为办公室主任。我希望 openSUSE 有几个强有力的男性领导,各管一摊,有推广的,有集会的,有开发的,有答疑的,有翻译的,有维基的…然后我就每天上线发 task 定 deadline 随手卖个萌就好。但是没有。于是手比较贱(处女座就是你骂我一句我下套也要还回去,不然今天就不完美了我睡不安稳),慢慢就都抓自己手上了。一个单核心的社区是没有活力和前途的。商业上是该给那个核心上巨额保险。但开源事业不行,我要钱干嘛?我就要东西。你能跑到保险公司去说哦如果玛格丽特不用 openSUSE 了你赔我一个能妥妥的骑住微软的 openSUSE 吗?...

March 21, 2013