自宅サーバーのセットアップパッケージ
はじめに
Raspberry Pi 2 の自宅サーバーのスペックに満足できなくなってきたので、余っていた自作PCを自宅サーバーに切り替えることにしました。これに伴って、セットアップしたパッケージをメモしていきたいと思います。
環境
・PC : Core i3、メモリ8GB、SSD64GB
・OS : Ubuntu 20.04
パッケージ一覧
・ssh
・samba
・apache2
・postfix
・dovecot
・ddnsクライアント
・logwatch
おわりに
最近はGoogleDriveの有料契約で共有できる容量を増やしているため、少し出番の少なくなった自宅サーバーですが、Webの勉強や足元考えているWEBベースのデータ可視化・解析プラットホームの試験など、活躍してもらっています。もっと勉強していろいろなことができるようになりたいですね。
MySQLのセットアップ
はじめに
データベース管理の勉強のため、MySQLをインストールしてみました。
そのときのセットアップログです。
環境
パソコン : 普通のデスクトップパソコン(自作)
OS : Ubuntu 20.04
手順
1.aptを使ってMySQLをインストールする
sudo apt install mysql-server mysql-client
2.バージョンを確認する
mysql --version
私の環境では、↓のような感じでした。
mysql Ver 8.0.23-0ubuntu0.20.04.1 for Linux on x86_64 ((Ubuntu))
3.MySQLサービスの動作を確認する
sudo service mysql status
↓こんな感じに表示されればOK
● mysql.service - MySQL Community Server
Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2021-04-10 21:53:35 JST; 4min 0s ago
Main PID: 8403 (mysqld)
Status: "Server is operational"
Tasks: 37 (limit: 9123)
Memory: 332.8M
CGroup: /system.slice/mysql.service
mq8403 /usr/sbin/mysqld
4月 10 21:53:34 kyohei-server systemd[1]: Starting MySQL Community Server...
4月 10 21:53:35 kyohei-server systemd[1]: Started MySQL Community Server.
4.セキュリティの設定
sudo mysql_secure_installation
↓のように設定しました。
Securing the MySQL server deployment.
Connecting to MySQL using a blank password.
VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?
Press y|Y for Yes, any other key for No: y
There are three levels of password validation policy:
LOW Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary file
Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 0
Please set the password for root here.
New password:
Re-enter new password:
Estimated strength of the password: 50
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.
Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
Success.
Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
Success.
By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
- Dropping test database...
Success.
- Removing privileges on test database...
Success.
Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
Success.
All done!
5.rootユーザーで初期設定をする
sudo mysql -u root
↓のように表示される
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 11
Server version: 8.0.23-0ubuntu0.20.04.1 (Ubuntu)
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> SHOW VARIABLES LIKE 'validate_password%';
↓のように表示される。
+--------------------------------------+-------+
| Variable_name | Value |
+--------------------------------------+-------+
| validate_password.check_user_name | ON |
| validate_password.dictionary_file | |
| validate_password.length | 8 |
| validate_password.mixed_case_count | 1 |
| validate_password.number_count | 1 |
| validate_password.policy | LOW |
| validate_password.special_char_count | 1 |
+--------------------------------------+-------+
7 rows in set (0.01 sec)
mysql> CREATE USER 'kyohei'@'localhost' IDENTIFIED BY 'your_password';
Query OK, 0 rows affected (0.02 sec)
mysql> select user,host from mysql.user;
+------------------+-----------+
| user | host |
+------------------+-----------+
| debian-sys-maint | localhost |
| kyohei | localhost |
| mysql.infoschema | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+------------------+-----------+
6 rows in set (0.00 sec)
mysql> SHOW GRANTS FOR 'kyohei'@'localhost';
+--------------------------------------------+
| Grants for kyohei@localhost |
+--------------------------------------------+
| GRANT USAGE ON . TO kyohei
@localhost
|
+--------------------------------------------+
1 row in set (0.00 sec)
mysql> GRANT all ON *.* TO 'kyohei'@'localhost';
Query OK, 0 rows affected (0.01 sec)
mysql> SHOW GRANTS FOR 'kyohei'@'localhost';
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Grants for kyohei@localhost |
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, CREATE ROLE, DROP ROLE ON . TO kyohei
@localhost
|
| GRANT APPLICATION_PASSWORD_ADMIN,AUDIT_ADMIN,BACKUP_ADMIN,BINLOG_ADMIN,BINLOG_ENCRYPTION_ADMIN,CLONE_ADMIN,CONNECTION_ADMIN,ENCRYPTION_KEY_ADMIN,FLUSH_OPTIMIZER_COSTS,FLUSH_STATUS,FLUSH_TABLES,FLUSH_USER_RESOURCES,GROUP_REPLICATION_ADMIN,INNODB_REDO_LOG_ARCHIVE,INNODB_REDO_LOG_ENABLE,PERSIST_RO_VARIABLES_ADMIN,REPLICATION_APPLIER,REPLICATION_SLAVE_ADMIN,RESOURCE_GROUP_ADMIN,RESOURCE_GROUP_USER,ROLE_ADMIN,SERVICE_CONNECTION_ADMIN,SESSION_VARIABLES_ADMIN,SET_USER_ID,SHOW_ROUTINE,SYSTEM_USER,SYSTEM_VARIABLES_ADMIN,TABLE_ENCRYPTION_ADMIN,XA_RECOVER_ADMIN ON . TO kyohei
@localhost
|
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)
データベースを使用してみる
データベースを表示するには↓のコマンド。
SHOW DATABASES;
CUI操作を熟知している人は、きっとコマンドラインでなんでもやってしまうのでしょうが、今の私には難しそうです...
GUI環境で操作できる便利なソフトがあるようですので、まずはそちらから取り掛かってみようと思います。
終わりに
Ubuntu上でMySQLサーバーを構築することができました。
データベースの操作の仕方はこれから勉強が必要ですが、いろいろできそうです。
参考文献
メールサーバーの設定①
はじめに
メールサーバーを設定しようとしたときの記録です。
環境
Raspberry Pi 2 Model B
Ubuntu Mate 18.04
Postfixのインストール・設定
1.postfixをインストールする
sudo apt-get install -y postfix
2.main.cfを編集する
sudo vi main.cf
mail_owner = postfix
myhostname = mail.hogefuga.com
mydomain = hogefuga.com
myorigin = $mydomain
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
local_recipient_maps = unix:passwd.byname $alias_maps
# mynetworks = 127.0.0.0/8 ←コメント化
mynetworks_style = subnet
mynetworks = 127.0.0.0/8, 192.168.1.1/24
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
home_mailbox = Maildir/
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
sendmail_path = /usr/sbin/postfix
newaliases_path = /usr/bin/newaliases
mailq_path = /usr/bin/mailq
setgid_group = postdrop
#html_directory = ←コメント化
# manpage_directory = ←コメント化
#sample_directory = ←コメント化
# readme_directory = ←コメント化
relayhost = [mail.so-net.ne.jp]:587
sudo vi /etc/postfix/relay_password
transport_maps = hash:/etc/postfix/transport
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/relay_password
smtp_sasl_security_options = noanonymous
3.メールエイリアスのデータベースを再構築する
sudo newaliases
4.postmap
postmap hash:/etc/postfix/relay_password
5.postfx
sudo /etc/init.d/postfix restart
6.mailutilsをインストール
sudo apt-get install mailutils
7.メールを送信するテスト
mail hogehoge@gmail.com
Cc:
Subject:
test
"Ctrl + d"
上記にて、Gmailアカウントにメールが送信されればOK
#参考文献 qiita.com www.maruko2.com
SurfacePro4にUbuntu18.04を入れる
- 概要
- 環境
- インストール手順
- 1.Surface Pro 4 のBitLockerを無効化
- 2.BitLockerの解除キーを入手
- 3.Ubuntuのイメージファイルをダウンロード
- 4.ダウンロードしたイメージファイルをUSBメモリに書き込む
- 5.UEFIブートの設定・優先順位を変更
- 6.USBメモリからUbuntuを起動
- 7.インストールウィザードを立ち上げる
- 8.インストールウィザードが立ち上がったら、"English"を選択して"Continue"ボタンを押す
- 9."Updates and other software"では、デフォルトのまま
- 10."Installation type"では、"Something else"を選択して"Continue"を押す
- 11."Installation type"の続きで、インストール構成や対象のパーティション設定
- (1) もともと何か使用しているSDカードであれば、"-"ボタンを元のパーティションを消します。
- (2) Free spaceとして表示されていることを確認して選択します。
- (3) Changeボタンを押して、インストールに必要なパーティションを以下のように作成していきます。
- (4) EFI領域として、Primaryパーティション、容量100MBを確保
- (5) ルート領域として、Primaryパーティション、容量好きなだけ(今回は64GB)、マウントポイントは"/"を選択
- (6) swap領域として、Primaryパーティション、容量8GB(搭載メモリの分)を確保
- (7) "Device for bootloader installation"では、SDカードのドライブを選択(今回は"/dev/sdb")
- (8) 上記を設定したら、"Install Now"ボタンをクリックします。
- (9) "Write the changes to disks?"というダイアログが出るので、加えようとしている変更が正しいか確認して、"Continue"をクリック
- 12."Where are you?"は、Tokyoを選択して"Continue"ボタンを押す
- 13.ログイン情報の入力を求められるので、適当に入力して"Continue"ボタンを押す
- 14.インストールが始まったら、ひたすら待つ
- 15.インストールが終わったら、USBメモリを抜くように指示が出るので、抜いて再起動を掛ける
- 16.Ubuntuがブートできれば完了!
- 感想
- 参考
概要
手持ちの中古ノートPCやRaspberryPiでは、動作がかなり重たいのでもう少し動作を軽快にしたいと思い、メインのノートPCにもUbuntuを入れて、ROS化してみようと思います。ただし、Windowsが使えなくなってしまうのは困ってしまうので、デュアルブート環境とし、Cドライブを汚すのも嫌だったので、SDカードにインストールすることとしました。
※あくまで個人的な備忘録ですので、分かりにくい点が多々あると思いますが、ご容赦ください。
環境
・Surface Pro 4
・CPU : Core i7-6650U @ 2.20GHz
・メモリ : 8GB
・SSD : 256GB (Ubuntuの記憶域としては不使用)
・SDカード : 128GB
インストール手順
1.Surface Pro 4 のBitLockerを無効化
コントロールパネルから、BitLockerの設定画面に入って、BitLockerを解除します。ファイル数によるようですが、結構時間が掛かります。Ubuntuをインストールしたときに、誤ってSurface本体のSSDのブートローダを上書きしてしまうとBitLockerが作動して、ログオンできなくなってしまうことがあるようです。
2.BitLockerの解除キーを入手
万が一、BitLockerが作動してしまった時のために、念のため、解除キーを入手しておきます。以下のリンク先を参照して、Microsoftアカウントにログインして解除キーを入手しました。
3.Ubuntuのイメージファイルをダウンロード
ダウンロード先 : https://releases.ubuntu.com/18.04.4/
4.ダウンロードしたイメージファイルをUSBメモリに書き込む
UnetbootinやbalenaEtcherなどのツールを使用してイメージファイルをUSBメモリなどに書き込みましょう。2GB強あるので、4GB以上のUSBメモリでないと入りません。注意です。
5.UEFIブートの設定・優先順位を変更
UEFIブートの画面に入るためには、電源ON後、すぐに本体ボリューム+のボタンを押すと入れます。そこで、セキュリティブートの項目をMicrosoft OnlyからMicrosoft & 3rd Party CAに変更します。こうするとWindows以外でもブートできるようになるようです。加えて、Boot Configurationの設定で、USB Storageをドラッグ&ドロップで一番上に持っていき、USBメモリからのブートを最優先にします。
6.USBメモリからUbuntuを起動
UEFIブートの設定が正しく設定できていたら、Ubuntuを試すか、インストールするか選択する画面が出てくるので、Ubuntuを試すほうを選択します。まずは、USBメモリから試用版を立ち上げてみて、使用できることを確認してから、インストールをしていきます。
7.インストールウィザードを立ち上げる
起動してデスクトップが表示できたら、デスクトップにインストール用のアイコンが並んでいるので、これをダブルクリックしましょう。
8.インストールウィザードが立ち上がったら、"English"を選択して"Continue"ボタンを押す
※今回、"English"でインストールしたのは、今後ターミナルなどで日本語で出力が返ってくるよりも、英語で出力が返ってくるほうが検索した際にヒットしやすいため。
9."Updates and other software"では、デフォルトのまま
"Updates and other software"では、デフォルトのままで"Continue"ボタンを押します。
※"Install third-party software for graphics and Wi-Fi hardware and additional media formats"にチェックを入れても問題ないようですが、今回は選択しませんでした。
10."Installation type"では、"Something else"を選択して"Continue"を押す
他にもWindowsと共存してインストールできそうな項目が並んでいますが、これを選択するとWindowsのCドライブにインストールされてしまうので、要注意です。
11."Installation type"の続きで、インストール構成や対象のパーティション設定
SDカードが正しく挿入されていれば、"/dev/sda"または"/dev/sdb"が現れます。これがSDカードです。Sizeを確認して、挿したSDカードと合っているか確認しましょう。
(1) もともと何か使用しているSDカードであれば、"-"ボタンを元のパーティションを消します。
(2) Free spaceとして表示されていることを確認して選択します。
(3) Changeボタンを押して、インストールに必要なパーティションを以下のように作成していきます。
(4) EFI領域として、Primaryパーティション、容量100MBを確保
(5) ルート領域として、Primaryパーティション、容量好きなだけ(今回は64GB)、マウントポイントは"/"を選択
(6) swap領域として、Primaryパーティション、容量8GB(搭載メモリの分)を確保
(7) "Device for bootloader installation"では、SDカードのドライブを選択(今回は"/dev/sdb")
(8) 上記を設定したら、"Install Now"ボタンをクリックします。
(9) "Write the changes to disks?"というダイアログが出るので、加えようとしている変更が正しいか確認して、"Continue"をクリック
12."Where are you?"は、Tokyoを選択して"Continue"ボタンを押す
世界地図上に選択している地域として赤丸が付きますが、微妙に東京の場所と違う...
13.ログイン情報の入力を求められるので、適当に入力して"Continue"ボタンを押す
14.インストールが始まったら、ひたすら待つ
結構時間が掛かります。気長に待ちましょう。
15.インストールが終わったら、USBメモリを抜くように指示が出るので、抜いて再起動を掛ける
16.Ubuntuがブートできれば完了!
私の場合は、なぜかGrubのコマンドラインが出てきて、少々焦りました。しかし、再起動してUEFIブートの設定でSDカードのドライブ(表示名なんだっけ...?)のブート優先順を上げたら、正常にUbuntuのブートとWindowsのブートを選択できるようになりました。これで、Surface Pro 4にUbuntuをインストールすることができました。お疲れ様でした。
感想
SurfaceにもUbuntuが入るとは思ってもみませんでしたが、入れてみると表示はかなりきれいで見どころがあるなと思いました。思っていたより動作は緩慢でしたが、贅沢は言えませんね。これからSurface Pro 4でもROS入れて、ROSでの開発をしていきたいと思います。
参考
ROS上でプログラムを書いてみる
はじめに
前回の記事にて、ROSをインストールできたので、プログラムを動かしてみたいと思います。 ROSの基本動作であるPublishとSubscribeのプログラムを動かします。
環境
・ボード : Raspberry Pi 3
・OS : Raspbian/Buster
・ROSディストリビューション : Kinetic
※ROSのセットアップはこちらで行ったものを使っています。
keimlab.hatenablog.com
catkinワークスペースを作成する
ROSではcatkinワークスペースというディレクトリにて作業を行うのが推奨されているようで、その下に様々なパッケージをぶら下げてプログラムを管理するようになっています。まずは、catkinワークスペースを作成します。
mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src catkin_init_workspace catkin_make
パッケージを作成する
次に、catkinワークスペースにテスト用のパッケージを追加します。catkin_create_pkgの1つ目の引数がパッケージ名
catkin_create_pkg hello_world roscpp rospy std_msgs
パッケージを作成すると、以下のようなファイル・ディレクトリが生成されます。
プログラムを作成する
publish、subscribeでプロセス間での情報の授受をするプログラムで、プログラミングの世界でいう『Hello World!』の代替にします。公式サイトのTutorialから引用させてもらいますが、以下のプログラムを作成し、下図黄色部のように配置します。
// File name : talker.cpp #include "ros/ros.h" #include "std_msgs/String.h" #include <sstream> int main(int argc, char **argv){ ros::init(argc, argv, "talker"); ros::NodeHandle n; ros::Publisher chatter_pub = n.advertise<std_msgs::String>("chatter", 1000); ros::Rate loop_rate(10); int count = 0; while (ros::ok()){ std_msgs::String msg; std::stringstream ss; ss << "hello world " << count; msg.data = ss.str(); ROS_INFO("%s", msg.data.c_str()); chatter_pub.publish(msg); ros::spinOnce(); loop_rate.sleep(); ++count; } return 0; }
// File name : listener.cpp #include "ros/ros.h" #include "std_msgs/String.h" void chatterCallback(const std_msgs::String::ConstPtr& msg){ ROS_INFO("I heard: [%s]", msg->data.c_str()); } int main(int argc, char **argv){ ros::init(argc, argv, "listener"); ros::NodeHandle n; ros::Subscriber sub = n.subscribe("chatter", 1000, chatterCallback); ros::spin(); return 0; }
メイクファイルを編集する
書いたソースをコンパイル・リンクするように、~/catkin_ws/src/hello_world/CMakeLists.txt
(上図のオレンジ部)に以下の記述を追加します。
add_executable(talker src/talker.cpp) target_link_libraries(talker ${catkin_LIBRARIES}) add_dependencies(talker hello_world_generate_messages_cpp) add_executable(listener src/listener.cpp) target_link_libraries(listener ${catkin_LIBRARIES}) add_dependencies(listener hello_world_generate_messages_cpp)
catkin_makeする
catkinワークスペースのルートディレクトリに戻って、makeをします。これで、書いたソースコードがコンパイル・リンクされて実行形式のファイルができます。普通のCプログラムのコンパイル時より、エラーメッセージが出ても少々見づらいですが、これはやむなし...
cd ~/catkin_ws catkin_make
実行する
makeが通ったら、実行してみましょう。今回作成したプログラムは2つのノード間でやり取りするプログラムなので、ターミナルを2つ起動して、実行します。
まずは、最初のターミナルで、roscoreを実行しておき、listener側のプログラムを実行します。
このとき、roscoreを普通に実行してしまうとターミナルのコントロールを失ってしまいますので、以下のように実行してバックグラウンドで実行させるようにします (これが推奨されるのかどうかは...?)。こうすることで無駄にターミナル画面を表示させておく必要がなくなります。roscoreの出力は、~/catkin_ws/roscore.txt
に出力されますので、何か気になることがあれば、こちらを参照しましょう。
nohup roscore >> ~/catkin_ws/roscore.txt &
ちなみに、roscoreを終了させたいときには、以下のようにします。
ps aux | grep roscore
これを入力すると以下のような出力を得られます。
username 3808 6.4 3.0 62168 28448 pts/0 Sl 16:07 0:02 /usr/bin/python /opt/ros/melodic/bin/roscore username 3850 0.0 0.0 5228 596 pts/0 S+ 16:08 0:00 grep --color=auto roscore
この出力の中の1行目がroscoreのプロセスを指しています。左から2番目の項目がプロセスIDで、これ使って、プロセスを殺します。上記の例でいうと、3808がroscoreのプロセスIDで、以下のようにコマンドを入力します。
kill -INT 3808
roscoreが起動できたら、先ほどcatkin_makeしてできたhello_worldパッケージのlistenerを実行します。
rosrun hello_world listener
これを実行した直後には何も起きません。このままの状態にして、次に、2つ目のターミナルで、talker側のプログラムを実行します。すると以下のような出力を得ることができ、最初に起動したターミナルの方を見てみると、listener側のプログラムにも表示が随時更新されます。ここまでできればROSプログラムの実行が成功です。(私の環境では、listener側のプログラムで、なぜか最初の3つの内容が取りこぼされてしまっていますが...)。終了させるには、Ctrl + c
にて終了させます。
$ rosrun hello_world talker [ INFO] [1588317288.437682266]: hello world 0 [ INFO] [1588317288.537732649]: hello world 1 [ INFO] [1588317288.637634388]: hello world 2 [ INFO] [1588317288.737640345]: hello world 3 [ INFO] [1588317288.837654010]: hello world 4 [ INFO] [1588317288.937638873]: hello world 5 [ INFO] [1588317289.037641393]: hello world 6 [ INFO] [1588317289.137640267]: hello world 7 [ INFO] [1588317289.237632422]: hello world 8 [ INFO] [1588317289.337640775]: hello world 9 [ INFO] [1588317289.437630378]: hello world 10
$ rosrun hello_world listener [ INFO] [1588317501.555192296]: I heard: [hello world 3] [ INFO] [1588317501.654821160]: I heard: [hello world 4] [ INFO] [1588317501.754862987]: I heard: [hello world 5] [ INFO] [1588317501.854811639]: I heard: [hello world 6] [ INFO] [1588317501.954760863]: I heard: [hello world 7] [ INFO] [1588317502.054814930]: I heard: [hello world 8] [ INFO] [1588317502.154751812]: I heard: [hello world 9] [ INFO] [1588317502.254813431]: I heard: [hello world 10] [ INFO] [1588317502.354735208]: I heard: [hello world 11] [ INFO] [1588317502.454727088]: I heard: [hello world 12] [ INFO] [1588317502.554747875]: I heard: [hello world 13] [ INFO] [1588317502.654783088]: I heard: [hello world 14] [ INFO] [1588317502.754856738]: I heard: [hello world 15] [ INFO] [1588317502.854771953]: I heard: [hello world 16] [ INFO] [1588317502.954808781]: I heard: [hello world 17]
おわりに
ここまで見ていただき、ありがとうございました。プロセス間通信をしようと思ったら、もっとたくさんコードを書かなきゃいけないようなイメージを持っていましたが、ROSを使うとお手軽にプロセス間の情報共有が楽にできそうですね。これが複数のノード間でもできるというようで、これから挑戦していきたいと思います。ここまで、ネット検索して多くの先人たちの知恵を参考にさせていただきましたが、無償で公開してくれている皆さんに感謝です。私も皆さんに役立つような知恵を発信していきたいですね。
参考サイト
公開日 : 2020年5月1日
Raspberry Pi 2 にUbuntu Mateを入れてROSをインストールする
目次
はじめに
ここでは、Raspberry Pi 2にROSを導入するための方法として、Ubuntu Mateを使用してセットアップする方法を記載します。 Raspberry Pi標準のRaspbianを使用した方が、何かと情報があるので、やりやすい側面がありますが、Ubuntuを使用するとapt-get主体の操作でROSをいれることができるので、ROS主体で見た際には、Ubuntuで導入するのもありではないかと思います。
※今 Raspberry Pi 2を使用しているのは、単純に昔に買ったRaspberry Piが余っていたから...本当は新しいRaspberry Pi 4が欲しい...
環境
・使用ボード Raspberry Pi 2
・OS : Ubuntu Mate 18.04 Raspberry Pi用
・セットアップ言語:日本語
・SDカード容量 : 32GB
・ネットワーク : 無線LAN接続、LogitechのUSB WiFiドングル使用(...型番なんだっけ?)
・ROSバージョン : Melodic Moleinia
インストール手順
Ubuntu 18.04をインストール
・ダウンロード先 : https://ubuntu-mate.org/download/armhf/
・Windows端末で、イメージファイルをダウンロードしたら、balenaEtcherなどでMicro SDカードに書き込みます。
・書き込みが完了したら、Micro SDカードを取り外し、Raspberry Pi 2に差し込んで電源を入れます。
・Raspberry Pi 2で電源を入れたらデスクトップ画面が表示され、ウィザードに従って言語・キーボード設定・無線LAN接続情報・アカウント情報やロケールを入力して、セットアップを完了させます。
※最初はSDカードの不良で、Ubuntu Mateのセットアップが途中で止まってしまってしまいました。
それに気付いたからよいものの、対象ボードが古いからかなと思って、違うバージョンのUbuntu系ディストリビューションを探したりして時間をだいぶ無駄にしてしまいました。
SDカードは全うなものを使いましょう。
ROSをインストール
1.一般的なパッケージ用のリポジトリを追加
sudo add-apt-repository universe sudo add-apt-repository multiverse sudo add-apt-repository restricted
2.ROS用のリポジトリを追加
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list' sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
3.追加リポジトリを含めアップデート
sudo apt-get -y update sudo apt-get -y upgrade
4.ROSをインストール
sudo apt install ros-melodic-desktop-full
5.rosdepをインストール
sudo apt-get install python-pip sudo pip install -U rosdep
6.依存関係を解決
sudo rosdep init rosdep update
7.RaspberryPi電源投入後にROSのセットアップをするようにbashrcにコマンドを追加。
echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
8.現在のセッションでROSのセットアップを反映
source ~/.bashrc
9.ROSの動作確認
roscore
おわりに
Raspbianを使用すると延々とビルド作業に時間をかける必要があるため、セットアップに時間が掛かりますが、Ubuntuを入れるととても短時間でROSを導入することができます。便利ですね。
参考サイト
Raspberry Pi にRaspbian環境でROSをインストール
目次
はじめに
オープンソースで開発が進められているROS(Robot Operating System)がロボット製作に便利であるという情報を聞きつけ、試してみたくなった&勉強したいので、自宅RaspberryPiにインストールしてみます。
環境
・ボード : Raspberry Pi 3 Model B Rev 1.2
・SDカード : 32GB
・OS : Raspbian GNU/Linux 10 (buster)
・日本語環境にてセットアップ
・Raspberry Pi専用の7inchタッチパネル搭載
※ただし、SSH接続で遠隔操作しているため、あまり関係なし
インストール手順
前準備
1. dirmngrをインストールする(リポジトリにアクセスするために必要?)
sudo apt-get install dirmngr
2.ROSリポジトリのセットアップ
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list' sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
3.Bootstrapの依存関係を解消するために必要なパッケージをインストール
sudo apt-get install -y python-rosdep python-rosinstall-generator python-wstool python-rosinstall build-essential cmake
4.rosdepの初期化を行う
sudo rosdep init rosdep update
ROSセットアップ
1.catkin ワークスペースを作成する
mkdir -p ~/ros_catkin_ws cd ~/ros_catkin_ws
2.ROSインストールに必要なパッケージを集める
rosinstall_generator ros_comm --rosdistro kinetic --deps --wet-only --tar > kinetic-ros_comm-wet.rosinstall wstool init src kinetic-ros_comm-wet.rosinstall
3.collada_urdfの代わりにassimpを入れる(?)
mkdir -p ~/ros_catkin_ws/external_src cd ~/ros_catkin_ws/external_src wget http://sourceforge.net/projects/assimp/files/assimp-3.1/assimp-3.1.1_no_test_models.zip/download -O assimp-3.1.1_no_test_models.zip unzip assimp-3.1.1_no_test_models.zip cd assimp-3.1.1 cmake . make sudo make install
※makeにまぁまぁ時間が掛かるので待つ(30分くらい?)
4.rosdepで依存関係を解消する
cd ~/ros_catkin_ws rosdep install -y --from-paths src --ignore-src --rosdistro kinetic -r --os=debian:buster
5.catkinワークスペースをビルドする
sudo ./src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release --install-space /opt/ros/kinetic -j2
※ビルドしている最中にメモリ不足でエラーが出て止まるらしいので、"-j2"オプションを入れておく。
6.以下のようなエラーが出てしまった...
make[2]: *** [CMakeFiles/rospack.dir/build.make:76: CMakeFiles/rospack.dir/src/rospack_backcompat.cpp.o] Error 1 /home/pi/ros_catkin_ws/src/rospack/src/utils.cpp:31:10: fatal error: boost/tr1/unordered_set.hpp: No such file or directory #include <boost/tr1/unordered_set.hpp> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compilation terminated. make[2]: *** [CMakeFiles/rospack.dir/build.make:102: CMakeFiles/rospack.dir/src/utils.cpp.o] Error 1 make[1]: *** [CMakeFiles/Makefile2:371: CMakeFiles/rospack.dir/all] Error 2 make: *** [Makefile:141: all] Error 2 <== Failed to process package 'rospack': Command '['/opt/ros/kinetic/env.sh', 'make', '-j4', '-l4']' returned non-zero exit status 2 Reproduce this error by running: ==> cd /home/pi/ros_catkin_ws/build_isolated/rospack && /opt/ros/kinetic/env.sh make -j4 -l4 Command failed, exiting.
どうもrospackというのはboostというライブラリに依存しているようで、boost1.58のバージョンが必要らしい。使用していたRaspbian(Buster)では、boost1.67だったので、互換性なくmakeが通らなかった模様。ros wikiに書かれているとおり、
sudo apt remove libboost1.67-dev sudo apt autoremove sudo apt install -y libboost1.58-dev libboost1.58-all-dev sudo apt install -y g++-5 gcc-5 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 10 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 20 sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-5 10 sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-5 20 sudo update-alternatives --install /usr/bin/cc cc /usr/bin/gcc 30 sudo update-alternatives --set cc /usr/bin/gcc sudo update-alternatives --install /usr/bin/c++ c++ /usr/bin/g++ 30 sudo update-alternatives --set c++ /usr/bin/g++ sudo apt install -y python-rosdep python-rosinstall-generator python-wstool python-rosinstall build-essential cmake
7.再度ビルドする
sudo ./src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release --install-space /opt/ros/kinetic -j2
これでエラーを吐くことなく、終了することができました。
動作確認
1.起動時にROSのセットアップが走るように設定
echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc source /opt/ros/melodic/setup.bash
2.以下のコマンドでroscoreを動かしてみます。
roscore
これで以下のような表示がされれば、ROSが正常にインストールされています。
ここまでお付き合いいただきありがとうございます。お疲れ様でした。
... logging to /home/pi/.ros/log/da6fa3ac-8a2b-11ea-a636-b827eb1690ee/roslaunch-raspberrypi-19512.log Checking log directory for disk usage. This may take awhile. Press Ctrl-C to interrupt Done checking log file disk usage. Usage is <1GB. started roslaunch server http://raspberrypi:46695/ ros_comm version 1.12.14 SUMMARY ======== PARAMETERS * /rosdistro: kinetic * /rosversion: 1.12.14 NODES auto-starting new master process[master]: started with pid [19522] ROS_MASTER_URI=http://raspberrypi:11311/ setting /run_id to da6fa3ac-8a2b-11ea-a636-b827eb1690ee process[rosout-1]: started with pid [19535] started core service [/rosout]
失敗事項
Desktop版を入れようとしたところ、OpenCVのmakeに失敗をしているようで、以下のようなエラーが出て、先に進めず。 自力では解決負荷だったため、Desktop版を諦め、ROS-Comm版を入れることに...残念。
おわりに
まずは、ROSを試験する土台を立てることができました。これからはROSでのアプリケーション作成をやってみます。
感想
久しぶりにLinuxでのロボットを動かす環境の構築をやってみて、大学・大学院時代のRTAIのセットアップに苦労していた頃を思い出しました。Webサイトで掲載されている日本語情報を頼りにしても、想定外のエラーが出てしまうことがあり、結局は、公式サイトの英語記事を読みながら進めていって、何とか、インストールすることができました。海外サイトの英語と格闘しながら進めていくのには、粘り強い忍耐が必要ですね。もっとさらっと進められるだけのスキルがあればよいのですが、まだまだ力及ばずのところばかりです。