V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
neilp
V2EX  ›  分享创造

世界上最短,最小,最智能的纯 Shell, Let's encrypt

  •  
  •   neilp ·
    Neilpang · 2015-12-26 21:51:31 +08:00 · 6323 次点击
    这是一个创建于 3053 天前的主题,其中的信息可能已经有所发展或是发生改变。
    欢迎大家 star, fork

    https://github.com/Neilpang/le


    不依赖 官方客户端,
    不依赖 python,
    直接通过 shell 脚本 实现 ACME 协议.

    纯 shell, 全自动化 搞定 Let's encrypt
    第 1 条附言  ·  2015-12-27 00:02:28 +08:00
    感谢大家的宝贵的意见和建议.
    这只是第一版, 后续会持续改进.


    写这个工具的目的是为了研究 acme 协议. 其实这个协议挺简单的, 不知道为啥 letsencrypt 的官方客户端会如此晦涩难用. 于是就自己动手.

    我的性格就是看到有人把简单的事情做复杂了,就忍不了.

    希望大家多发 issue, 后面会持续改进.

    谢谢.
    第 2 条附言  ·  2015-12-27 13:41:54 +08:00
    @tennix 同意. 我并不把大家的回复看做"指责", 当做建议好了.
    这个功能不复杂, 我的想法是用最简单的方法实现, 核心代码其实 200 行左右的 shell 脚本. 为此添加 python 的依赖划不来.

    最简单的方法,最快的实现. It works 对我来说最重要.

    这个脚本不是性能关键的任务, 所以性能也在其次.

    能用, 稳定, 简单, 自动化 这是我的初衷
    第 3 条附言  ·  2016-01-06 09:39:03 +08:00
    重大更新, 支持 standalone server

    https://v2ex.com/t/248609
    第 4 条附言  ·  2016-01-30 23:29:09 +08:00
    更新, 支持 dns 认证.
    并集成 cloudflare api 自动认证.
    支持自定义 api 扩展
    27 条回复    2015-12-30 08:42:32 +08:00
    ahu
        1
    ahu  
       2015-12-26 21:59:41 +08:00
    赞一个,收藏了
    imWBB
        2
    imWBB  
       2015-12-26 22:08:37 +08:00 via iPhone
    收藏。
    xufang
        3
    xufang  
       2015-12-26 22:30:24 +08:00
    赞一个。不过楼主的 bash 的风格需要进一步“美化”。
    neilp
        4
    neilp  
    OP
       2015-12-26 22:33:47 +08:00
    @xufang 恩, 请多指点.
    KentY
        5
    KentY  
       2015-12-26 22:52:12 +08:00
    不知道是不是有点挑剔了, 打开代码看了下, 很多例如:

    echo|sed|cut|sed|cut....
    grep|sed|sed|cut|cut...
    grep|sed|cut|cut....
    ....

    这些真有点眼疼.. 建议看一下 awk, 会对你这个脚本有挺大帮助.
    crowds
        6
    crowds  
       2015-12-26 22:59:23 +08:00
    shell 代码超过了 100 行

    这说明了什么?
    neilp
        7
    neilp  
    OP
       2015-12-26 23:02:39 +08:00
    @KentY 谢指点. awk 的确不会, 以后再改善吧. 比较喜欢简单的事情简单做. make it work 比较重要. 何必在乎有什么方式呢.
    KentY
        8
    KentY  
       2015-12-26 23:03:36 +08:00
    @crowds 这不说明什么呀. 大于 100 行的 shell script 有的是吧?
    KentY
        9
    KentY  
       2015-12-26 23:07:56 +08:00   ❤️ 2
    @neilp 我不是强调 awk 的方式.
    你那一串 pipe, 一下就 5,6 个进程, 而且你的代码里这样情况很多. 一般 grep 和 sed/awk 一起用都是 quick and dirty 的方式. 当然, 你可以说, 我把全部代码中启动 100 个进程,简化到 20 个, 对我这个程序来说性能没什么显著提升. 可是作为咱们搞技术, 如果知道一种方法是最优的, 却选择不优的(我这里不说是最差的), 是态度的懒惰, 不是技术的问题. 特别是, 这个选择并不提高多少开发成本.

    当然, 你要学习 awk, 这是成本. 但我觉得 awk 作为 shellscript 编写是必须会的之一. 不说掌握多高深, 但必须会.

    my 2 cents
    crowds
        10
    crowds  
       2015-12-26 23:08:58 +08:00
    可以参看 Google code style ( https://google-styleguide.googlecode.com/svn/trunk/shell.xml )里一段:
    If you find you need to use arrays for anything more than assignment of ${PIPESTATUS}, you should use Python.
    - If you are writing a script that is more than 100 lines long, you should probably be writing it in Python instead. Bear in mind that scripts grow. Rewrite your script in another language early to avoid a time-consuming rewrite at a later date.
    - 如果有复杂的的对象,请使用 Python ;- 如果写了超过 100 行的 shell 脚本,考虑使用 Python 重写。
    zho6
        11
    zho6  
       2015-12-26 23:12:51 +08:00
    收藏了
    562 行的 shell 费心的工作
    感谢无私的分享 :-)
    KentY
        12
    KentY  
       2015-12-26 23:13:34 +08:00
    @crowds 恕我直言, 我觉得这太教条了. 你可以搜索一下你电脑里的 shellscript, 超过 100 行的有多少, 他们又有多少会转到 python.
    而且这毕竟是 google 他们自己的 convention, 虽然 google 对软件开发行业推动很大, 但不能这么教条我觉得.
    neilp
        13
    neilp  
    OP
       2015-12-26 23:15:02 +08:00
    @crowds 感谢.
    neilp
        14
    neilp  
    OP
       2015-12-26 23:15:28 +08:00
    @KentY 感谢
    aheadlead
        15
    aheadlead  
       2015-12-26 23:17:44 +08:00
    @KentY 我觉得 google 说的有一定道理

    在有条件的情况下 还是尽量转别的好读的 script 更好

    shell 太长简直难维护
    jings
        16
    jings  
       2015-12-26 23:17:59 +08:00 via Android
    你依赖 linux 卒
    xufang
        17
    xufang  
       2015-12-26 23:19:00 +08:00
    @neilp 亲,你这个东东固然有独创性,但是在发上 github 并且甩到 v2 就是做好被人“指指点点”的准备。。。 @KentY 这位兄台已经说的很客气了,要是我的话估计就很说的很冒犯了(可以翻我过往发言)。

    最后说一句,楼主既然这是个不错的东东,何不精益求精?
    guonning
        18
    guonning  
       2015-12-26 23:19:53 +08:00 via Android
    能用,好用,而且还分享,才是最重要的
    KentY
        19
    KentY  
       2015-12-26 23:20:50 +08:00
    @aheadlead
    我完全同意 shellscript 长了调试, 修改, 维护非常头疼. shellscript 的强项本来也不是实现特别复杂的功能, 甚至编写应用程序.我没否认 google 的说法, 我只是说纠结于 100 行有点没必要.
    crowds
        20
    crowds  
       2015-12-26 23:28:18 +08:00
    @KentY
    我觉得 100 行作为分水岭正好
    看 100 行 shell 脚本的价值<看 100 行 python 脚本的价值(我认为)
    aheadlead
        21
    aheadlead  
       2015-12-26 23:33:11 +08:00
    @KentY 赞同你的观点… 100 行也许..也许就是那么随口一说得到的吧……
    winooxx
        22
    winooxx  
       2015-12-27 00:01:52 +08:00
    非常赞,收藏了
    Evovil
        23
    Evovil  
       2015-12-27 01:06:20 +08:00
    赞 学习了
    shoaly
        24
    shoaly  
       2015-12-27 01:22:56 +08:00
    @neilp 100 行 确实是随口一说的, 教条太多无意义.
    tennix
        25
    tennix  
       2015-12-27 10:24:15 +08:00
    Shell Script 长了可维护性的确是个问题,但是只用 Shell 和 basic unix tools 实现的脚本,移植性是最好的, FreeBSD 上面有好多第三方的包管理工具,有些会标称只依赖基本系统,有些依赖 ruby/python/perl/php 之类的,系统管理员可能更倾向于安装只依赖基本系统的,一来是因为 R3P 之类的并不是 FreeBSD 官方维护的,另外这些第三方脚本语言对版本依赖较强,版本不对很容易出问题,而且这些语言本身比基本系统里面的工具升级更频繁。

    所以 Shell Script 和 R3P 各有优缺点,关键还是得看作者自己的取舍,如果 LZ 觉得就是要不依赖其它脚本语言,那么无视那些人对你的指责就好了,如果可维护性对你来说更重要,那么就按这些人说的,换成 R3P 中的 python 重新实现
    zingl
        26
    zingl  
       2015-12-27 13:24:37 +08:00   ❤️ 1
    hqs123
        27
    hqs123  
       2015-12-30 08:42:32 +08:00
    不明觉厉,学习下。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   959 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 18:33 · PVG 02:33 · LAX 11:33 · JFK 14:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.