debexpo(mentors.d.n)をハックするには

subtitle

(2020年版)

author

Kentaro Hayashi

institution

ClearCode Inc.

content-source

2020年11月 東京エリア・関西合同Debian勉強会

allotted-time

15m

theme

.

お知らせ: スライドは公開済みです

プロフィール

align=“right”}

ちょっと宣伝

本日の内容

mentors.debian.netとは

mentors.debian.netとは

前回からのあらすじ(2016-06-25)

align=“right”}

debexpoをハックするには

その後の主な動き

開発環境を構築するには

必要なものをインストール

$ git clone https://salsa.debian.org/mentors.debian.net-team/debexpo.git
$ cd debexpo
$ python3 setup.py build
$ python3 setup.py install
$ python3 setup.py develop
$ python3 manage.py migrate
$ python3 manage.py collectstatic --no-input --clear

ホストの設定を追加する

diff --git a/debexpo/settings/develop.py b/debexpo/settings/develop.py
index 7b7121b7..3e8c2cbc 100644
--- a/debexpo/settings/develop.py
+++ b/debexpo/settings/develop.py
@@ -35,7 +35,7 @@ SECRET_KEY = 'DoNotUseThisKeyInProductionEnvironment'
 # SECURITY WARNING: don't run with debug turned on in production!
 DEBUG = True
 
-ALLOWED_HOSTS = []
+ALLOWED_HOSTS = ["*"]

サーバーを起動する

$ python3 manage.py runserver 0.0.0.0:8000

ワーカーを起動する

$ celery --app debexpo worker --beat

ワーカーが正常に起動できると

$ celery --app debexpo inspect registered
-> celery@buster: OK
    * debexpo.accounts.tasks.CleanupAccounts
    * debexpo.importer.tasks.importer
    * debexpo.packages.tasks.remove_old_uploads
    * debexpo.packages.tasks.remove_uploaded_packages
    * debexpo.repository.tasks.remove_from_repository

アップロードする前に

[debexpo]
fqdn = localhost:8000
incoming = /upload
method = http
allow_unsigned_uploads = 0

アカウントを作成する

サインインのリンクを踏む

アカウント情報を登録する

data/mboxを参照して有効化する

$ find data/mbox/
data/mbox/
data/mbox/20201107-082449-140269976552592.log

アカウントのアクティベート

Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Subject: Next step: Confirm your email address
From: debexpo <support@example.org>
To: kenhys@gmail.com
Date: Sat, 07 Nov 2020 08:24:49 -0000
Message-ID: <160473748915.1139.18222488963671024124@localhost>

Hello,

Please activate your account by visiting the following address
in your web-browser:

http://192.168.121.172:8000/accounts/reset/MQ/5le-acd00fdca7302c8dee26/

If you didn't create an account on debexpo,
you can safely ignore this email.

Thanks,

GPGの鍵を登録する

gpg --export --export-options export-minimal --armor keyid

パッケージをアップロードする

$ dput debexpo xxx.changes

明示的にインポートするには

$ celery --app debexpo call debexpo.importer.tasks.importer

アップロードされたパッケージが表示される

最近やったこと

修正画面イメージ

Packages listの関連ファイル

$ find debexpo/packages/
debexpo/packages/
debexpo/packages/serializers.py
debexpo/packages/views.py
debexpo/packages/__init__.py
debexpo/packages/migrations
debexpo/packages/migrations/0001_initial.py
debexpo/packages/migrations/__init__.py
debexpo/packages/apps.py
debexpo/packages/tasks.py
debexpo/packages/templates
debexpo/packages/templates/package.html
debexpo/packages/templates/packages.html
debexpo/packages/templates/packages-list.html
debexpo/packages/templates/email-upload-removed.html
debexpo/packages/models.py

Packages listの関連スキーマ

$ sqlite3 db.sqlite3 
SQLite version 3.27.2 2019-02-25 16:06:06
Enter ".help" for usage hints.
sqlite> .schema packages_package
CREATE TABLE IF NOT EXISTS "packages_package" (
"id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, 
"name" varchar(100) NOT NULL UNIQUE,
"needs_sponsor" bool NOT NULL,
"in_debian" bool NOT NULL);

Packages listのviewを修正

diff --git a/debexpo/packages/templates/packages-list.html b/debexpo/packages/templates/packages-list.html
index 263f8e50..299b84f0 100644
--- a/debexpo/packages/templates/packages-list.html
+++ b/debexpo/packages/templates/packages-list.html
@@ -7,10 +7,11 @@
 <table width="100%">
     <tr>
         <th width="15%">{% trans 'Package' %}</th>
-        <th width="40%">{% trans 'Description' %}</th>
+        <th width="30%">{% trans 'Description' %}</th>
         <th width="20%">{% trans 'Version' %}</th>
         <th width="15%">{% trans 'Uploader' %}</th>
         <th width="10%">{% trans 'Needs a sponsor?' %}</th>
+        <th width="10%">{% trans 'Already in Debian' %}</th>
     </tr>
 
     {% for pkg in group.packages %}
@@ -32,6 +33,13 @@
             {% trans 'No' %}
         {% endif %}
         </td>
+        <td class="lines">
+        {% if pkg.in_debian %}
+            {% trans 'Yes' %}
+        {% else %}
+            {% trans 'No' %}
+        {% endif %}
+        </td>
     </tr>
     {% endfor %}
 </table>

まとめ