LoginSignup
0
0

UbuntuのLaunchpadへのアップロード方法

Last updated at Posted at 2023-10-07

はじめに

Linuxを使っていると、sudo apt installでインストールする機会が多く、自作のアプリもこれでインストール出来るようにしたいと思いました。

しかし、調べたところ、自作のアプリはそのままではaptに登録することは出来ないらしく「PPA」を利用することにしました。

PPAとは?

PPA(Personal Package Archive)は、Ubuntuやその派生ディストリビューションのための非公式なパッケージアーカイブのことです。

通常、sudo apt installでインストールできるソフトウェアは公式のUbuntuリポジトリに登録されたものだけであり、個人が登録することはできません
そこで、個人が登録し、sudo apt installでインストールできるようにする仕組みが「PPA」。

PPAを使うにはLaunchpadに登録します。
Launchpadは、Ubuntuを開発・保守している「株式会社CANONICAL」が運営しているサービスです。

インストール方法

PPAでインストールするには、まずPPAをsudo add-apt-repository ppa:ユーザー名/PPA名として、パソコンのaptのインストール先に追加します。
こうすると、sudo apt install PPA名で個人登録のソフトウェアをインストールできるようになります。また、sudo apt updatesudo apt upgradeを実行した時に巡回してくれて、自動で更新してくれるようにもなります。

インストール方法
$ sudo add-apt-repository ppa:yusu79/プロジェクト名
$ sudo apt update && sudo apt install プロジェクト名

前提

手順

  1. パッケージディレクトリを作る
  2. テンプレートとtarボールを作成(dh_make)
  3. debian/以下を編集
  4. ビルド(dpkg-buildpackage -S -sa)
  5. アップロード(dput)

1. パッケージディレクトリを作る

ディレクトリ名は「プロジェクト名_バージョン」にすること。

バージョンは、1.0などにする。

「プロジェクト名」のディレクトリを作る
$ mkdir プロジェクト名_1.0

v1.0.0などのように「v」をつけるのは駄目。

2. debianディレクトリ作成(dh_make)

プロジェクトパッケージで実行すると、それ以下にLaunchpadへアップロードするためのテンプレートが作られる。

dh_makeコマンドを使うと自動で、プロジェクトパッケージ以下にdebian/が作られ、親ディレクトリプロジェクト.orig.tar.gzが作られる。

親ディレクトリにファイルが作成されるコマンドは珍しいが、これで正しい

  • dh_make -s -c 【ライセンス】 --createorig -p 【パッケージディレクトリ】
    • 現在ディレクトリにdebian/を、親ディレクトリにパッケージ.orig.tar.gzを作成する
debianディレクトリ作成
$ dh_make -s -c mit --createorig -p プロジェクト名_1.0
$ tree -L 1
.
├── debian
└── プロジェクト名
$ tree .. -L 1
..
├── プロジェクト名_1.0
└── プロジェクト名_1.0.orig.tar.xz

3.debian/以下の各種ファイルを編集

編集するのは以下の5つのファイル。

  • changelog
  • control
  • copyright
  • rules
  • install

changelog

changelogはパッケージのバージョン履歴を示すファイル。

デフォルトでは以下のようになっている。

debian/changelog
プロジェクト名 (1.0-1) unstable; urgency=medium

  * Initial release 

 -- ユーザー名 <メールアドレス>  作成日

上記の「unstable」を自分のPCのUbuntuのコードネームに変更しなければいけない。

自分のパソコンの「Ubuntuのコードネーム」を確認するには、以下のコマンドを実行し「UBUNTU_CODENAME」を確認する。

OSが「Linux Mint」の例
$ cat /etc/os-release
NAME="Linux Mint"
VERSION="20.2 (Uma)"
ID=linuxmint
ID_LIKE=ubuntu
PRETTY_NAME="Linux Mint 20.2"
VERSION_ID="20.2"
HOME_URL="https://www.linuxmint.com/"
SUPPORT_URL="https://forums.linuxmint.com/"
BUG_REPORT_URL="http://linuxmint-troubleshooting-guide.readthedocs.io/en/latest/"
PRIVACY_POLICY_URL="https://www.linuxmint.com/"
VERSION_CODENAME=uma
UBUNTU_CODENAME=focal

上記より、Ubuntuのコードネームは「focal」であることが分かる。

後は、「changelog」ファイルを編集する。
編集するにはdchコマンドを使う。

「dch」を実行すると、エディタが自動起動する
$ dch

以下のようになったら、大丈夫。

コードネームを「focal」に変更した
プロジェクト名 (1.0-1) focal; urgency=medium

  * Initial release 

 -- yusu79 <メールアドレス>  作成日

ちなみに、urgencyはパッケージ更新の緊急度を表す。

  • low
  • medium
  • high

control

controlファイルは、

  • パッケージの概要
  • 依存関係
  • ビルドに必要なパッケージの情報

などを定義するファイル。

debian/control
Source: プロジェクト名
Section: utils
Priority: optional
Maintainer: yusu79 <メールアドレス>
Build-Depends: debhelper-compat (= 12)
Standards-Version: 4.4.1
Homepage: https://github.com/yusu79/プロジェクト名


Package: プロジェクト名
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}
Description: Shell script that reads Markdown files and displays them as a tree structure

copyright

パッケージに含まれるファイルの著作権情報を記述するファイル。

「プロジェクト名」ではMITライセンスを採用している。

debian/copyright
Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: プロジェクト名
Upstream-Contact: 2023 yusu79 <メールアドレス>
Source: https://github.com/yusu79/プロジェクト名

Files: *
Copyright: 2023 yusu79 <メールアドレス>
License: MIT

Files: debian/*
Copyright: 2023 yusu79 <メールアドレス>
License: MIT

License: MIT
 Permission is hereby granted, free of charge, to any person obtaining a
 copy of this software and associated documentation files (the "Software"),
 to deal in the Software without restriction, including without limitation
 the rights to use, copy, modify, merge, publish, distribute, sublicense,
 and/or sell copies of the Software, and to permit persons to whom the
 Software is furnished to do so, subject to the following conditions:
 .
 The above copyright notice and this permission notice shall be included
 in all copies or substantial portions of the Software.
 .
 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
 IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
 CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
 TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
 SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

# Please also look if there are files or directories which have a
# different copyright/license attached and list them here.
# Please avoid picking licenses with terms that are more restrictive than the
# packaged work, as it may make Debian's contributions unacceptable upstream.
#
# If you need, there are some extra license texts available in two places:
#   /usr/share/debhelper/dh_make/licenses/
#   /usr/share/common-licenses/
  • Upstream-Contact
    • Upstream(ソフトウェアの開発元)の連絡先を示すもの
      • ソフトウェアに関する問題を報告したり、ソフトウェアの開発者に問い合わせたりする場合に役立つ
  • Source
    • ソフトウェアのソースコードが入手可能な場所を示す
      • つまり、GitHubでOK

rules

パッケージをビルドするためのルールを定義するためのファイル。

今回は、同梱したスクリプトをusr/bin/以下にインストールするように指示している。

debian/rules
%:
	dh $@

override_dh_auto_install:
	dh_auto_install
	dh_install プロジェクト名 /usr/bin/

install

installファイルを新規作成して、以下のように書き込むと、rulesに従い、プロジェクト名が「/usr/bin/」に格納される。

「debian/」に「install」ファイルを新規作成
$ touch install
debian/install
プロジェクト名 usr/bin

4.ビルド(dpkg-buildpackage -S -sa)

まずは、改めて現在ディレクトリと親ディレクトリに「debian/」と「orig.tar.gz」があるか確認

現在ディレクトリと親ディレクトリを確認
$ tree -L 1
.
├── debian
└── プロジェクト名
$ tree .. -L 1
..
├── プロジェクト名_1.0
└── プロジェクト名_1.0.orig.tar.xz
  • dpkg-buildpackage -S -sa
    • .dscsource.buildinfosource.changesdebian.tar.xzの四つのファイルを生成する

この状態でdpkg-buildpackage -S -saを実行すると、GPG鍵のパスワードが問われるので入力する。すると、以下の四つのファイルが親ディレクトリに生成される。

  • プロジェクト名_1.0-1.dsc
  • プロジェクト名_1.0-1_source.buildinfo
  • プロジェクト名_1.0-1_source.changes
  • プロジェクト名_1.0-1.debian.tar.xz
ビルド実行
$ dpkg-buildpackage -S -sa
$ tree .. -L 1
..
├── プロジェクト名_1.0
├── プロジェクト名_1.0-1.debian.tar.xz
├── プロジェクト名_1.0-1.dsc
├── プロジェクト名_1.0-1_source.buildinfo
├── プロジェクト名_1.0-1_source.changes
└── プロジェクト名_1.0.orig.tar.xz

5.PPAにアップロード(dput)

PPAにアップロードするにはdputコマンドを使う。

それからここが一番重要だが、アップロードするのは「source.changes」ファイルのみ。

  • dput ppa:ユーザー名/PPA source.changes
    • PPAにアップロード
「プロジェクト名」をアップロード
$ dput ppa:yusu79/プロジェクト名 プロジェクト名_1.0-1_source.changes

これでアップロードが完了し、PPAをインストールできるようになった。

補足

インストール

インストール
$ sudo add-apt-repository ppa:yusu79/プロジェクト名
$ sudo apt update && sudo apt install プロジェクト名

アンインストール

アンインストール
$ sudo apt remove プロジェクト名

PPA一覧確認

PPAの一覧確認
ls -1 /etc/apt/sources.list.d
PPAマネージャー起動
y-ppa-manager

PPA削除

「プロジェクト名」PPAを削除
$ sudo add-apt-repository --remove ppa:yusu79/プロジェクト名

まとめ

これで、誰でもsudo add-apt-repository ppa:ユーザー名/プロジェクト名でPPAを登録してインストールできるようになります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0