标签 Github 下的文章

DuckDuckGo 成为美国、加拿大、澳大利亚的第二大移动搜索引擎

DuckDuckGo 发布公告称,在过去的 12 个月里,其应用程序被下载了 5000 多万次,比以前所有年份的总和还要多,其月度搜索流量增加了 55%,在许多国家的移动搜索引擎中成长为第二名。DuckDuckGo 说,“我们不跟踪我们的用户,所以我们不能确定我们有多少用户,但根据市场份额的估计、下载量和国家调查,我们相信有 7000 万至 1 亿 DuckDuckGo 用户。”

DuckDuckGo 现在每年的收入超过 1 亿美元。2020 年底,他们还获得了超过 1 亿美元的投资。

然而,我没有使用过它,不是我不想用……

使用虚拟机来隐藏勒索软件攻击正变得越来越流行

2020 年初,安全研究人员发现,一个勒索软件团伙想出了一个创新的招数,允许它在受感染主机的虚拟机内运行其有效载荷,作为绕过安全软件的技术解决方案。勒索软件团伙在受感染主机上有了一个小的立足点之后可以下载和安装虚拟机软件,启动一个虚拟机实例共享主机的存储空间,然后从虚拟机内继续加密受害者的文件。在执行过程中,主机的反病毒软件无法到达并检测到勒索软件。一年后,这种技术已经在地下网络犯罪中传播,现在被多个勒索软件运营商使用。

没想到虚拟化还被运用到这个方面,不过这也并非无迹可查。

GitHub 漏洞赏金激增超过 150 万美元大关

GitHub 表示,2020 年是漏洞披露方面“最繁忙的一年”。GitHub 安全漏洞赏金计划已经运作了 7 年,而在过去的一年里,发放了超过 50 万美元的奖励,使支付的总金额超过 150 万美元。GitHub 的计划范围包括众多 GitHub 拥有的域名和目标,研究人员每份报告可获得高达 3 万美元。GitHub 的安全漏洞赏金计划在安全港原则下运作,遵守负责任的披露政策的漏洞赏金猎人受到保护,不会因其研究而产生任何潜在的法律后果。

做个白帽子挣赏金真香,可惜 20 年前没有这样的环境。

苹果应用商店上的假应用导致用户被骗取 17.1 个比特币

一位使用 “Trezor” 硬件钱包存储他的比特币的用户,他在 iPhone 的应用商店里搜索 “Trezor” 下载安装的应用导致他的比特币瞬间被窃取。在应用商店中,他下载的该应用显示了挂锁标志,以及接近五星的应用评分。他下载了它,并输入了他的凭证,不到一秒钟,他价值 60 万美元的 17.1 个比特币就被窃取了。这款应用是个假的应用,旨在欺骗人们,让他们以为这是一款合法的应用。

苹果宣称其应用商店是“世界上最值得信赖的应用市场”。当苹果发现钓鱼应用后,就会删除这些应用,并禁止使用。但对于那些上当受骗的人来说,为时已晚。

CentOS Linux 克隆版 AlmaLinux 正式发布

正如我们所知道的,CentOS Linux 成为了 CentOS Stream 之后,一夜之间,社区涌现了一大批以弥补 CentOS Linux 市场空缺为己任的 Linux 发行版。其中 CentOS 服务商 CloudLinux 宣布的 AlmaLinux 得到了较多关注。

AlmaLinux 刚刚发布了第一个新版本。CloudLinux 成立了一个非盈利组织 AlmaLinux 开源基金会以管理该项目,并且承诺每年捐赠 100 万美元来支持该项目。

很多 CentOS 用户都期待一个可以依赖的 CentOS 替代品,不知道 AlmaLinux 抑或其它替代品是否能取得人们的信任。

恶意行为者滥用 GitHub Actions 功能进行加密挖矿活动

这些攻击自 2020 年秋季以来一直在进行,其滥用了 GitHub 的一个名为 GitHub Actions 的功能。攻击专门针对那些拥有自动化工作流程的 GitHub 项目,将恶意的 GitHub Actions 添加到原始代码中,然后向原始仓库提交拉取请求,以便触发 GitHub Actions。攻击并不依赖于原始项目所有者是否批准该拉取请求,只要提交拉取请求就足以实现攻击。

攻击者仅通过一次攻击就可以产生上百个虚拟加密矿机,从而对 GitHub 的基础设施造成了巨大的计算负荷。GitHub 表示他们正在积极调查。但似乎从去年以来并没有什么改善。

真是可恶啊,GitHub 免费提供的 Actions 也能被滥用!

LCTT 的 CI 已经在 Travis CI 上运转了多年,一致保持着良好的使用体验。自 2019 年 Github 推出了自家的 CI 工具 Github Action 后,我们就在考虑将 CI 从 Travis-CI 迁移到 Github,以降低维护和沟通的成本,并借助于 GitHub Action Marketplace 实现更强的功能。

项目首页

最近,因为 TravisCI 屡屡部署出错,而我们的账户因为使用的较多,已经超出了免费使用的限制,以此为契机,将 CI 从 Travis CI 迁移到 GitHub Action。

Travis CI 的提醒

项目介绍

Translate ProjectLCTT 翻译组的主要协作项目,几百位译者通过 GitHub 进行围绕开源、Linux、软件工程等领域的文章翻译,从 2013 年来,累计了大量的提交,致使项目下有非常多的文件。

Translate Project 借助于 CI 帮助译者对基本的文章格式和拉取请求进行检查;并定时执行命令,以进行所有的申请检查,对于超时未完成翻译的工作进行回收;对于文章的状态进行标记,生成相应的徽章。

生成徽章

迁移思路

Travis CI 和 Github Action 在使用方面,其实总体差异不会太大,都是基于 YAML 文件格式来编写配置文件。不过,和 Travis CI 不同的是,Github Action 支持多个不同的配置文件,因此,你可以根据不同的场景,设定不同的配置文件,降低单个配置的文件的复杂度。

此外,由于我们的脚本中依赖了一些 Travis CI 的环境变量,也需要将其替换为 Github Action 中的相应环境变量,从而确保脚本可以运转。

改造实践

1. 分析之前的 CI 流程

我们在 TravisCI 上的 CI 配置文件如图:

配置文件

总体可以分为三块:

  1. 命令区:说明了安装阶段和执行阶段的操作有哪些
  2. 条件区:指定了这个配置文件在哪些条件下会生效
  3. 部署区:写明了构建产物如何进行部署

在命令区中,有预置的安装过程和后续的执行过程。在安装过程中,安装了一些依赖,并将当前的 pages 资源克隆到本地,以继承上一次构建生成的资料。

在条件区则指明了仅作用于 master 分支。

在部署区便是将前面命令区的执行结果进行部署。

基本流程

在实际的执行过程中,还会根据环境变量不同,决定是否要执行特定的命令,这部分在后续的改造过程中,就可以调整部署,拆分到不同的文件中。

构建流程

2. 直接套用配置文件

在完成了基本的分析后,就可以建立新的 Action 配置文件了。由于基本的语法很类似,对于其中的不少内容可以进行直接套用。

比如,我们的配置文件在直接套用后,结果如下

直接套用后的结果

直接套用的文件已经可以直接运行,不过,这里有很多不满足需要的地方,所以需要做一些修改。

3. 恢复 Travis CI 的环境变量

由于我们使用的 Badge 等生成脚本并非我所编写,所以在这一次的迁移中,并不打算对齐进行调整,以避免出现故障。而脚本中依赖了一些变量,需要将其重新设置出来。

Github Action 提供了一些方法,可以让你手动设置环境变量。你可以在你的构建的步骤中,加入如下代码,从而在构建环境中设定 TRAVIS_BRANCHTRAVIS_EVENT_TYPE 环境变量,确保你可以使用这个环境变量。

 - name: Set ENV variables
        run: |
 echo "::set-env name=TRAVIS\_BRANCH::${TRAVIS\_BRANCH:-$(echo $GITHUB\_REF | awk 'BEGIN { FS = "/" } ; { print $3 }')}" 
 echo "::set-env name=TRAVIS\_EVENT\_TYPE::$(if [ "schedule" == "${{ github.event\_name }}" ]; then echo "cron"; else echo "${{ github.event\_name }}"; fi)"

此外,由于 set-env 这个方法相对比较危险,你还需要在环境变量中,开启危险函数的执行。

jobs:
  build:
    runs-on: ubuntu-latest
    env:
      ACTIONS\_ALLOW\_UNSECURE\_COMMANDS: true

4. 拆分配置文件

Github Action 和 TravisCI 不同的一点是你可以将你的 CI 文件拆分成多个文件,从而降低每一个单独的配置文件的复杂度。

根据前面对于流程的分析,可以将我们的 CI 流程拆分成三个部分:

  1. 生成 badge 文件,应当跟随每一次提交进行
  2. 生成 status 文件,执行时间较长,可以定期执行
  3. 根据拉取请求内容进行整理,做核验

则将我们的配置文件拆分成三个不同的文件:

也得益于拆分开,则在 checker 中就可以免于安装一些必要的依赖,从而精简 CI 流程,提升 CI 的执行时间。

5. 测试 CI 的运行情况

在完成了配置文件的编写和拆分后,就可以进行本地的执行测试。Github Action 写完了,难免要执行一下,确保整个流程是正常的。

这个时候你可以安装工具(https://github.com/nektos/act),来在本地执行 Action ,从而确认你的代码执行是正确的。

如果你是 macOS ,只需要执行 brew install act 就可以安装 act 工具,来完成 act 的安装。

安装完成 act ,就可以通过执行 act 命令来在本地执行 Action ,比如,执行 act pull_request 来触发 GitHub 的拉取请求事件

通过本地测试后,再将你的配置文件推送到 GitHub 上,进行生产环境的测试即可。

6. 移除 Travis-CI

通过上述的一些步骤,我们完成了从 Travis CI 到 GitHub Action 的迁移,此时,就可以移除项目根目录中的 .travis.yml 文件,彻底关闭 Travis CI。

7. 替换环境变量

在完成了基本的迁移后,需要对代码中的一些历史问题进行修复。在第三步中,我们对于 Travis-CI 的环境变量进行替换,但长期维护的项目应当尽量将这些未标注上下文的信息替换为有文档标注的,因此,我们需要将其替换。

替换环境变量主要依赖 Github 官方的环境变量说明,你可以参考官方文档

简化后,配置文件从之前的 27 行,减少至 17 行,变得更加的精简、易懂。

name: LCTT Article Checker

on:
  pull_request:
    branches: [master]
jobs:
  build:
    runs-on: ubuntu-latest
    env:
      PULL_REQUEST_ID: ${{ github.event.number }}
    steps:
      - uses: actions/checkout@v2
        with:
          fetch-depth: 0
      - name: "checkout master branch & return to pull request branch"
        run: CURRENT=$(echo ${{github.ref}} |  sed "s|refs/|refs/remotes/|") && git checkout master && git checkout $CURRENT
      - name: run check
        run: sh ./scripts/check.sh;

8. 修改 GitHub 的分支保护条件

为了确保修改符合标准,我们限制了新的拉取请求必须通过 CI 检查,才能合并进入 master 分支,因此,也需要修改相应的分支保护规则,确保设定相应的保护。

一些注意事项

1. 环境变量不同

如果你依赖了环境变量,则需要进行相应的修改。或者可以像我一样,先通过 set-env 来让本地拥有临时的环境变量,后续再逐步进行迁移。

2. Action 运行依赖要注意安全

Action 执行过程中会有两个部分。Action 本身流程依赖于 master 分支,但执行过程中调用的脚本是根据源决定的,因此,从安全角度来看,你应当尽可能将所有的流程放在 Action 中,而不是放在你的源码目录中。

3. 如何触发 CI 的拉取请求检查?

在进行拉取请求测试的时候,需要不断触发不同的提交 ,你可以通过执行 git commit --allow-empty -m "Trigger notification" && git push 来触发一个空白的提交, 推送到 Github 后,就可以再次触发拉取请求的构建,提升构建的效率。

总结

通过对 TravisCI 的流程整理、代码修改等流程,我们将之前的 Travis-CI 迁移至速度更快、性能更好的 GitHub Action ,一方面可以优化我们的工作流,另一方面,也让我们的代码更加简洁明了。

对于还在使用 Travis CI 的项目来说,也可以考虑迁移到 GitHub Action 中,来优化自己的工作流。

参考阅读

距离 2020 年结束只剩下区区 24 天,我们即将结束魔幻的 2020 ,迎来新的一年,新的一年或好或坏,但终将到来。

Github 年度报告的两点变化

在上周,Github 发布了 2020 年度报告,相信各位都有所耳闻。在对比了从 2016 年至 2020 年共计五年的报告后,我观察到了以下两点变化:

1、从关注数据,到关注人

2020 年和往年的报告一个很不同的点在于,不再单纯的以数据讲话。这样的表现“很不程序员”,反倒是和我们所熟悉的另外一个科技巨头 —— 苹果很像。不再强调数据的绝对差值,更多关注技术对于人、事、物引发的变化。

在 2020 年的报告中,内容被分为了三个不同的部分:寻找平衡、赋能社区、保护软件安全

这三者则分别对应在今年发生在每一个 GitHub 开发者身上的事件:

  • Covid-19 新冠肺炎迫使开发者居家办公,以及由此引发的生活和工作平衡的思考;
  • GitHub 为开源项目提供新的功能 Discussions 允许开源项目建立社区,让 议题 issue 可以更加专业;
  • GitHub 为所有项目开启安全检查项目,提醒开发者为项目更新出现安全问题的依赖和软件代码。

除了一个标准的概览之外,GitHub 还为这三个不同的大事件准备了详细的报告,如果你感兴趣,可以下载来看。

2、从只给数据,到还给建议

和往年的报告只关注数据不同,今年的 GitHub 2020 年度报告给出了不少的建议,指导开发者们的下一步行动。而这些建议,无论你是否可以遵循,都可以给你一些新的思考维度,可以让你获得更全的信息。

比如,在生产力篇的第 6 页,GitHub 给出了一些建议,来帮助开发者获得工作和生活的平衡,谋求更好的开发体验。

类似的建议也出现在了安全篇的第 6 页,GitHub 为开发者提供了一些有效的保护软件安全的介绍,帮助开发者防御安全问题。

报告中的其他地方也出现了类似的建议,帮助更多的开发者避开问题。

值得关注的数据

除了 2020 年度报告的结构和行文变化,报告中的一些数据也值得我们关注:

GitHub 不仅仅是开源的代名词,更是工作的代名词

在 2020 年度报告中,GitHub 首次给出了按周计算的活跃度信息,可以看到,GitHub 的活跃用户信息和工作日、节日等节点高度重合,明显表现出了工作日和休息日的区别。

和我们曾经设想的,工作时做公司的事,下班的时候做开源不同。如今,GitHub 已经成为一种工作方式,我们会在工作的时候,因为工作需要而打开 GitHub,在休息的时候,因为个人兴趣而打开 GitHub。

Github 如今已经成为了一种必备品,我们每天都在“面向 GitHub 编程”~

变大的总量,新加入的学生和占比减少的开发者们

GitHub 公布的 2020 年开发者总数为 5600 万开发者,而在 2019 年这一数字是 4000 万开发者,过去的一年里新增了 1600 万开发者,而纵观近几年数据,今年新增的数据是历年来新增用户最多的一年。

而总量变化的同时,开发者的比重在所有用户的所占比重在下降,从 2016 年的 60% 逐年递减至 2020 年的 54%,相反,我们可以看到,教育相关的学生用户、教师用户的比重在不断的攀升,到 2020 年,教育相关用户的比例已达 23%,几乎达到了 Github 用户比重的四分之一。

学生成为 GitHub 用户中的主力,在未来,我们将会看到更多基于 GitHub 的学习、教育的方式,GitHub 也将成为软件开发、计算机科学等相关领域的必修课。

自动生成的安全更新和更快的软件安全更新

对于绝大多数的软件来说,对于第三方库和代码的依赖是不可避免的,特别是使用 JavaScript、Ruby 和 .Net 的开发者,对于第三方库的依赖都在 90% 以上;这些第三方依赖除了引入了更便捷完成代码逻辑以外,还带入了更多的安全问题。对于开发者来说,如何尽可能不受依赖影响,保障软件安全就成为了一个值得关注的问题。

GitHub 为开发者提供了无痛的自动生成安全更新 拉取请求 Pull Request (PR)功能,系统在后台自动检测依赖代码是否有相应的安全更新,并创建相应的拉取请求,为开发者提供了一键解决依赖库所引发的安全问题的功能。降低开发者维护软件的成本,将一部分可以自动化完成的工作,交由系统自动完成。根据 GitHub 的测算,在接入了该功能以后,开源代码的安全更新速度相比于之前提升了 4.4 周时间,让软件的迭代更加的快捷。

不过目前该功能仅支持六种不同的包管理器和编程语言,具体包括:Composer(PHP)、Maven(Java)、npm(Javascript)、NuGet(.Net)、PyPI(Python)、RubyGems(Ruby),其他语言暂时无法享受到来自 GitHub 提交的安全更新。

总结

今年的 Github 报告中的一些表现,和往年的报告有所不同,表现出的人性,让我们有了更加暖心的建议。作为一个开发者,我十分建议你下载一份官方的报告,细读其中的建议,让自己的开发更有效率;让自己的生活更加丰富多彩;让自己的代码,更少 Bug !

事件发展

正如我们之前报道的,近日,GitHub 收到了来自美国唱片业协会(RIAA)提供的数字千年版权法(DMCA)删除请求,移除知名项目:youtube-dl。

youtube-dl 项目的主页已经被 DMCA 撤下

在删除申请中,RIAA 提到该项目被删除主要有两个原因:

  1. 规避 Youtube 提供的数字版权服务:
this source code is to (i) circumvent the technological protection measures used by authorized streaming services such as YouTube
  1. 在显著位置指引用户下载 Youtube 上的授权视频:
the source code prominently includes as sample uses of the source code the downloading of copies of our members’ copyrighted sound recordings and music videos

youtube-dl 项目创建于 2008 年,早期被用来下载 Youtube 视频,以解决在网络较差的环境下查看较大的 Youtube 视频的用户(在当时,用户使用的主流蜂窝网络还是 3G)。后续,随着 youtube-dl 支持的网站越来越多,以及能够被模块化调用,一些企业也会使用 youtube-dl 来完成 Youtube 视频导入的功能。

比较有趣的是,在 youtube-dl 被删除后,有开发者将 youtube-dl 项目以 PR 的方式,将所有的提交推到了 DMCA 库当中。

小白评论

在这个事件中,我们要看到的是 youtube-dl 本身作为一个开源项目,在过去的十数年里的蓬勃发展和用户量的不断攀升,以及作为技术人不断的去钻研的决心。这样的精神和努力是值得鼓励的,他们都是一些非常棒的开源人。

但我们也需要注意到的是,youtube-dl 项目本身从设计之处,就是违反了版权的设计理念。在没有授权的情况下, 任何人都不应该去下载和分发相应的版权文件。我们固然可以从技术的角度突破这个限制,但也需要明白,这样的行为和设计想法是不符合版权规则的。

当然,youtube-dl 的存在方便了很多网络条件不佳的人和一些生产用途的企业,但无法否定的是,其本身作为侵犯版权而设计出来的工具这一个基础事实。对于开发者来说,我们也需要在进行研发的时候注意规避相应的问题。不要授人以把柄。

回归到本次事件核心 youtube-dl,对于它来说,版权法的存在使得 youtube-dl 作为工具的存在被抹杀,但我们可以换一种方式让其存在,让 youtube-dl 的核心算法以论文和技术文章的方式进行发表,授人以鱼不如授人以渔,以技术文章的方式让技术本身流传下去, 也是一个不错的选择。

不过,事件开始变得有意思了,因为有一些愤怒的开发者开始基于 GitHub 的漏洞开始对 GitHub 的 DMCA 库进行攻击,比如 Twitter 用户 lrvick 将 youtube-dl 提交到了 DMCA 库,对 GitHub 以及 RIAA 提出了挑战,让 GitHub 封禁自己的 DMCA库。如果封禁,则 DMCA 库本身也不可用。如果不封禁,则说明 RIAA 和 Github 针对 youtube-dl 的行为就是一场双标的表演。

这个事情很有意思,从法理的角度,我支持 youtube-dl 的封禁,但作为一个 Geek, 我对 Irvick 的行为更感兴趣。

GNOME 下一个版本将从 3.38 跳到 40.0

原计划在 2021 年 3 月释出的下个版本 GNOME 3.40 将重命名为 GNOME 40。在第一个稳定版 GNOME 40.0 发布之后,随后的 bug 修正版本将在小数点后加 1,如 40.1、40.2、 40.3...再下一个版本则是 GNOME 41。主要原因是在可预见的未来开发者不会像 GNOME 2 到 GNOME 3 那样改变核心的技术,因此大的版本号也就不会随之增加。所以开发者决定将 3.40 直接改名为 GNOME 40,而如果改名为 GNOME 4.0 则可能会带来意想不到的暗示。

来源:solidot

拍一拍:又一轮飙版本号竞赛开始——反正特性不够版本号凑。开源技术届像 0.01 这样的微小版本号传统在逐渐丧失。

GitHub CLI 1.0 发布

GitHub 的命令行工具 CLI 发布了 1.0 正式版本。GitHub CLI 允许开发者在终端内直接操作 GitHub 的各项功能,如拉取请求和议题。它还允许开发者为任意命令创建别名,能直接访问 GitHub API。

来源:solidot

拍一拍:没有命令行的 GitHub 显得不够极客——当然,其实命令行有助于提供更多的自动化。

用了 21 年,Thunderbird 78.2 正式加入对 OpenPGP 的支持

21 年前,用户向 Mozilla 递交了功能请求,希望加入对 PGP/OpenPGP 的支持,当时电邮客户端 Thunderbird 还不存在。在这之前,用户在 Thunderbird 中加密邮件通常需要使用扩展 Enigmai。随着 v78.2.1 的发布,Thunderbird 正式默认启用了对 OpenPGP 的支持。

来源:solidot

拍一拍:虽然 PGP/OpenPGP 可以有效的保护电子邮件安全,但是一直叫好不叫座。