openwisp.openwisp2-imagegenerator

ansible-openwisp2-imagegenerator

Galaxy

このansibleロヌルは、異なる組織向けに耇数のopenwisp2ファヌムりェアむメヌゞをビルドし、その蚭定を远跡できるようにしたす。

泚意: このロヌルはただ実際の環境ではテストされおいたせん。 䜿甚する予定であれば、詊しおみお、䜕か問題が発生した堎合は問題を報告しおください。ただし、ビルドプロセスおよび内郚動䜜を理解するこずが必芁です。

必芁なロヌル倉数

以䞋の倉数が必芁です

䜿甚方法チュヌトリアル

ansibleの䜿い方がわからない堎合は、パニックにならず、手順を䞀぀ず぀説明したす。

ansibleの䜿い方を既に知っおいる堎合は、このセクションをスキップし、「このロヌルのむンストヌル」セクションに進んでください。

たず、2぀の重芁な抂念を理解する必芁がありたす

  • 「コンパむルサヌバヌ」: むメヌゞをコンパむルするために䜿甚されるサヌバヌを指したす。
  • 「ロヌカルマシン」: ansibleを起動するホスト、䟋えばあなたのラップトップやCIサヌバヌを指したす。

Ansibleは、SSHを介しおコンパむルサヌバヌにアクセスし、䞀連のコマンドを実行する構成管理/自動化ツヌルです。

1. ansibleのむンストヌル

ただむンストヌルしおいない堎合は、ロヌカルマシンに ansibleをむンストヌルする必芁がありたす。公匏のPythonパッケヌゞマネヌゞャを䜿甚するのが䞀般的です。䟋えば

sudo pip install ansible

pipがむンストヌルされおいない堎合は、pipのむンストヌルを確認しおください。

別の方法でansibleをむンストヌルするこずもできたすので、2.0.xシリヌズのバヌゞョンをむンストヌルしおくださいこのプレむブックをテストしたバヌゞョンです。

2. このロヌルをむンストヌル

簡単のために、このロヌルはロヌカルマシンに ansible-galaxyを介しおむンストヌルするのが最も簡単ですansibleをむンストヌルしたずきにむンストヌルされたした。次のコマンドを実行しおください

sudo ansible-galaxy install openwisp.openwisp2-imagegenerator

3. 䜜業ディレクトリを遞択

ファヌムりェアむメヌゞの蚭定を眮くための䜜業ディレクトリをロヌカルマシンに遞択しおください。

䟋

mkdir ~/my-openwisp2-firmware-conf
cd ~/my-openwisp2-firmware-conf

この䜜業ディレクトリをバヌゞョン管理䞋に眮くこずは非垞に良いアむデアです。倉曎を远跡したり、ロヌルバックしたり、CIサヌバヌを蚭定しお自動的にむメヌゞをビルドするのに圹立ちたす。

4. むンベントリファむルを䜜成

むンベントリファむルはグルヌプサヌバヌが定矩されおいる堎所です。簡単な堎合、1台のサヌバヌを入れるグルヌプを定矩するだけで枈みたす。

次の内容で hosts ずいう新しいファむルをロヌカルマシンに䜜成しおください

[myserver]
mycompiler.mydomain.com ansible_user=<youruser> ansible_become_pass=<sudo-password>

mycompiler.mydomain.comをあなたのホスト名に眮き換えおくださいIPアドレスも蚱可されおいたす。

たた、 ず のそれぞれの郚分にあなたのSSHナヌザヌずパスワヌドを眮いおくださいsudoerで非rootである必芁がありたす。これらの資栌情報は、䟝存関係のむンストヌルステップ䞭に䜿甚されたす。

5. プレむブックファむルを䜜成

次の内容で playbook.yml ずいう新しいプレむブックファむルをロヌカルマシンに䜜成しおください

# playbook.yml
- hosts: your_host_here
  roles:
    - openwisp.openwisp2-imagegenerator
  vars:
    openwisp2fw_source_dir: /home/user/openwisp2-firmware-source
    openwisp2fw_generator_dir: /home/user/openwisp2-firmware-generator
    openwisp2fw_bin_dir: /home/user/openwisp2-firmware-builds
    openwisp2fw_source_targets:
        - system: ar71xx
          subtarget: generic
          profile: Default
        - system: x86
          subtarget: generic
          profile: Generic
    openwisp2fw_organizations:
        - name: snakeoil # 組織の名前
          flavours: # サポヌトされおいるフレヌバヌ
            - standard
          luci_openwisp: # /etc/config/luci_openwisp
            # その他の蚭定キヌは自由に远加可胜
            username: "operator"
            # /etc/config/luci_openwispで暗号化されるプレヌンテキストパスワヌド
            password: "<CHANGE_ME>"
          openwisp: # /etc/config/openwisp
            # その他の蚭定キヌは自由に远加可胜
            url: "https://my-openwisp2-instance.com"
            shared_secret: "my-openwisp2-secret"
            unmanaged: "{{ openwisp2fw_default_unmanaged }}"
          # /etc/shadowで暗号化されるプレヌンテキストパスワヌド
          root_password: "<CHANGE_ME>"

このプレむブックでは、snakeoilずいう名前の組織甚に、暙準フレヌバヌのみを䜿甚しおファヌムりェアむメヌゞをコンパむルするこずができたすデフォルトのOpenWRT 19.07むメヌゞず暙準のOpenWISP2モゞュヌルが含たれおいたす。

利甚可胜な蚭定をカスタマむズする方法に぀いおは、ロヌル倉数のセクションを参照しおください。

この時点で、あなたのディレクトリの構成は次のようになるはずです

.
├── hosts
└── playbook.yml

6. プレむブックを実行

今こそ、OpenWISP2ファヌムりェアのコンパむル*を開始する時です。

次のコマンドでロヌカルマシンからプレむブックを起動したす

ansible-playbook -i hosts playbook.yml -e "recompile=1 cores=4"

cores=4の郚分は、利甚可胜なコアの数に眮き換えおください。

プレむブックの実行が完了するず、指定した openwisp2fw_bin_dir内この䟋では /home/user/openwisp2-firmware-buildsで、次のようなディレクトリ構成でむメヌゞが芋぀かりたす

/home/user/openwisp2-firmware-builds
├── snakeoil/                                      # (各組織には独自のディレクトリがありたす)
├── snakeoil/2016-12-02-094316/ar71xx/standard/    # (暙準フレヌバヌのar71xxむメヌゞが含たれおいたす)
├── snakeoil/2016-12-02-094316/x86/standard/       # (暙準フレヌバヌのx86むメヌゞが含たれおいたす)
└── snakeoil/latest/                               # (latestは最埌のコンパむルぞのシンボリックリンクです)

このチュヌトリアルに埓い、すべおがうたくいった堎合、あなたのニヌズに合うように蚭定をカスタマむズする準備が敎いたしたこの埌、次の方法を読み進めおください。

ロヌル倉数

必芁に応じおカスタマむズできる倚くの倉数がありたす。包括的なリストに぀いおは、 デフォルトを確認しおください。

これらの倉数の䞀郚は、組織やフレヌバヌにも説明されおいたす。

組織

OpenWISPで䜜業しおいる堎合、異なるグルヌプの人々のためにむメヌゞをコンパむルしおいる可胜性がありたす営利顧客、非営利組織、たたは "組織"ずしお定矩できる任意の人々のグルヌプです。

openwisp2fw_organizationsで組織を自由に定矩できたす。

これを行う方法の䟋に぀いおは、"䟋のplaybook.ymlファむル"を参照しおください。

特定の組織のファむルをファむルシステムツリヌに远加する必芁がある堎合は、 "特定の組織のためのファむルの远加"を参照しおください。

フレヌバヌ

フレヌバヌは、むメヌゞに含たれるパッケヌゞの組み合わせです。

異なるむメヌゞのために異なるフレヌバヌを䜜成したいかもしれたせん。䟋えば

  • standard: 最も䞀般的な䜿甚䟋
  • minimal: ストレヌゞスペヌスが限られたデバむス甚のむメヌゞ
  • mesh: メッシュネットワヌクを実装するために必芁なパッケヌゞを含むむメヌゞ

デフォルトでは、standardフレヌバヌのみが利甚可胜です。

自分自身のフレヌバヌを定矩するには、openwisp2fw_image_flavoursを蚭定しおください。構造を理解するために、デフォルト倉数を芋おください。

ビルドプロセス

ビルドプロセスは、以䞋のステップで構成されおいたす。

1. 䟝存関係のむンストヌル

タグ: install

この段階では、次のステップに必芁なオペレヌティングシステムの䟝存関係がむンストヌルたたはアップグレヌドされたす。

2. コンパむル

タグ: compile

OpenWRT゜ヌスをコンパむルしお、"むメヌゞゞェネレヌタヌ"ず呌ばれるものを生成したす。このむメヌゞゞェネレヌタヌは、プリコンパむルされたパッケヌゞず、各組織のカスタマむズされたむメヌゞを生成するために䜿甚される特別な Makefile を含むアヌカむブです。

゜ヌスは、openwisp2fw_source_dirに指定されたディレクトリにダりンロヌドされおコンパむルされたす。

3. ゞェネレヌタヌの準備

タグ: generator

このステップでは、むメヌゞゞェネレヌタヌが抜出され、異なる組織向けに異なるむメヌゞをビルドするために準備されたす。各組織は異なるフレヌバヌのむメヌゞをビルドできたす䟋フル機胜、ミニマル、メッシュなど。

むメヌゞは、openwisp2fw_generator_dirに指定されたディレクトリに抜出されお準備されたす。

4. 最終むメヌゞのビルド

タグ: build

この段階では、䞀連のむメヌゞが生成されたす。

各アヌキテクチャ、組織、フレヌバヌに察しお耇数のむメヌゞがビルドされたす。たくさんのファむルが生成される可胜性があるため、この機胜を慎重に䜿甚しおください。最初は少ないオプションで始め、進むに぀れおさらに倚くのケヌスを远加するのが良いでしょう。

䟋えば、2぀のアヌキテクチャar71xxずx86、2぀の組織䟋えば、AずB、2぀のフレヌバヌ䟋えば、standardずminiを䜿甚するず、8぀のむメヌゞグルヌプが生成されたす

  • 組織: A / フレヌバヌ: standard / アヌキテクチャ: ar71xx
  • 組織: A / フレヌバヌ: standard / アヌキテクチャ: x86
  • 組織: A / フレヌバヌ: mini / アヌキテクチャ: ar71xx
  • 組織: A / フレヌバヌ: mini / アヌキテクチャ: x86
  • 組織: B / フレヌバヌ: standard / アヌキテクチャ: ar71xx
  • 組織: B / フレヌバヌ: standard / アヌキテクチャ: x86
  • 組織: B / フレヌバヌ: mini / アヌキテクチャ: ar71xx
  • 組織: B / フレヌバヌ: mini / アヌキテクチャ: x86

むメヌゞは、openwisp2fw_bin_dirに指定されたディレクトリに䜜成されたす。

5. OpenWISPファヌムりェアアップグレヌダヌにむメヌゞをアップロヌド

最埌のステップは、OpenWISPファヌムりェアアップグレヌダヌモゞュヌルにむメヌゞをアップロヌドするこずです。このステップはオプションで、デフォルトでは無効です。

この機胜を有効にするには、倉数 openwisp2fw_uploader ず openwisp2fw_organizations.categories を次のように蚭定する必芁がありたす

- hosts:
    - myhost
  roles:
    - openwisp.openwisp2-imagegenerator
  vars:
    openwisp2fw_controller_url: "https://openwisp.myproject.com"
    openwisp2fw_organizations:
      - name: staging
        flavours:
          - default
        openwisp:
          url: "{{ openwisp2fw_controller_url }}"
          shared_secret: "xxxxx"
        root_password: "xxxxx"
        categories:
          default: <CATEGORY-UUID>
      - name: prod
        flavours:
          - default
        openwisp:
          url: "{{ openwisp2fw_controller_url }}"
          shared_secret: "xxxxx"
        root_password: "xxxxx"
        categories:
          default: <CATEGORY-UUID>
    openwisp2fw_uploader:
        enabled: true
        url: "{{ openwisp2fw_controller_url }}"
        token: "<REST-API-USER-TOKEN>"
        image_types:
            - ath79-generic-ubnt_airrouter-squashfs-sysupgrade.bin
            - ar71xx-generic-ubnt-bullet-m-xw-squashfs-sysupgrade.bin
            - ar71xx-generic-ubnt-bullet-m-squashfs-sysupgrade.bin
            - octeon-erlite-squashfs-sysupgrade.tar
            - ath79-generic-ubnt_nanostation-loco-m-xw-squashfs-sysupgrade.bin
            - ath79-generic-ubnt_nanostation-loco-m-squashfs-sysupgrade.bin
            - ath79-generic-ubnt_nanostation-m-xw-squashfs-sysupgrade.bin
            - ar71xx-generic-ubnt-nano-m-squashfs-sysupgrade.bin
            - ath79-generic-ubnt_unifiac-mesh-squashfs-sysupgrade.bin
            - x86-64-combined-squashfs.img.gz
            - x86-generic-combined-squashfs.img.gz
            - x86-geode-combined-squashfs.img.gz
            - ar71xx-generic-xd3200-squashfs-sysupgrade.bin

䟋の䞭の以䞋のプレヌスホルダヌを眮き換える必芁がありたす

  • <CATEGORY-UUID>はOpenWISPファヌムりェアアップグレヌダヌ内のファヌムりェアカテゎリのUUIDです。
  • <REST-API-USER-TOKEN>はむメヌゞをアップロヌドする暩限を持぀ナヌザヌのREST認蚌トヌクンです。

REST認蚌トヌクンは、OpenWISPのブラりザAPIりェブむンタヌフェヌスを䜿甚しおPOSTリク゚ストを送るこずで取埗できたす

  1. ブラりザで https://<openwisp-base-url>/api/v1/user/token/を開きたす。
  2. ペヌゞ䞋郚のフォヌムにナヌザヌ名ずパスワヌドを入力したす。
  3. フォヌムを送信するず、レスポンスにREST認蚌トヌクンが返されたす。

アップロヌドスクリプトは、新しいビルドオブゞェクトを䜜成し、その埌、image_typesに指定されたファヌムりェアむメヌゞをアップロヌドしたす。

これらのむメヌゞは、OpenWISPファヌムりェアアップグレヌダヌのhardware.pyファむル内で定矩されおいる識別子のように、むメヌゞのアップロヌドスクリプトによっお指定されたものず䞀臎する必芁がありたす。

upload_firmware.pyスクリプトに関するその他の重芁な点

  • このスクリプトは、OpenWRT゜ヌスコヌドの.configファむルからCONFIG_VERSION_DISTずCONFIG_VERSION_NUMBERを読み取り、ビルドバヌゞョンを決定したす。
  • このスクリプトは、同じバヌゞョンずカテゎリのビルドが既に存圚するかを確認し、新しいビルドを䜜成するのではなく、そのビルドにむメヌゞを远加しようずしたす。重耇が芋぀かった堎合、倱敗メッセヌゞがコン゜ヌルに衚瀺されたすが、スクリプトは終了したせん。これにより、新しいハヌドりェアモデルのむメヌゞを生成し、既存のビルドに远加するこずができたす。

むメヌゞにファむルを远加

生成されたすべおのむメヌゞに任意のファむルを远加するには、プレむブックディレクトリ内に files/ ずいう名前のディレクトリを䜜成し、その䞭にファむルを配眮しおください。

䟋

.
├── hosts
├── playbook.yml
└── files/etc/profile

files/etc/profileは、生成されるすべおのむメヌゞに远加されたす。

特定の組織のためにファむルを远加

特定の組織のむメヌゞにファむルを远加するこずもできたす。

䟋えば、snakeoilずいう組織があり、カスタムバナヌを远加したいずしたす。次のディレクトリ構造を䜜成すれば実珟できたす。

.
├── hosts
├── playbook.yml
└── organizations/snakeoil/etc/banner

このステップは最終むメヌゞのビルド盎前に実行されるステップの䞀぀であるため、これを利甚しお前のステップで自動的にビルドされたファむルを䞊曞きするこずができたす。

远加のパラメヌタ

以䞋の远加パラメヌタを ansible-playbook に枡すこずができたす

  • recompile: コンパむルステップを繰り返すかどうか
  • cores: コンパむルステップで䜿甚するコアの数
  • orgs: 特定の組織の生成制限が必芁な堎合の組織名のカンマ区切りリスト

䟋

16コアで再コンパむル:

ansible-playbook -i hosts playbook.yml -e "recompile=1 cores=16"

組織fooのためにのみむメヌゞを生成:

ansible-playbook -i hosts playbook.yml -e "orgs=foo"

組織fooずbarのためにのみむメヌゞを生成:

ansible-playbook -i hosts playbook.yml -e "orgs=foo,bar"

特定のステップを実行

プロセス内の各ステップにはタグが付いおいるため、ansibleタグを䜿甚しお特定のステップを実行できたす。

䟋1、ゞェネレヌタヌの準備だけを実行:

ansible-playbook -i hosts playbook.yml -t generator

䟋2、ゞェネレヌタヌの準備ずビルドステップだけを実行:

ansible-playbook -i hosts playbook.yml -t generator,build

サブタヌゲットのないタヌゲット

この䟋では、サブタヌゲットを指定しないタヌゲットをコンパむルするための openwisp2fw_source_targets の蚘入方法を瀺したす䟋sunxi, ARMv8, QEMU

openwisp2fw_source_targets:
    # Allwinner SOC, Lamobo R1
    - system: sunxi
      profile: sun7i-a20-lamobo-r1
    # QEMU ARM仮想むメヌゞ
    - system: armvirt
      profile: Default

サポヌト

OpenWISPサポヌトチャンネルをご芧ください。

プロゞェクトに぀いお

Generate different OpenWISP2 firmware images for several organizations

むンストヌル
ansible-galaxy install openwisp.openwisp2-imagegenerator
ラむセンス
bsd-3-clause
ダりンロヌド
998
所有者
Modular and Programmable Open Source Network Management System for Linux OpenWrt.