自作コマンド(opy)をbrewとsnapに対応した

Wed Sep 11 22:49:48 JST 2019 (modified: Fri Sep 20 16:57:58 JST 2019)
views: 2491, keywords:opy, Python, ワンライナー, シェル芸 この記事は最終更新日が4年以上前のものです。

要旨

 この記事がそこそこ反響を呼んで調子に乗った上田は、opy(おーぴーわい or おーぱい。促音禁止)の普及を図るためにbrewとsnapに手を出した。

homebrew

 ということで、まずはMacで簡単にインストールできるようにbrewに対応しました。こちらを参考にしました。

結果、これでインストールできるようになりました。

$ brew tap ryuichiueda/oneliner-python
   $ brew install oneliner-python

書いた設定はこんな感じです。

require "formula"

   class OnelinerPython < Formula
     homepage "https://github.com/ryuichiueda/opy"
     url "https://github.com/ryuichiueda/opy/archive/v1.4.4.tar.gz"
     sha256 "f3ab839ff0e919bcf5764fb0a8eb69904d3eba2fa3eb4f19ebf60c464a782a73"
     head "https://github.com/ryuichiueda/opy.git"
     version "1.4.4"

     def install
       bin.install "opy"
       man1.install "opy.1" 
     end
   end

 ついでにchikubeam(1)させていただきました。

とてもたのしい(とてもたのしい)。

Snappy (snap)

 で、次にsnapに対応しました。deb作るの大変そうだし、こっちの方が新しいし・・・って手を出しましたがかなりつらかったです。

 snapのパッケージを作るときは、snapcraftというツールをインストールして、次のようなyamlを書いて、そこでsnapcraftと打って作ります。snapcraftのやってることを見ていると、何かVMみたいなものを作ってそのなかに必要なツールをダウンロードしてビルドして、そのあと固めてsnapという拡張子のファイルにするみたいです。

name: opy
   version: 'latest'
   summary: Onelinerers' Python, which works like AWK
   description: |
     This command works like AWK in one liners. It enables you to use Python
     modules on CLI.
   grade: stable
   confinement: strict

   apps:
     opy:
       command: opy

   parts:
     opy:
       source: https://github.com/ryuichiueda/opy.git
       plugin: dump
       source-tag: master
       source-depth: 1

 ビルドがうまくいったら、Ubuntu Oneのアカウントで https://snapcraft.io にログインし、https://snapcraft.io/register-snap でパッケージの名前を予約して、

$ snapcraft push --release=stable opy_latest_amd64.snap

とアップロードしました。これで、こんなふうにパッケージがインターネッツ上にさらされました。あとは、任意のsnapが使える環境で、誰でも

$ sudo snap install opy

するとインストールできる状況になりました。

ハマったところ

 細かい手順は書く時間がないので、ハマりポイントを書いておきます。最初はopyという図々しい名前でなく、oneliner-pythonという名前でパッケージを作っていました。ただ、これだとどんなに頑張ってもコマンド名がoneliner-python.opyとかoneliner-pythonにしかなりませんでした。

どうやら名前がバッティングするのを避けるために、パッケージ名をくっつけるしかなさそう。

 一応、これはユーザの方で

$ sudo snap alias oneliner-python.opy opy

とすればよいようなのですが、これはこれで面倒なので、結局パッケージ名をopyにしました。

 また、オプションがいろいろ煩雑で、手元で試しにsnapファイルをインストールするときは、

$ sudo snap install opy_latest_amd64.snap --dangerous

というふうに--dangerousとオプションを加えなければいけませんが、よく忘れて時間を食いました。また、pushするときも--release=stableをつけないと、snap installできない状態になり、また同じsnapファイルをアップロードできなくなるので、これも時間を食いました。

 ちなみに、https://snapcraft.io/opyではダウンロード数とかも閲覧できるみたいなので楽しみです。これでダウンロードが少ないと、先日のバズりが、「opy面白い!使ってみたい!」ではなく、「opyがお○ぱいだ!」という点でのものだったことになり、大変悲しいのでぜひsnapでインストールしてみてください。

違う!寝る。

ノート   このエントリーをはてなブックマークに追加 
 

prev:Pythonをコマンドラインで使いたいのでopyというコマンドを作った next:「詳解 確率ロボティクス」でミスマッチを起こさないために

やり散らかし一覧

記事いろいろ