- 投稿日:2020-02-06T23:03:02+09:00
bash-completionを活用して、manやhelpを見ずに、バシバシ長いコマンドを打つ
1. 入力補完機能を使っていますか?
bashをはじめとして、多くのシェルやコマンドプロンプトで入力補完機能(completion)が提供されている。Windowsでも使える機能だし、ほとんどの人が使っているだろう。
入力補完機能によるファイル名補完の例$ ls sample.txt test1.txt test2.txt test3.txt $ cat s[TAB]キー入力 $ cat sample.txt ★TABキーを押すと、一致するファイル名が補完されるそしてRHEL6(2010年代~)あたりからは、ファイル名やディレクトリ名だけでなく、コマンドのオプション入力にも使えるようになっている。
1-1.前提条件
- LinuxやMacOS
1-2. TL;DR
- 入力補完機能は使っていたが、Linuxコマンドのオプション入力で使えるのは知らなかった。恥ずかしい…。
2. systmctlのオプション長げー問題
ここ数年はRHEL7系をメインに使っているが、長らくRHEL5/RHEL6系を使ってきた。RHEL7系で戸惑うのは
service
コマンドやchkconfig
コマンドが使えないことだ(一部は互換機能で使える)。システム構築・運用でよく使うコマンドなので「
chkconfig --list
って、systemctl
だと何だったっけ…」となりがちである。そんなときに役立つのがコマンド・オプションの入力補完機能だ。
次のように
systemctl
のあとに「TABキー」を入力すると、オプションの一覧を表示できる。$ sudo systemctl [TAB]キー入力 ★systemctlのあとに1スペース入れてからTAB add-requires hybrid-sleep reload-or-restart add-wants is-active reload-or-try-restart cancel is-enabled rescue cat is-failed reset-failed condreload isolate restart condrestart is-system-running set-default condstop kexec set-environment daemon-reexec kill set-property daemon-reload link show default list-dependencies show-environment delete list-jobs snapshot disable list-sockets start edit list-timers status emergency list-unit-files stop enable list-units suspend exit mask switch-root force-reload poweroff try-restart get-default preset unmask halt reboot unset-environment help reenable hibernate reload一覧が表示されれば、こちらのもの。続いて
list-unit-files
を入力すればよい。オプションを入力してる途中も「TABキー」の入力補完は効く。$ sudo systemctl list-unit-files ★list-unit-filesの途中でもTABの補完が効くこれで
systemctl
も怖くない! えっへん!3. bash-completionとは
ファイル名やディレクトリ名の入力補完では無く、コマンドのオプションを補完するのがbash-completionだ。
complete -p
を入力して大量の行が表示されるならば利用できると思っていい。3-1. ディストリビューションごとの状況
Linuxディストリビューションの種類やバージョンによって、標準リポジトリに含まれていないことがある。
- RHEL6系:EPELリポジトリ
- RHEL7系以降:標準リポジトリ
- Ubuntu 18.04 LTS:標準リポジトリ
RHEL8系$ rpm -q bash-completion bash-completion-2.7-5.el8.noarchRHEL7系$ rpm -q bash-completion bash-completion-2.1-6.el7.noarchRHEL6系$ rpm -q bash-completion package bash-completion is not installedUbuntu18.04LTS$ dpkg -l bash-completion ||/ Name Version Architecture Description +++-==============-============-============-================================= ii bash-completio 1:2.8-1ubunt all programmable completion for the b少し古いので現在当てはまるか微妙だが、MacOSの情報はこちら。
3-2. RHEL6系OSへのインストール
RHEL6やCentOS 6、Oracle Linux 6では、bash-completionをEPELリポジトリからインストールする必要がある。その手順を説明する。
- EPELリポジトリが有効になっているか確認する。次のように行が存在し、enabledになっていれば利用できる。
$ yum repolist all | grep -i epel epel Extra Packages for Enterprise Linux enabled: 12,5862.上記以外のときは状況に応じてEPELリポジトリを有効にする。
行はあるがdisabledのとき
$ sudo yum-config-mangaer --enable epel行自体がないとき
$ sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm -y3.次のように「Available Packages」に表示されたときは、インストールされていないが、リポジトリには存在している。
$ sudo yum list bash-completion Loaded plugins: refresh-packagekit, security, ulninfo Available Packages bash-completion.noarch 1:1.3-7.el6 epel4.ここまで確認できたらbash-completionをインストールする。
$ sudo yum install bash-completion -y5.bash-completionを有効にするためにログアウト/ログインする。ログアウトする理由は
/etc/profile.d/bash_completion.sh
でbash-completionの定義ファイルを読むためだ。3-3. bash-completionの定義ファイル
bash-completionの定義ファイルは、次のディレクトリ配下に存在する。
- /etc/bash_completion.d/
- /usr/share/bash-completion/completions/
ディレクトリを確認すると大量の定義ファイルがある。このファイルがあるコマンドは、オプションの入力補完ができることになる。
$ ls /usr/share/bash-completion/completions/ | wc -l 454 $ ls /usr/share/bash-completion/completions/ addpart fsck.minix lvextend raw timedatectl blkdiscard fsfreeze lvm readprofile tuned-adm blkid fstrim lvmdiskscan rename udevadm blockdev gapplication lvreduce renice ul bootctl gdbus lvremove repquota umount busctl getopt lvrename resizepart unshare bzip2 groupadd lvresize rev useradd cal groupdel lvs rpm userdel cfdisk groupmod lvscan rtcwake usermod ★以下省略3-4. 入力補完例いろいろ
先ほどの
systemctl
の例ではlist-unit-files
オプションを補完した。それ以外にもハイフン(-
)やハイフンハイフン(--
)で始まるオプションも入力補完できる。$ sudo systemctl -[TAB]キー入力 -a --ignore-dependencies --quiet --after --kill-who -r --all -l --recursive --before --no-ask-password --reverse --defaults --no-block --root -f --no-legend --runtime --fail --no-pager -s --failed --no-reload --signal --force --now --state --full --no-wall --system --global -p -t -h -P --type -H --privileged --version --help --property --host -q表示まで少し時間はかかるが、サービス名(ユニットファイル名)の途中で「TABキー」を入力すると、一致するサービスの一覧を表示できる。
$ sudo systemctl restart sshd[TAB]キー入力 sshd@ sshd.service sshd-keygen.service sshd.socketsshの場合
sshでは、
~/.ssh/known_hosts
や~/.ssh/config
、/etc/hosts
からホスト名候補を表示できる。1スペースのあとに[TAB]キー$ ssh [TAB]キー入力 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 10.5.1.35 ol7srv.dbprivatenrt01s.work01nrtvcn.oraclevcn.com ol7srvホスト名の途中で[TAB]キー$ ssh ol7[TAB]キー入力 ol7ksplice ol7srv ol7srv2 ol7srv3 ol7srv-vip.dbprivatenrt01s.work01nrtvcn.oraclevcn.com-oオプションのあとに[TAB]キー$ ssh -o [TAB]キー入力 AddressFamily= IdentitiesOnly= BatchMode= IdentityFile= BindAddress= IPQoS= ChallengeResponseAuthentication= KbdInteractiveここまで来ると何でもありだ。とりあえず「TABキー」を試してみたい。
定義ファイルを解析すれば、コマンドごとに何ができるかわかる。だけれど数が多いので覚えるのはナンセンスだ。
次のように本来オプションを指定するコマンドなのに、カレントディレクトリのファイルやディレクトリが表示されたときは定義されていない、と覚えた方がいいだろう。
$ sudo yum-config-managar [TAB]キー入力 bash-completion-extras-2.1-11.el7.noarch.rpm .bash_history .bash_logout .bash_profile .bashrc .cache/ .config/ .lesshst sample.txt .ssh/3-5. さらに追加モジュール
bash-completionには追加モジュールの
bash-completion-extras
がある。こちらはRHEL7系でもEPELリポジトリが必要だ。なお、現時点利用できるのはEPEL7だけで、EPEL6とEPEL8では提供されていない。しかし、el7のサフィックスは付いていてもnoarchなので、wgetやyumdownloaderで入手して、RHEL6/8系にインストールすれば使えるだろう。
- クラウドではデフォルトでEPELリポジトリが有効になっていることがある。次のコマンドでEPELを確認する。このように表示されたときは、すぐにインストールできる。
$ sudo yum list bash-completion-extras Loaded plugins: langpacks, ulninfo Available Packages bash-completion-extras.noarch 1:2.1-11.el7 ol7_developer_EPEL2.EPELリポジトリがインストールされていないときはインストールする。
RHEL7系$ sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm -y3.bash-completion-extrasパッケージをインストールする。これで終了だ。
$ sudo yum list bash-completion-extras -y4.パッケージの中身を確認すると300近いモジュールがあり、mysqlやpostgresqlなどもあることがわかる。
$ rpm -ql bash-completion-extras |wc -l 271 $ rpm -ql bash-completion-extras /usr/share/bash-completion/completions /usr/share/bash-completion/completions/a2x /usr/share/bash-completion/completions/aclocal /usr/share/bash-completion/completions/add_members /usr/share/bash-completion/completions/alias /usr/share/bash-completion/completions/alternatives /usr/share/bash-completion/completions/animate /usr/share/bash-completion/completions/ant /usr/share/bash-completion/completions/apropos /usr/share/bash-completion/completions/arch /usr/share/bash-completion/completions/arping ★以下省略4. まとめ
- bash-completionを使用すると、コマンド・オプションを入力補完できる
- RHEL6系ではEPELからインストールする必要がある
- RHEL7/8やUbuntuではデフォルトでインストールされていることが多い。少なくとも標準リポジトリには存在する
- 投稿日:2020-02-06T22:31:33+09:00
Android でもとりあえず Ubuntu のデスクトップ環境を使いたい(Termux 版)
はじめに
先に公開した Android Studio を使うための最低限のデスクトップ環境の構築方法を記載します。
日本語入力もありませんが、その代わり最短で構築できると思います。注意点
デスクトップ環境(LXDEやXfce)のインストールは数時間かかります。
時間を確保してから実施するほうが良いと思います。インストール
Play ストア で Termux と XSDL をインストールしてください。
Termux は Linux という OS の一種が動作する環境になります。
Android も OS ですので、OS の上で OS が動作するという、ちょっとややこしい環境になります。
XSDL は画面を担当するアプリケーションです。
Termux はコマンドラインまでしかサポートしませんので、XSDL で画面をサポートしてもらいます。Termux の設定
Termux を起動して、以下のコマンドでパッケージ(Linux アプリケーションの倉庫のようなもの)を更新してください。
# パッケージのアップデート pkg upgradepkg は apt コマンドのラッパーとのことです。
apt コマンドはパッケージを操作するためのプログラムを指します。
Termux では基本的に pkg を使用してアプリケーションのインストールを行います。続いて、termux-setup-storage を実行して Termux と Android の間でファイルのやりとりをできるようにします。
# Android で扱っているファイルを Termux からも扱えるようにする termux-setup-storageTermux がアクセスして良いかと聞くダイアログが出ますので、OKを選択して下さい。
Termux と Android のディレクトリの対応を記載します。
ファイルの受け渡しなどの参考にしてください。
Termux Android /data/data/com.termux/files/home/storage/shared/ (本体 側)/sdcard/ /data/data/com.termux/files/home/storage/downloads/ (本体 側)/sdcard/Download/ /data/data/com.termux/files/home/storage/external-1/ (SD Card 側)/storage/(SD Cardの名前)/Android/data/com.termux/files/ /storage/(SD Cardの名前)/ (SD Card 側)/storage/(SD Cardの名前)/ Ubuntu のインストール
続いて Termux に Ubuntu の環境を構築します。
Ubuntu も OS の一種になります。
Termux という Linux の上に Ubuntu という Linux を構築するという、Linux の上に Linux を載せるという形になります。
公式サイトのやり方ではありませんが Ubuntu をインストールする方法が載っています。
今回はこちらの方法を使用させてもらいます。
以下のサイトで、Installation steps と書かれている箇所のコマンドを実行して下さい。https://github.com/MFDGaming/ubuntu-in-termux
Ubuntu と Android のディレクトリの対応を記載します。
ファイルの受け渡しなどの参考にしてください。
Ubuntu Android /sdcard/ (本体 側)/sdcard/ /storage/(SD Cardの名前)/ (SD Card 側)/storage/(SD Cardの名前)/ 以下の公式サイトに Ubuntu のインストール方法が書いてあるのですが、SD Card などの Android とのファイル共有の方法が分からなかったため、今回は使用しません。
https://wiki.termux.com/wiki/Ubuntu
Ubuntu の起動
先述のサイトの Installation steps の 10.Now just start ubuntu: に記載がありますが、Termux から Ubuntu を起動するコマンドを記載します。
cd cd ubuntu-in-termu ./startubuntu.shUbuntu デスクトップ環境のインストール
ここからは Ubuntu での操作になります。
まずは apt でパッケージを更新します。
apt update apt upgrade -y次にデスクトップ環境をインストールします。
調べた限りでは、LXDE, Xfce の2種類が使えます。
LXDE の方が軽いそうですが、Xfce の方が見た目が良くLXDE程ではないですけれども十分な軽さを持っているそうです。
ここは好みで選択すれば良いと思います。なお、ここでネットワークやスマートフォンの速度にもよると思いますが数時間掛かります。
後述の設定は、最初や最後ではなく(やや後ろの方ではありますが)途中で出てきます。
お勧めはインストールを開始して数時間放置し、設定を行ってからまた数時間放置するやり方です。・ LXDE のインストール
apt install -y lxde # 途中で地域の質問があるので 6 → Enter → 79 → Enterという操作で選択する。数字の意味は、6:Asis、79:Tokyo となる。 # 次にキーボードの質問があるが、 31 → Enter → 1 → Enterという操作で選択する。数字の意味は、31:America(US)、1:Engrish(US) となる。ここは好みだが ソフトウェアキーボードの人は、 Hacker's Keyboard を使うので、この選択が間違いがないと思われる。 # デスクトップマネージャである gdm3 と lightgdm を選択するように言われるが、特にこだわりがないなら軽い lightgdm を選択すれば良いと思われる。・ XFCE のインストール
apt install -y xfce4環境の設定
XSDL を立ち上げてしばらく待って下さい。
最後なにやら文字列を表示している画面が出るので以下をメモしてください。上から2行目に以下の文字列が出るはずです。DISPLAY のポート番号をメモしてください。
export DISPLAY=(何かのIPアドレス):(ポート番号)
上から3行目に以下の文字列が出るはずです。同様に PULSE_SERVER のポート番号をメモしてください。
export PULSE_SERVER=(何かのIPアドレス):(ポート番号)
IPアドレスはメモする必要はないです。
再び Termux の Ubuntu に戻って下さい。
XSDL に接続するために、設定ファイルに先程メモしたポート番号とローカルのIPアドレスを記載します。# テキストエディタ vim をインストールしていない人はインストール apt install -y vim # .bashrc にXDSLの接続設定を記載する cd vim .bashrc.bashrc の一番下辺りにでも、以下を記載して下さい。
export DISPLAY=:(さっきメモした DISPLAY のポート番号)
export PULSE_SERVER=127.0.0.1:(さっきメモした PULSE_SERVER のポート番号)vim の操作方法を知らない人は以下だけ覚えればなんとかなります。
キーボードのキー 役割 i コマンドモードから入力モードに入る ESC 入力モードを抜けてコマンドモードに戻る :wq 保存して終了する。コマンドモードで操作すること。 今回に限り、先程記載した設定を手動で実行します。
次回からは自動的に実行するにで以下の操作は不要になります。source .bashrcデスクトップ環境の起動
まず、XSDLを立ち上げてください。先程のポート番号等が出る画面まで待ちます。
次に、Termux に戻り、Ubuntu の上で以下のコマンドを実行します。・ LXDE の場合
startlxde・ Xfce の場合
startxfce4XSDL に戻り、しばらく待つと Ubuntu のデスクトップ環境が立ち上がるはずです。
この辺りはボタン一発でデスクトップ環境が立ち上がる UserLAnd の方が楽ですね。
参考サイト
- 投稿日:2020-02-06T22:09:38+09:00
Android でも Android アプリを開発したい
はじめに
どれだけの人が Android で Android アプリを開発したいと思っているのか分かりませんが、本記事は Android 上でセルフ開発を行うための環境構築を目的としています。
セルフ開発とは、自身の端末で自身の端末向けのアプリケーションを開発することを指します。
Windows や Mac、Linux などはセルフ開発が出来ますが、Android は少なくとも公式には開発ツールが出てませんでしたのでついやってみたくなり、思い立ったが吉日とばかりに構築してみました。
(とはいっても公式の Linux 版を使用しているのですけれどもね。。。)
まだ構築したばかりですので、もしかすると実際に開発を行うと不備があるかもしれませんが、その辺りはご容赦ください。
何か見つかれば調査して解決方法を書いていきたいと思います。
本記事では Android Studio を最低限の動作を行うところまでを構築します。なお Android Studio を使うにあたってはスタイラスペンはあった方が良く、100円ショップのでも無いよりはマシです。
Android Studio のメニューが細いので親指はおろか小指でのタッチでもつらいです。
なお先端がプラスチックの Nintendo 3DS 向けのものは買わないで下さい。タッチパネルが反応しせんでした・・・事前準備(Ubuntu のデスクトップ環境)
事前に UserLAnd や Termux 等で Ubuntu のデスクトップ環境を用意してください。
もし構築していない人は、後で最低限のデスクトップ環境の構築手順を記載しますので良かったら参考にして下さい。
おそらく Android Studio の動作速度は Termux の方が速いですが手順が面倒です。
速い端末をお持ちの人は UserLAnd で楽をするのも手かもしれません。なお Debian はJDKのバージョンの問題で、Android Studio が動作しませんのでおすすめしませんが、openjdk 8 をなんとか用意できる人なら動かせるかもしれません。
ダウンロード
Android Studio, SDK tools, Arm64版attp2 をダウンロードします。
ダウンロードは Windows での操作を前提に書いていますが、Android でも同じ事はできると思います。Android Studio, SDK tools のダウンロード
Android Studio downloads に入って Android Studio package の Linux (64-bit)版と SDK tools package の Linux 版をダウンロードします。
私の時には、android-studio-ide-191.6010548-linux.tar.gz と sdk-tools-linux-4333796.zip がありました。
後で、このファイル名を指定してコマンドを実行している箇所がありますが、もしファイル名が変わっていましたら、ご自分のダウロードしたファイル名に置き換えてコマンドを実行して下さい。
Android SDK Toolsは、開発とデバッグのためのツール一式を含むものになります。
Android Studio は単体ではなく、様々な外部ツールと連携して動作することになります。
後で Gradle と呼ばれるビルドツールで更に別のコマンドラインツール等をダウンロードします。Arm64版attp2 のダウンロード
aapt2 とは、APKファイル(Androidでインストールに使用するアプリケーションのパッケージファイル)を生成等をするためのツールになります。
公式には Arm64 CPU 版は出ていませんが、Githubで公開されている方がいらっしゃいましたのでありがたく使わせていただきました。https://github.com/thejunkjon/android-tools/tree/master/build/android-9.0.0_r33/aapt2/arm64-v8a/bin
上記のサイトに行き、Download ボタンを押下して、aapt2 ファイルをダウンロードしてください。
設置
Android の何か適当なファイル管理ツールでの操作になります。
私は、X-plore という Android アプリを使用していますが、ファイルを操作できれば何でも良いと思います。
先程ダウンロードした Android Studio, SDK tools を UserLAnd または Termux の Ubuntu から見える位置に設置します。UserLAnd の場合
以下の対応表を見て、好みの位置に設置して下さい。
Ubuntu Android /storage/internal/ (本体 側)/sdcard/Android/data/tech.ula/files/storage/ /storage/sdcard/ (SD Card 側)/storage/(SD Cardの名前)/Android/data/tech.ula/files/storage/ Termux の場合
以下の対応表を見て、好みの位置に設置して下さい。
Ubuntu Android /sdcard/ (本体 側)/sdcard/ /storage/(SD Cardの名前)/ (SD Card 側)/storage/(SD Cardの名前)/ JDKのインストール
Ubuntu での操作になります。
まだデスクトップ環境を立ち上げる必要は無いので、シェルだけ立ち上げたほうが実施しやすい方はそうして下さい。openjdk 8 をインストールします。
なお、Termux は root アカウントのため、先頭の sudo は不要です。# openjdk 8 のインストール sudo apt install -y openjdk-8-jdk # openjdk 8 がインストールされているか確認 ls /usr/lib/jvm/java-8-openjdk-arm64 # テキストエディタ vim をインストールしていない人はインストール sudo apt install -y vim # 環境設定ファイルの編集 sudo vim /etc/enviromentenviroment ファイルには以下を記載して保存します。
JAVA_HOME="/usr/lib/jvm/java-8-openjdk-arm64"vim の操作方法を知らない人は以下だけ覚えればなんとかなります。
キーボードのキー 役割 i コマンドモードから入力モードに入る ESC 入力モードを抜けてコマンドモードに戻る :wq 保存して終了する。コマンドモードで操作すること。 保存したら環境設定ファイルを自分の環境に反映します。
source /etc/enviromentArm64版の openjdk 11 だと Android Studio が動作しません。
もし 11 も入れている人が居るのでしたら、後述のおまけに書かれている方法で 8 に切り替えましょう。Android SDK tools のインストール
続いて、Android SDK tools をインストールします。
# UserLAnd の場合 mkdir -p /home/(自分のID)/Android/Sdk cd (sdk-tools-linux-4333796.zip のあるディレクトリ) cp sdk-tools-linux-4333796.zip /home/(自分のID)/Android/Sdk cd /home/(自分のID)/Android/Sdk/ unzip sdk-tools-linux-4333796.zip # Termux の場合 mkdir -p /root/Android/Sdk cd (sdk-tools-linux-4333796.zip のあるディレクトリ) cp sdk-tools-linux-4333796.zip /root/Android/Sdk cd /root/Android/Sdk unzip sdk-tools-linux-4333796.zipUserLAnd の場合には ID ごとにディレクトリが変わりますが、ID は最初に Ubuntu を選択した時に登録する ID になります。
おそらくコマンドプロンプトの左側に書いてあるはずですので、その値を使用して下さい。Android Studio のインストール
いよいよ Android Studio のインストールです。
# UserLAnd, Termux 共通 cd (android-studio-ide-191.6010548-linux.tar.gz のあるディレクトリ) cp android-studio-ide-191.6010548-linux.tar.gz /usr/local/ cd /usr/local/ tar -xvzf android-studio-ide-191.6010548-linux.tar.gz cd /usr/local/android-studio/bin/ sudo chmod +x studio.shAndroid Studio 自体のインストールはここまでですが、後で外部ツールの一部を手作業で作成して設置する必要があります。
Android Studio の設定
ここからは Ubuntu のデスクトップ環境での操作になります。
注意点ですが、XSDLを使用している方は、font scale を小さく(私は 0.5 にしました)設定して下さい。
大きく設定すると Android Studio のダイアログが、画面よりも大きくなってしまいボタンが画面からはみ出して押せなくなります。
また解像度が低くてもダイアログが画面からはみ出してしまうので、ある程度の大きさが必要なようです。私の場合は、1280x720 にしてあります。コマンドラインから studio.sh を実行して Android Studio を立ち上げます。
LXTerminal (画面左下の鳥のマーク → System Tools → LXTerminal) 等を立ち上げて以下のコマンドを実行して下さい。
※私の場合にはデスクトップ環境にLXDEを使用しているので画面左下の鳥のマークと書いていますが、Xfceの場合には左上と読み替えて下さい。
# UserLAnd, Termux 共通 /usr/local/android-studio/bin/studio.sh設定ファイルをインポートするダイアログが出るので、設定ファイルがあれば指定してOKボタンを押下してください。
なければ、そのままOKボタンを押下してください。android studio(なぜか小文字)が書かれたスプラッシュウィンドウが出た後に、何やらデータを Google に送って欲しいというダイアログが出ます。
好きなボタンを選んで下さい。Welcome ダイアログが出るので、Next ボタンを押下してください。
Install Type ダイアログが出ますが、私は Standard しか選んだことがないので、ここから先は Satndard を選んだものとして話を進めます。Next ボタンを押して下さい。
Select UI Theme ダイアログが出るので、好みのデザインを選択してから Next ボタンを押して下さい。
Veryfy Settings ダイアログが出るので、 Next ボタンを押下します。もしここでエラーメッセージが出るようでしたら、SDK Tools のインストール先が間違っているので、一旦 Cancel ボタンを押下して Android Studio を終了し、インストール先を修正してから再度 Android Studio を立ち上げて下さい。
Emulator Settings ダイアログが出ますが、特にやることはないので Finish ボタンを押下します。
Downloading Components ダイアログが出てコンポーネントをダウンロードします。ダウンロードが終わったら、Finish ボタンを押下します。
私の環境ではダウンロードに10分ほど掛かりました。Android Studio ダイアログが出ますので、Start a new Android Studio project を押下します。
Create New Project ダイアログが出ますので、適当なパネルを選択し、Next ボタンを押下します。
Configure your project ダイアログが出ますので、API レベルは自分のスマートフォンの Android のバージョン(スマートフォンごとに Android の設定画面のメニューが違うので、Android のバージョンの確認方法は各自調査してください)に合わせて、他は適当な値を設定し、Finish ボタンを押下します。
ここでちょっと固まりますが、あわてず待ちましょう。しばらく待つと IDE が立ち上がるはずです。右下に 2 processes running... の文字が見えたら gradle と呼ばれるビルドツールを自動的にダウンロードして、ビルドを行います。
gradle の動作が止まったら、メニューから File → Project Structure を選択して Project Structure ダイアログを開いて下さい。
SDK Location の JDK locations を JAVA_HOME に設定し、OK ボタンを押下します。再びビルドが始まるので、気長にエラーが出るまで待ちます。
ビルドが始まらなかったら Android Stdio のメニュー Build → Rebuild Project を選択します。ここでは gradle が使用する外部ツールでエラーが発生します。
Android Studio の下の方に Gradle Sync という文字が出ており、その右側にバーが出ているはずです。そのバーの動きが止まるまで待って下さい。
環境にもよりますが、私が UserLAnd で行ったときには10分以上はかかりました。gradle がオフラインで動作するように設定します。
メニューから File → Settings を選択して Settings ダイアログを開いて下さい。
Build, Execution, Deployment → Gradle を選択し、Global Gradle settings にある Offline work にチェックを入れて、OK ボタンを押下します。
この処理は後述の jar ファイルが置き換えられないようにできないかなと思って設定していますが、ちょっと調べた限りでは置き換えが起こるかどうか分かりませんでした。。。←どうやらオンラインのままでも置きかわらないようです。でもオフラインの方が普段は速いので、オフラインにしておいましょう。たまに(LXDEからXfceに環境を変えたときなど)ビルド時にオフラインを解除してとエラーメッセージが出るときがあるので、その時に一旦解除してビルドを行い、再びオフラインにすると良いと思います。aapt2 の為の jar ファイルの作成
先程、エラーがでましたが、原因は appt2 というツールです。
このツールの公式版は Intel CPU 向けなので Arm64 CPU であるスマホの上だと動作しません。
Arm64 CPU 版の aapt2 に置き換えます。aapt2 は jar ファイルに含まれているので、まずは jar ファイルを探します。
画面左下の鳥のマーク → System Tools → File Manager PCManFM(以後、PCMan と呼びます) を選択します。
PCMan が立ち上がったらメニュー View → Show Hidden にチェックを入れます。
以下のフォルダを開いて下さい。・UserLAnd の場合
/home/(ユーザーID)/.gradle/caches/modules-2/files-2.1/com.android.tools.build/aapt2
・Termux の場合
/root/.gradle/caches/modules-2/files-2.1/com.android.tools.build/aapt2
この下に aapt2-x.x.x-xxxxxx-linux.jar (x にはバージョンを表す数字が入る)があるはずですので探して下さい。
proto とついている方は今回は無視して大丈夫です。aapt2-x.x.x-xxxxxx-linux.jar をどこかにコピーします。
ファイル名の拡張子を jar から zip に書き換えて解凍します。
aapt2 が入っているはずなので、最初にダウンロードした Arm64 CPU 版の aapt2 に置き換えます。
META-INFフォルダ、aapt2、NOTICE の3つを、aapt2-x.x.x-xxxxxx-linux.zip に圧縮します。
ファイル名の拡張子を zip から jar に書き換えます。
jar ファイルを、最初に見つけた jar ファイルの位置に上書きします。Android Studio で再びビルド
Android Studio に再び戻り、メニューの Build → Rebuild project を選択して、リビルドでエラーが発生しないことを確認して下さい。
続いてメニューの Build → Build Bundle(s) / APK(s) → Build APK(s) を選択して APK ファイル(Androidアプリケーションのインストール用パッケージ)を作成してみて下さい。
右下に Build APK(s) というインフォメーションが出て、文字列の中に locate の文字が出るので、その文字列をクリックして下さい。
フォルダが開いて、その中に拡張子が apk のファイルが生成されていたら成功です。試してみたい方は、APK ファイルを Android 側に渡して、インストールを試してみましょう。
もしインストールで解析ができないとか言われた場合には、自分のスマートフォンの Android のバージョンが APK ファイルの指定しているバージョンよりも古い可能性がありますので、プロジェクトを新たに作成し、自分のスマートフォンの Android のバージョンに合わせたSDKを(プロジェクトの生成ダイアログの Minimum API level の設定)合わせて下さい。以上で開発環境の構築は終わりです。
空いた時間にでも軽く(?)開発するのもおつなものかもしれませんね。おまけ
openjdk 11 を入れてしまった人の為の解決方法
まずは先述の通り、openjdk 8 をインストールします。
続いて以下のコマンドを実行して java-8-openjdk-arm64 が選択肢に出るので、番号で選択して下さい。
sudo update-alternatives --config java最後に先述の通り /etc/environment を記載して JAVA_HOME 等を設定します。
参考サイト
- 投稿日:2020-02-06T19:19:22+09:00
全てのファイルをファイル名順でリストアップするコマンド
以下のコマンドで全てのファイルをファイル名順でリストアップできます。
ls -la $(find / -type f) | sort -k9ファイルサイズ順(降順)なら
ls -la $(find / -type f) | sort -nr -k5ファイルサイズ順(降順)トップ10だけなら
ls -la $(find / -type f) | sort -nr -k5 | head -10
- 投稿日:2020-02-06T18:27:14+09:00
[高速版]ファイル or ディレクトリを検索して一括削除する
他の人が既に投稿してるかもしれないが、よく使うコマンドなので備忘録。
結論
find
+xargs
で爆速になる。find <path> -name <name> -type <type> | xargs rm -rf解説
ググると
xargs
の他に-exec
オプションを使う方法もヒットする。find <path> -name <name> -type <type> -exec rm -rf {} \;
-exec {} ;
の場合、1 行ずつコマンドに渡しrm
を実行する。rm -rf foo.txt rm -rf bar.txt rm -rf baz.txt rm -rf qux.txt
xargs
の場合、可能な限り複数行をまとめてコマンドに渡しrm
を実行する。rm -rf foo.txt bar.txt baz.txt qux.txt毎回実行するか、まとめて実行するかの違い。なので
xargs
の方が高速。因みに
-exec {} +
を使うと、複数行をまとめてコマンドに渡せるけど、実行対象が数万件とかだとxargs
の方が効率的らしい。
- 投稿日:2020-02-06T17:58:44+09:00
UltraZed/Ultra96/Ultra96-V2 向け Debian GNU/Linux (v2019.2版) ブートイメージの提供
はじめに
この記事は、UltraZed/Ultra96/Ultra96-V2 用に Boot Loader(U-Boot等)、Linux Kernel、Debian10(buster) Root File System を以下の URL に用意したので、そのインストール方法を説明します。Boot Loader や Linux Kernel のビルドが面倒くさいという方はどうぞ。
概要
- Hardware
- UltraZed-EG-IOCC : Xilinx Zynq UltraScale+ MPSoC Starter Kit by Avnet.
- Ultra96 : Xilinx Zynq UltraScale+ MPSoC development board based on the Linaro 96Boards specification.
- Ultra96-V2 : updates and refreshes the Ultra96 product that was released in 2018.
- Boot Loader
- FSBL(First Stage Boot Loader for ZynqMP)
- PMU Firmware(Platform Management Unit Firmware)
- BL31(ARM Trusted Firmware Boot Loader stage 3-1)
- U-Boot xilinx-v2019.2 (customized)
- Linux Kernel Version v4.19.0
- linux-xlnx tag=xilinx-v2019.2
- Enable Device Tree Overlay with Configuration File System
- Enable FPGA Manager
- Enable FPGA Bridge
- Enable FPGA Reagion
- Enable ATWILC3000 Linux Driver for Ultra96-V2
- Debian10(buster) Root File System
- Installed build-essential
- Installed device-tree-compiler
- Installed ruby ruby-msgpack ruby-serialport
- Installed python python3 msgpack-rpc-python
- Installed u-boot-tools
- Installed Other package list -> https://github.com/ikwzm/ZynqMP-FPGA-Linux/blob/v2019.2.1/files/debian10-dpkg-list.txt
- FPGA Device Drivers and Services
インストール
ダウンロード
github から次のようにダウンロードしてください。現時点の最新バージョンは v2019.2.1 です。なお、いくつかのイメージファイルはかなり大きいので、Git LFS(Large File Storage)を使っています。お使いの環境に git-lfs がインストールされている必要があります。
shell$ git clone -b v2019.2.1 git://github.com/ikwzm/ZynqMP-FPGA-Linux shell$ cd ZynqMP-FPGA-Linux shell$ git lfs pullファイルの説明
- target/Ultra96
- boot/
- boot.bin : Stage 1 Boot Loader
- uEnv.txt : U-Boot environment variables for linux boot
- image-4.19.0-xlnx-v2019.2-zynqmp-fpga : Linux Kernel Image (use Git LFS)
- devicetree-4.19.0-xlnx-v2019.2-zynqmp-fpga-ultra96.dtb : Linux Device Tree Blob
- devicetree-4.19.0-xlnx-v2019.2-zynqmp-fpga-ultra96.dts : Linux Device Tree Source
- target/Ultra96-V2
- boot/
- boot.bin : Stage 1 Boot Loader
- uEnv.txt : U-Boot environment variables for linux boot
- image-4.19.0-xlnx-v2019.2-zynqmp-fpga : Linux Kernel Image (use Git LFS)
- devicetree-4.19.0-xlnx-v2019.2-zynqmp-fpga-ultra96v2.dtb : Linux Device Tree Blob
- devicetree-4.19.0-xlnx-v2019.2-zynqmp-fpga-ultra96v2.dts : Linux Device Tree Source
- target/UltraZed-EG-IOCC/
- boot/
- boot.bin : Stage 1 Boot Loader
- uEnv.txt : U-Boot environment variables for linux boot
- image-4.19.0-xlnx-v2019.2-zynqmp-fpga : Linux Kernel Image (use Git LFS)
- devicetree-4.19.0-xlnx-v2019.2-zynqmp-fpga-ultra96v2.dtb : Linux Device Tree Blob
- devicetree-4.19.0-xlnx-v2019.2-zynqmp-fpga-ultra96v2.dts : Linux Device Tree Source
- debian10-rootfs-vanilla.tgz : Debian10 Root File System (use Git LFS)
- linux-image-4.19.0-xlnx-v2019.2-zynqmp-fpga_4.19.0-xlnx-v2019.2-zynqmp-fpga-2_arm64.deb : Linux Image Package (use Git LFS)
- linux-headers-4.19.0-xlnx-v2019.2-zynqmp-fpga_4.19.0-xlnx-v2019.2-zynqmp-fpga-2_arm64.deb : Linux Headers Package (use Git LFS)
- fclkcfg-4.19.0-xlnx-v2019.2-zynqmp-fpga_1.3.0-1_arm64.deb : fclkcfg(1.3.0) Device Driver Package
- udmabuf-4.19.0-xlnx-v2019.2-zynqmp-fpga_1.4.6-0_arm64.deb : udmabuf(1.4.6) Device Driver Package
- u-dma-buf-4.19.0-xlnx-v2019.2-zynqmp-fpga_2.1.3-0_arm64.deb : udmabuf(2.1.3) Device Driver Package
SD-Card のフォーマット
- SD-Card のパーティション1を VFAT File System でファイルシステムを作ります。
- SD-Card のパーティション2を ext4 File System でファイルシステムを作ります。
Linux での SD-Card のフォーマット方法は次の URL を参照してください。
SD-Card への書き込み
0. SD-Card のマウント
shell# mount /dev/sdc1 /mnt/usb1 shell# mount /dev/sdc2 /mnt/usb21. Boot Partition のコピー
Ultra96 の場合
SD-Card のパーティション1(下の例では/dev/sdc1)に target/Ultra96/boot/ 下のファイルをコピーします。
shell# cp target/Ultra96/boot/* /mnt/usb1Ultra96-V2 の場合
SD-Card のパーティション1(下の例では/dev/sdc1)に target/Ultra96-V2/boot/ 下のファイルをコピーします。
shell# cp target/Ultra96-V2/boot/* /mnt/usb1UltraZed の場合
SD-Card のパーティション1(下の例では/dev/sdc1)に target/UltraZed-EG-IOCC/boot 下のファイルをコピーします。
shell# cp target/UltraZed-EG-IOCC/boot/* /mnt/usb12. RootFS Partition の生成
SD-Card のパーティション2(下の例では/dev/sdc2)に debian10-rootfs-vanilla.tgz の中身を展開します。展開したルートファイルシステムの home/fpga にデバイスドライバの Debian パッケージをあらかじめコピーしておくと良いでしょう。後から network 経由でコピーしてもかまいません。
shell# tar xfz debian10-rootfs-vanilla.tgz -C /mnt/usb2 shell# mkdir /mnt/usb2/home/fpga/debian shell# cp linux-image-4.19.0-xlnx-v2019.2-zynqmp-fpga_4.19.0-xlnx-v2019.2-zynqmp-fpga-2_arm64.deb /mnt/usb2/home/fpga/debian shell# cp linux-headers-4.19.0-xlnx-v2019.2-zynqmp-fpga_4.19.0-xlnx-v2019.2-zynqmp-fpga-2_arm64.deb /mnt/usb2/home/fpga/debian shell# cp fclkcfg-4.19.0-xlnx-v2019.2-zynqmp-fpga_1.3.0-1_arm64.deb /mnt/usb2/home/fpga/debian shell# cp udmabuf-4.19.0-xlnx-v2019.2-zynqmp-fpga_1.4.6-0_arm64.deb /mnt/usb2/home/fpga/debian shell# cp u-dma-buf-4.19.0-xlnx-v2019.2-zynqmp-fpga_2.1.3-0_arm64.deb /mnt/usb2/home/fpga/debian3. Boot Partition を見えるように fstab を設定
Boot Partition を Linux 側から常時見えるようにしておくと便利です。その場合は、あらかじめ fstab にブートパーティションをマウントするように設定しておくと良いでしょう。すでに fstab には configfs のマウントが設定されているので注意してください。
shell# mkdir /mnt/usb2/mnt/boot shell# cat <<EOT >> /mnt/usb2/etc/fstab /dev/mmcblk0p1 /mnt/boot auto defaults 0 0 EOT余談: このくらいの記述ならあらかじめ debian10-rootfs-vanilla.tgz に書いておけば良いのに、何故わざわざ後で設定するのか疑問に思われるかもしれません。その理由は、debian10-rootfs-vanilla.tgz が Ultra96 と UltraZed と共用だからです。Ultra96 の SD-Card のブートパーティションは
/dev/mmcblk0p1
ですが、UltraZed の SD-Card のブートパーティションは/dev/mmcblk1p1
です。しかも UltraZed には /dev/mmcblk0p1 というのも存在していて、あらかじめ debian10-rootfs-vanilla.tgz に書いてしまっていると UltraZed では間違えて別のデバイスにアクセスしてしまいます。そこで、面倒ですが後で設定するようにしました。4. network の設定
Ultra96/Ultra96-V2 は WiFi を通じてネットワークに接続します。あらかじめホスト側で設定ファイルを作って RootFS に書いておくと良いかもしれません。もちろん、後で Ultra96/Ultra96-V2 を起動してそちらで設定してもかまいません。
ここでは SSID を ssssssssに、パスフレーズを ppppppppp に、暗号化したアクセスキーを xxxx とします。
まずは wpa_passphrase に SSID とパスフレーズを入力して暗号化したアクセスキーを作ります。
shell# wpa_passphrase ssssssss ppppppppp network={ ssid="ssssssss" #psk="ppppppppp" psk=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx }4.1 /etc/network/interfaces.d/wlan0 に直接記述
SSID と暗号化したアクセスキーをネットワーク設定ファイル(/etc/network/interfaces.d/wlan0)に直接記述します。
/mnt/usb2/etc/network/interfaces.d/wlan0auto wlan0 iface wlan0 inet dhcp wpa-ssid ssssssss wpa-psk xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx4.2 /etc/wpa_supplicant/wpa_supplicant.conf に記述
ネットワーク設定ファイル(/etc/network/interfaces.d/wlan0)に、次のように、ブート時に wpa_supplicant.conf を読み込んで Wifi を設定するように記述します。
/mnt/usb2/etc/network/interfaces.d/wlan0auto wlan0 iface wlan0 inet dhcp wpa-conf /etc/wpa_supplicant/wpa_supplicant.confSSID と暗号化したアクセスキーをWifi設定ファイル(/etc/wpa_supplicant/wpa_supplicant.conf)に記述します。
/etc/wpa_supplicant/wpa_supplicant.confctrl_interface=/run/wpa_supplicant update_config=1 network={ ssid="ssssssss" psk=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx }なお、ステルス SSID の場合、スキャンを強制的に行う必要があります。この場合は、/etc/wpa_supplicant/wpa_supplicant.conf に
scan_ssid=1
を追加します。/etc/wpa_supplicant/wpa_supplicant.confctrl_interface=/run/wpa_supplicant update_config=1 network={ ssid="ssssssss" scan_ssid=1 key_mgmt=WPA-PSK psk=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx }パスフレーズ無し の SSID に接続する場合は、
key_mgmt=NONE
(NONE は大文字) にすると良いようです。/etc/wpa_supplicant/wpa_supplicant.confctrl_interface=/run/wpa_supplicant update_config=1 network={ ssid="ssssssss" scan_ssid=1 key_mgmt=NONE }5. SD-Card のアンマウント
shell# umount /mnt/usb1 shell# umount /mnt/usb2デバイスドライバ パッケージのインストール
Ultra96/Ultra96-V2/UltraZed をブートして root でログイン
root'password is "admin".
debian-fpga login: root Password: root@debian-fpga:~#Linux Image Package のインストール
debian10-rootfs-vanilla.tgz にはすでに v2019.2.1 の Linux Image Package(linux-image-4.19.0-xlnx-v2019.2-zynqmp-fpga_4.19.0-xlnx-v2019.2-zynqmp-fpga-2_arm64.deb) がインストールされています。ですので、以下の作業は不要ですが、なんらかの事情で再インストールする際の参考にしてください。
root@debian-fpga:~# cd /home/fpga/debian root@debian-fpga:/home/fpga/debian# dpkg -i linux-image-4.19.0-xlnx-v2019.2-zynqmp-fpga_4.19.0-xlnx-v2019.2-zynqmp-fpga-2_arm64.deb (Reading database ... 26393 files and directories currently installed.) Preparing to unpack linux-image-4.19.0-xlnx-v2019.2-zynqmp-fpga_4.19.0-xlnx-v2019.2-zynqmp-fpga-2_arm64.deb ... Unpacking linux-image-4.19.0-xlnx-v2019.2-zynqmp-fpga (4.19.0-xlnx-v2019.2-zynqmp-fpga-2) over (4.19.0-xlnx-v2019.2-zynqmp-fpga-2) ... Setting up linux-image-4.19.0-xlnx-v2019.2-zynqmp-fpga (4.19.0-xlnx-v2019.2-zynqmp-fpga-2) ...Linux Header Package のインストール
dpkg を使って linux-headers-4.19.0-xlnx-v2019.2-zynqmp-fpga_4.19.0-xlnx-v2019.2-zynqmp-fpga-2_arm64.deb をインストールします。
root@debian-fpga:~# cd /home/fpga/debian root@debian-fpga:/home/fpga/debian# dpkg -i linux-headers-4.19.0-xlnx-v2019.2-zynqmp-fpga_4.19.0-xlnx-v2019.2-zynqmp-fpga-2_arm64.deb Selecting previously unselected package linux-headers-4.19.0-xlnx-v2019.2-zynqmp-fpga. (Reading database ... 26393 files and directories currently installed.) Preparing to unpack linux-headers-4.19.0-xlnx-v2019.2-zynqmp-fpga_4.19.0-xlnx-v2019.2-zynqmp-fpga-2_arm64.deb ... Unpacking linux-headers-4.19.0-xlnx-v2019.2-zynqmp-fpga (4.19.0-xlnx-v2019.2-zynqmp-fpga-2) ... Setting up linux-headers-4.19.0-xlnx-v2019.2-zynqmp-fpga (4.19.0-xlnx-v2019.2-zynqmp-fpga-2) ... make: Entering directory '/usr/src/linux-headers-4.19.0-xlnx-v2019.2-zynqmp-fpga' HOSTCC scripts/basic/fixdep HOSTCC scripts/kconfig/conf.o YACC scripts/kconfig/zconf.tab.c LEX scripts/kconfig/zconf.lex.c HOSTCC scripts/kconfig/zconf.tab.o HOSTLD scripts/kconfig/conf scripts/kconfig/conf --syncconfig Kconfig HOSTCC scripts/dtc/dtc.o HOSTCC scripts/dtc/flattree.o HOSTCC scripts/dtc/fstree.o HOSTCC scripts/dtc/data.o HOSTCC scripts/dtc/livetree.o HOSTCC scripts/dtc/treesource.o HOSTCC scripts/dtc/srcpos.o HOSTCC scripts/dtc/checks.o HOSTCC scripts/dtc/util.o HOSTCC scripts/dtc/dtc-lexer.lex.o HOSTCC scripts/dtc/dtc-parser.tab.o HOSTLD scripts/dtc/dtc CC scripts/mod/empty.o HOSTCC scripts/mod/mk_elfconfig MKELF scripts/mod/elfconfig.h HOSTCC scripts/mod/modpost.o CC scripts/mod/devicetable-offsets.s HOSTCC scripts/mod/file2alias.o HOSTCC scripts/mod/sumversion.o HOSTLD scripts/mod/modpost HOSTCC scripts/bin2c HOSTCC scripts/kallsyms HOSTCC scripts/conmakehash HOSTCC scripts/sortextable HOSTCC scripts/asn1_compiler HOSTCC scripts/extract-cert make: Leaving directory '/usr/src/linux-headers-4.19.0-xlnx-v2019.2-zynqmp-fpga'fclkcfg デバイスドライバのインストール
dpkg を使って fclkcfg-4.19.0-xlnx-v2019.2-zynqmp-fpga_1.3.0-1_arm64.deb をインストールします。
root@debian-fpga:~# cd /home/fpga/debian root@debian-fpga:/home/fpga/debian# dpkg -i fclkcfg-4.19.0-xlnx-v2019.2-zynqmp-fpga_1.3.0-1_arm64.deb Selecting previously unselected package fclkcfg-4.19.0-xlnx-v2019.2-zynqmp-fpga. (Reading database ... 45373 files and directories currently installed.) Preparing to unpack fclkcfg-4.19.0-xlnx-v2019.2-zynqmp-fpga_1.3.0-1_arm64.deb ... Unpacking fclkcfg-4.19.0-xlnx-v2019.2-zynqmp-fpga (1.3.0-1) ... Setting up fclkcfg-4.19.0-xlnx-v2019.2-zynqmp-fpga (1.3.0-1) ...udmabuf デバイスドライバのインストール
dpkg を使って udmabuf-4.19.0-xlnx-v2019.2-zynqmp-fpga_1.4.6-0_arm64.deb をインストールします。
root@debian-fpga:~# cd /home/fpga/debian root@debian-fpga:/home/fpga/debian# dpkg -i udmabuf-4.19.0-xlnx-v2019.2-zynqmp-fpga_1.4.6-0_arm64.deb Selecting previously unselected package udmabuf-4.19.0-xlnx-v2019.2-zynqmp-fpga. (Reading database ... 45379 files and directories currently installed.) Preparing to unpack udmabuf-4.19.0-xlnx-v2019.2-zynqmp-fpga_1.4.6-0_arm64.deb ... Unpacking udmabuf-4.19.0-xlnx-v2019.2-zynqmp-fpga (1.4.6-0) ... Setting up udmabuf-4.19.0-xlnx-v2019.2-zynqmp-fpga (1.4.6-0) ...v2019.2 からは udmabuf の別名の u-dma-buf の Package も用意しています。もし必要ならば、これもインストールしておくと良いでしょう。
udmabuf から u-dma-buf に名前を変更した理由は、udmabuf と同じ名前の別のカーネルモジュールが Linux Kernel 5.0 に追加されたからです。したがって、Linux Kernel 5.0 以降では udmabuf という名前は使用できません。そこで u-dma-buf が替わりに提供されます。root@debian-fpga:~# cd /home/fpga/debian root@debian-fpga:/home/fpga/debian# dpkg -i u-dma-buf-4.19.0-xlnx-v2019.2-zynqmp-fpga_2.1.3-0_arm64.deb Selecting previously unselected package u-dma-buf-4.19.0-xlnx-v2019.2-zynqmp-fpga. (Reading database ... 45384 files and directories currently installed.) Preparing to unpack u-dma-buf-4.19.0-xlnx-v2019.2-zynqmp-fpga_2.1.3-0_arm64.deb ... Unpacking u-dma-buf-4.19.0-xlnx-v2019.2-zynqmp-fpga (2.1.3-0) ... Setting up u-dma-buf-4.19.0-xlnx-v2019.2-zynqmp-fpga (2.1.3-0) ...v2019.1 からのアップグレード
v2019.1 からの変更点
v2019.1 から、次の点が変更になっています。
- Debian10(buster) Root File System の各種アプリケーションがバージョンアップしている
- device-tree-compiler のビルドを削除
- Linux Kernel のバージョンが 4.19.0-xlnx-v2019.1 から 4.19.0-xlnx-v2019.2 になった
- Boot Loader の各バイナリ(U-Boot、ATF、PMUFW、FSBL、design_1_wrapper.bit) のバージョンアップ
- uEnv.txt の大幅な追加
従って、以下の手順で v2019.1 から v2019.2 にアップグレードすることが出来ます。
アップグレード手順
1. Debian10(buster) のアップグレード
Debian10(buster) の各種アプリケーションがバージョンアップしています。Ultra96/Ultra96-V2/UltraZed がネットワークに接続しているならば、apt コマンド で v2019.1 から v2019.2 相当にアップグレードできます。Ultra96/Ultra96-V2/UltraZed をブートして root でログインして apt update と apt upgrade を実行してください。
debian-fpga login: root Password: root@debian-fpga:~# apt update : (中略) : root@debian-fpga:~# apt upgrade : (中略) :この方法では、Package すべてアップグレードしてしまいます。もしアップグレードしたくない Package がある場合は注意してください。
2. Linux Image Package のアップグレード
https://github.com/ikwzm/ZynqMP-FPGA-Linux に linux-image-4.19.0-xlnx-v2019.2-zynqmp-fpga_4.19.0-xlnx-v2019.2-zynqmp-fpga-2_arm64.deb を用意しているので、これを dpkg でインストールしてください。
3. Linux Header Package のアップグレード
https://github.com/ikwzm/ZynqMP-FPGA-Linux に linux-headers-4.19.0-xlnx-v2019.2-zynqmp-fpga_4.19.0-xlnx-v2019.2-zynqmp-fpga-2_arm64.deb を用意しているので、これを dpkg でインストールしてください。
4. Device Driver のアップグレード
Linux Kernel のバージョンが上ったため、デバイスドライバを新しい Linux Kernel バージョンに対応させる必要があります。udmabuf と fclkcfg は https://github.com/ikwzm/ZynqMP-FPGA-Linux に Package を用意しているので、これを dpkg でインストールしてください。
5. device-tree-compiler のインストール
v2018.2 で採用した Debian9では device-tree-compiler のバージョンが古い(シンボルに対応していなかった)ため、https://git.kernel.org/pub/scm/utils/dtc/dtc.git から v1.4.7 をダウンロードしてビルド&インストールしていました。
v2019.1 で採用した Debian10 では device-tree-compiler のバージョンが v1.4.7 になってシンボルに対応しました。しかし、私が v2019.1 を作っていたときはこのことに気が付かず、v2018.2 と同じように https://git.kernel.org/pub/scm/utils/dtc/dtc.git から v1.4.7 をダウンロードしてビルド&インストールしていました。
v2019.2 の Debian10 Root File System では Debian10 が提供している device-tree-compiler がインストールされています。v2019.1 からアップグレードする際は /usr/local/bin/dtc を削除して、apt コマンドで device-tree-compiler をインストールしておいたほうが良いでしょう。6. Boot Partition のアップグレード
Boot Partition には Boot Loader、Linux Kernel Image、uEnv.txt が含まれます。github から v2019.2.1 をダウンロードて、target/[Ultra96|Ultra96-V2|UltraZed-EG-IOCC]/boot 下のファイルを Boot Partition にコピーしてください。ただし、uEnv.txt も上書きしてしまいますので、uEnv.txt になにか重要な変更を加えていた場合はバックアップをとっておくと良いでしょう。
6.1 Ultra96 の場合
SD-Card のパーティション1(下の例では/mnt/boot)に target/Ultra96/boot/ 下のファイルをコピーします。
shell# cp target/Ultra96/boot/* /mnt/boot6.2 Ultra96-V2 の場合
SD-Card のパーティション1(下の例では/mnt/boot)に target/Ultra96-V2/boot/ 下のファイルをコピーします。
shell# cp target/Ultra96-V2/boot/* /mnt/boot6.3 UltraZed の場合
SD-Card のパーティション1(下の例では/mnt/boot)に target/UltraZed-EG-IOCC/boot 下のファイルをコピーします。
shell# cp target/UltraZed-EG-IOCC/boot/* /mnt/boot参考
v2019.2 から Boot Loader(U-Boot等) のビルド環境はターゲット毎に別々のリポジトリに暖簾分けされました。以下の URL を参考にしてください。
- https://github.com/ikwzm/ZynqMP-U-Boot-Ultra96
- https://github.com/ikwzm/ZynqMP-U-Boot-Ultra96-V2
- https://github.com/ikwzm/ZynqMP-U-Boot-UltraZed-EG-IOCC
現時点の最新バージョンは v2019.2.1 ですが、それ以前のバージョンをインストールする際は以下の記事を参照してください。
- 投稿日:2020-02-06T17:43:46+09:00
Zabbix-agentでTomcatのプロセスを監視する
どうやるの?
Tomcatの起動プロセスの監視アイテムを作るぞ。
まずはzabbix_get
で動作確認だ。$ zabbix_get -s 192.168.200.24 -k proc.num[httpd] 6 $ zabbix_get -s 192.168.200.24 -k proc.num[tomcat] 0tomcatはどうやって取るんだ・・・?
答えはこれ
$ zabbix_get -s 192.168.200.24 -k proc.num[java,,,"org.apache.catalina.startup.Bootstrap start"] 1環境
- RHEL 7.7 (Maipo)
- zabbix_server 4.0.16
- zabbix_agent 4.0.16
- Tomcat 8.5.50
リファレンスをちゃんと読む
Zabbix Documentation 2.2に使い方があったので調べてみると、プロセス名を知る必要があることを知る。
proc.num[<name>,<user>,<state>,<cmdline>]
- name - プロセス名(デフォルトは「全プロセス」)
- user - ユーザー名(デフォルトは「全ユーザー」)
- state - 可能な値: all (デフォルト)、run, sleep, zomb
- cmdline - コマンドラインによるフィルター(正規表現)
tomcatのプロセス名を調べる
起動しているtomcatの状態を調べます。
$ systemctl status tomcat ● tomcat.service - Apache Tomcat 8 Loaded: loaded (/etc/systemd/system/tomcat.service; enabled; vendor preset: disabled) Active: active (exited) since 木 2020-02-06 15:01:19 JST; 1h 29min ago Process: 844 ExecStart=/opt/tomcat/bin/startup.sh (code=exited, status=0/SUCCESS) Main PID: 844 (code=exited, status=0/SUCCESS) CGroup: /system.slice/tomcat.service └─875 /usr/bin/java -Djava.util.logging.config.file=/opt/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.prot... 2月 06 15:01:19 192.168.200.24 systemd[1]: Starting Apache Tomcat 8... 2月 06 15:01:19 192.168.200.24 systemd[1]: Started Apache Tomcat 8.PID
875
をさらに調べます。$ cat /proc/875/stat 875 (java) S 1 844 844 0 -1 1077944320 19379 0 124 0 937 64 0 0 20 0 41 0 752 2357014528 21813 18446744073709551615 4194304 4196524 140724105374304 140724105356960 140023800299543 0 0 2 16800973 18446744073709551615 0 0 17 0 0 0 5 0 0 6294912 6295604 12607488 140724105383058 140724105383592 140724105383592 140724105383914 0()で囲われている箇所がプロセス名です。
tomcatを起動しているプロセス名はjava
のようです。解決(間違い)
$ zabbix_get -s 192.168.200.24 -k proc.num[java] 1取れました!
...でもふと気づく。
これではただのJavaのプロセスなだけで、tomcatのプロセスかどうかは判別できないことに。プロセスをもう一度確認
$ ps aux | grep java tomcat 875 0.1 8.6 2301772 87452 ? Sl 15:01 0:10 /usr/bin/java -Djava.util.logging.config.file=/opt/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /opt/tomcat/bin/bootstrap.jar:/opt/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/opt/tomcat -Dcatalina.home=/opt/tomcat -Djava.io.tmpdir=/opt/tomcat/temp org.apache.catalina.startup.Bootstrap startどうやらこのプロセスはtomcatが実行しているようです。
$ zabbix_get -s 192.168.200.24 -k proc.num[java,tomcat] 1取れました。
ただ、よくよく考えてみると、tomcatユーザがjavaコマンドを実行しているだけで
Tomcatの起動プロセスを監視しているわけではないことに気付きました。もう一度調べる
プロセスを確認して気付きました。
optionが長くてわかりにくかったけど、起動プロセス(org.apache.catalina.startup.Bootstrap start
)の記述があるじゃないですか。$ ps aux | grep java tomcat 2023 83.6 7.3 2299724 74204 ? Sl 17:26 0:02 /usr/bin/java -Djava.util.logging.config.file=/opt/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /opt/tomcat/bin/bootstrap.jar:/opt/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/opt/tomcat -Dcatalina.home=/opt/tomcat -Djava.io.tmpdir=/opt/tomcat/temp org.apache.catalina.startup.Bootstrap start
proc.num[<name>,<user>,<state>,<cmdline>]
第4引数のコマンドラインを使えば抽出できそうです。$ zabbix_get -s 192.168.200.24 -k proc.num[java,,,"org.apache.catalina.startup.Bootstrap start"] 1無事に起動プロセスのカウントを取得できました。
tomcatユーザであるかどうかはあまり意味がないと思ったのであえて書きませんでした。終わりに
長々と書いてしまいました。
proc.num[java,tomcat]
と書いてある記述も見かけたので、こちらを紹介させていただきました。補足
Tomcatのインストール方法によっては上記のやり方とは異なりますが、調べ方さえ分かれば応用は効きくと思います。
私の場合はソースをDL・展開してインストールを行いました。
参考:ApacheとTomcatを連携させてみた
- 投稿日:2020-02-06T16:30:31+09:00
LPIC201学習メモ
LPIC201学習メモ
10年ぶりにLPIC試験を受けなおすのでその勉強の過程で記憶に残った部分をメモしていく
ブートローダの設定ファイルの場所
/boot/grub/menu.lst(GRUBの場合)GRUB2の場合
/etc/default/grubの内容を修正した後update-grub2コマンド実行ブートローダ時に設定されたカーネルパラメータは以下のコマンドで確認
cat /proc/cmdlinesystemdの管理コマンド→systemctl
httpdサービス起動(.serviceは省略可能)
systemctl start httpd.service
or
systemctl start httpd変更されているすべての設定ファイル表示
systemd-delta-debian系のサービス管理コマンド
update-rc.d samba default-/etc/fstabの書式
デバイス名 マウントポイント ファイルシステム オプション dump fsck
- 投稿日:2020-02-06T12:26:48+09:00
Let's Encrypt certbot renew 自動更新エラー
Let's Encryptを使ってssl証明書を取得後、自動更新の設定をしたものの、エラーが出て自動更新されなかった時の解決法を一つ紹介します。
前提
・Debian(GCP)
・Let's Encryptを使ってSSL証明書の取得、https化が完了している。目標
Let's EncryptのSSL証明書は有効期限が3ヶ月なのでnerewコマンドをcrontabで定期実行させて証明書を自動更新する。
変更前の設定(実行スケジュールの部分は省略)
crontabcertbot renew --post-hook "/etc/init.d/apache2 restart"更新エラー
portが使用中なので更新できないと言っています。起動中のwebサーバ(SSL証明書の更新対象サービス)を停止させてからrenewコマンドを実行させなければいけませんでした。
WARNING:certbot.renewal:Attempting to renew cert from /etc/letsencrypt/renewal/SITE_URI.conf produced an unexpected error: At least one of the required ports is already taken.. Skipping.変更後の設定(実行スケジュールの部分は省略)
crontabcertbot renew --pre-hook "/etc/init.d/apache2 stop" --post-hook "/etc/init.d/apache2 start"変更前のコマンドに--pre-hookオプションを追加しました。
補足
・"/etc/init.d/apache2 restart"、"/etc/init.d/apache2 start"、"/etc/init.d/apache2 stop"の箇所はwebサーバの停止、起動、再起動のコマンドです。環境によって読み替えてください。
・rootユーザのcrontabに追加するとコマンドはroot権限で実行されます。他ユーザのcrontabに追加する時は"sudo /etc/init.d/apache2 restart"のようにコマンドの前にsudoを付ける必要があります。
・certbot renewの箇所は環境によってcertbot-autoなどに読み替えてください。環境によってcertbotのディレクトリを明示する場合もあります。/home/user_name/certbot renew など。
- 投稿日:2020-02-06T03:14:56+09:00
ラズパイ4のsshが超遅いときはIPv6を無効化するとよい
環境
セットアップ環境の詳細はラズパイ4にraspbian busterをセットアップを参照。
- Raspberry Pi 4 Model B (RAM 4GB)
- raspbian buster (2019-09-26-raspbian-buster.zip)
現象
ラズパイにssh接続すると、繋がるまでに時間がかかる。
原因
デフォルトがIPv6接続→IPv4接続の順となっており、IPv6接続のタイムアウトまでの時間がかかっていた。(セットアップ時にどっかミスったのかもしれないけど)
Windows Powershellから接続しても、他のLinuxから接続しても遅いためラズパイ側の問題だろうとあたりをつけた。
sshするときに-vオプションを付けて実行すると、デバッグ情報が表示できる。ここではWindowsからラズパイに接続しており、IPv6アドレスっぽい接続にタイムアウトで失敗したあと、IPv4で接続していることが分かる。
$ ssh -v ユーザ名@マシン名 OpenSSH_for_Windows_7.7p1, LibreSSL 2.6.5 debug1: Connecting to マシン名 [xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx] port 22. debug1: connect to address xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx port 22: Connection timed out debug1: Connecting to pisrv [yyy.yyy.yyy.yyy] port 22. debug1: Connection established.改善方法
ラズパイの設定を変更する。
$ sudo vi /etc/sysctl.confsysctl.confに下記を追記する。
net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1sysctl.confの変更を反映する。
$ sudo sysctl -p下記コマンドでinet6という項目がないことを確認する。
$ ip a一度、ssh接続を終了.
$ exit再度sshで接続して確かめる。
$ ssh -v ユーザ名@マシン名 OpenSSH_for_Windows_7.7p1, LibreSSL 2.6.5 debug1: Connecting to pisrv [yyy.yyy.yyy.yyy] port 22. debug1: Connection established.( ..)φメモ
上記は、全インターフェースでIPv6を無効化している。特定のインターフェースのみ無効化したい場合は、/etc/sysctl.confへの追記項目を下記にすればよい。以下、eth0のみ無効にする例。
net.ipv6.conf.eth0.disable_ipv6 = 1