raspbian raspi-configのセットアップをどのように自動化できますか?


17

raspi-configを使用して、ほぼ同じ方法で、すべてのpiをraspbianで繰り返し設定していることに気付きました。

raspi-configを使用して行ったすべての設定を、wgetでダウンロード可能な各piにダウンロードできる実行可能スクリプトに抽出する方法はありますか?

同じ効果を持つ同様のソリューションも評価されます。rpi docker実装の1つを試すことができたと思いますが、そのようなものがどれだけ最先端であるかを知りたくはありません。


1
それはあなたがしたい構成に依存しますか?raspi-configは、他の方法で変更できる構成ファイルを変更します(/boot/config.txt,/etc/module.conf ...)
mpromonet

1
の場合、それは非常に簡単な1000行のシェルスクリプト/usr/binです。新鮮な画像で起動するのを無効にしたい場合は、を削除/etc/init.d/apply_noobs_os_configしてのリンクを開き/etc/rc2.dます。
goldilocks

raspi-configがすべての基本的なセットアップタスクを1つの場所に集中するように、各タスクの実行方法を知らなくても1つのファイルですべての設定を指定できる単純なDSLが欲しいのです。一種のドッカー。
8DH

なぜdockerを使用しないのですか?
ティム・ホルト

ええ、なぜですか?rpiに適したdockerソリューションは何ですか?
8DH

回答:


20

少なくとも最近でraspi-configは、非対話型モードをサポートしているようです:

cat /boot/cmdline.txt            # show original cmdline.txt
raspi-config nonint do_serial 1  # disable serial console
cat /boot/cmdline.txt            # confirm changes
raspi-config nonint do_serial 0  # enable serial console
cat /boot/cmdline.txt            # confirm changes

これにより、対話型コマンドを介して実行できるすべての操作を実行できるセットアップスクリプトを作成できます。セットアップスクリプトはまったく同じことを実行します。ただし、スクリプトのソースから関連するコマンドとその使用法を見つける必要があります。


1
それはすてきです!
8DH

そのため、SDカードを準備するときに、イメージをそこに配置し、スクリプトをフォルダーに追加してから、piの起動時にスクリプトを実行できます。
8DH

この手順に他に改善されていないものはありますか?
8DH

1
それは私が知っているすべてです-さらにある場合、それはあまり目に見えて文書化されていません。私はスクリプトを調べているときにこれにつまずき、この機能を見つけた後、さらなる情報を探しませんでした。
愚かなフリーク

1
@ 8DHこの方法で処理できないものはありますか?(個人的にまだ関連がある場合)
Silly Freak

16

これはまだどこにも文書化されていませんが、rc_guiツール(フルデスクトップをインストールする場合はraspi-configのグラフィカルユーザーインターフェイスになると想定しています)はraspi-config bashスクリプトのコマンドラインオプションを使用します。Cソースコードでオプションの完全なリストを見ることができます更新:何らかの理由で公式リポジトリが消失しました。これは私が見つけることができる最もアクティブなフォークです。

/* Command strings */
#define GET_CAN_EXPAND  "sudo raspi-config nonint get_can_expand"
#define EXPAND_FS       "sudo raspi-config nonint do_expand_rootfs"
#define GET_HOSTNAME    "sudo raspi-config nonint get_hostname"
#define SET_HOSTNAME    "sudo raspi-config nonint do_hostname %s"
#define GET_BOOT_CLI    "sudo raspi-config nonint get_boot_cli"
#define GET_AUTOLOGIN   "sudo raspi-config nonint get_autologin"
#define SET_BOOT_CLI    "sudo raspi-config nonint do_boot_behaviour B1"
#define SET_BOOT_CLIA   "sudo raspi-config nonint do_boot_behaviour B2"
#define SET_BOOT_GUI    "sudo raspi-config nonint do_boot_behaviour B3"
#define SET_BOOT_GUIA   "sudo raspi-config nonint do_boot_behaviour B4"
#define GET_BOOT_WAIT   "sudo raspi-config nonint get_boot_wait"
#define SET_BOOT_WAIT   "sudo raspi-config nonint do_boot_wait %d"
#define GET_SPLASH      "sudo raspi-config nonint get_boot_splash"
#define SET_SPLASH      "sudo raspi-config nonint do_boot_splash %d"
#define GET_OVERSCAN    "sudo raspi-config nonint get_overscan"
#define SET_OVERSCAN    "sudo raspi-config nonint do_overscan %d"
#define GET_CAMERA      "sudo raspi-config nonint get_camera"
#define SET_CAMERA      "sudo raspi-config nonint do_camera %d"
#define GET_SSH         "sudo raspi-config nonint get_ssh"
#define SET_SSH         "sudo raspi-config nonint do_ssh %d"
#define GET_VNC         "sudo raspi-config nonint get_vnc"
#define SET_VNC         "sudo raspi-config nonint do_vnc %d"
#define GET_SPI         "sudo raspi-config nonint get_spi"
#define SET_SPI         "sudo raspi-config nonint do_spi %d"
#define GET_I2C         "sudo raspi-config nonint get_i2c"
#define SET_I2C         "sudo raspi-config nonint do_i2c %d"
#define GET_SERIAL      "sudo raspi-config nonint get_serial"
#define GET_SERIALHW    "sudo raspi-config nonint get_serial_hw"
#define SET_SERIAL      "sudo raspi-config nonint do_serial %d"
#define GET_1WIRE       "sudo raspi-config nonint get_onewire"
#define SET_1WIRE       "sudo raspi-config nonint do_onewire %d"
#define GET_RGPIO       "sudo raspi-config nonint get_rgpio"
#define SET_RGPIO       "sudo raspi-config nonint do_rgpio %d"
#define GET_PI_TYPE     "sudo raspi-config nonint get_pi_type"
#define GET_OVERCLOCK   "sudo raspi-config nonint get_config_var arm_freq /boot/config.txt"
#define SET_OVERCLOCK   "sudo raspi-config nonint do_overclock %s"
#define GET_GPU_MEM     "sudo raspi-config nonint get_config_var gpu_mem /boot/config.txt"
#define GET_GPU_MEM_256 "sudo raspi-config nonint get_config_var gpu_mem_256 /boot/config.txt"
#define GET_GPU_MEM_512 "sudo raspi-config nonint get_config_var gpu_mem_512 /boot/config.txt"
#define GET_GPU_MEM_1K  "sudo raspi-config nonint get_config_var gpu_mem_1024 /boot/config.txt"
#define SET_GPU_MEM     "sudo raspi-config nonint do_memory_split %d"
#define GET_HDMI_GROUP  "sudo raspi-config nonint get_config_var hdmi_group /boot/config.txt"
#define GET_HDMI_MODE   "sudo raspi-config nonint get_config_var hdmi_mode /boot/config.txt"
#define SET_HDMI_GP_MOD "sudo raspi-config nonint do_resolution %d %d"
#define GET_WIFI_CTRY   "sudo raspi-config nonint get_wifi_country"
#define SET_WIFI_CTRY   "sudo raspi-config nonint do_wifi_country %s"
#define CHANGE_PASSWD   "(echo \"%s\" ; echo \"%s\" ; echo \"%s\") | passwd"

更新: ロケールまたはキーボードの設定については何もありません。だから、それは私たちにのソースを調べる必要があることを示唆していraspi-configます。幸いなことに、そのスクリプトをnonint積極的に使用する方法のアイデアを得るために、上記の例がたくさんあります。だから、私はこの問題を頭なしで解決するために必要なことは次のとおりです。

locale=en_US.UTF-8
layout=us
sudo raspi-config nonint do_change_locale $locale
sudo raspi-config nonint do_configure_keyboard $layout

変数は、curses UIから選択した値です。ロケールオプションは、ファイルの最初のフィールドです/usr/share/i18n/SUPPORTED。キーボードレイアウトオプションは、のディレクトリ名です/usr/share/X11/xkb/symbols/。米国にいるときはen_US.UTF-8、とを使用しusます。YMMV


2
Raspberry Piのセットアップの自動化に興味がある場合は、githubのpi-init2プロジェクトをチェックしてください。「ブート時にスクリプトを(ヘッドレスで)実行する」という長らく要求されていた機能を提供します。
ブルーノブロノスキー

sudo raspi-config nonint do_audio %dオーディオ出力(0 = auto、1 = jack、2 = HDMI)を選択する方法もあります
ゴリマー

@golimarどこで入手しましたか?元のrc_guiプロジェクトは消えており、見つけることができる最高のフォーク(更新された回答)には含まれていませんdo_audio。しかしそれは確かにcurl -sL https://github.com/RPi-Distro/raspi-config/raw/master/raspi-config | grep -E '(do|get)_[a-zA-Z0-9_ ]+\(' | sort | uniq
ブルーノブロノスキー

ここ:gist.github.com/damoclark/ab3d700aafa140efb97e510650d9b1beですが、すべてのコマンドを見つけるのにあなたのコマンドは素晴らしいです、ありがとう
-golimar

3

すべてのraspi-config設定ファイルを編集するだけで、スクリプトで編集することもできます。sedこのような編集を効率的に行う方法については、マニュアルを確認してください。

この方法で多くの変更を適用する必要がある場合は、きれいなRPiイメージを希望どおりに設定し、diff完全なファイルシステム*をバニライメージに対してpatch設定してから、新しいセットアップが必要なときに変更を適用することを検討しますインストール。

最後に、次のようなツールを見てください。etckeeperこれらは、構成の変更を操作するために特別に設計されてdiffおり、権限など、見落としがちな微妙な変更を追跡できます。名前に反して、にetckeeper限定されないことに注意してください/etc。たとえば、実行etckeeper -d /boot init; etckeeper -d /boot commitすると、のファイルのバックアップが作成され/bootます。

(*)どうやらそうではない明白なので、すべての誤解をクリアするために、私はあなたのような何かを実行する必要があります意味diff -r /etc /mnt/vanilla_root/etc > etc.diffdiff -r /boot /mnt/vanilla_boot > boot.diff、ありませんdiff my.img vanilla.img


1

dd(または同様の)を使用して、作業中のPiイメージをPCにコピーします。

dd(または同様の)を使用して、コピーした画像をPCからPiにコピーします。

男dd


ええ、もちろん画像の方法はありますが、それから更新やもので画像を維持する必要があります。(それに対するエレガントな解決策がない限り...)
8DH

3
@ 8DH、設定をダウンロードしてからアップロードするという提案も、更新とともに「イメージ」を維持する必要があることを意味します。
ティム・ホルト

0

すべての新規インストールのベースとして維持したいという要望に100%設定された1枚のSDカードがあります。

新しいPiをセットアップするとき、最初から始めるのではなく、SDカードを複製するだけです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.