- 投稿日:2020-04-21T23:26:58+09:00
CentOS7で指定時間になったらパケットキャプチャーを実行する
とあるお客様から「指定時間になったら定期的にパケットを取得して欲しい」と言われ、
急遽キャプチャ用PCとしてCentOS7を構築したのですが(ググりながら)、
そのときのものを備忘録として残します。CentOS7のバージョンは以下
[smatsu@smatsu ~]$ cat /etc/redhat-release CentOS Linux release 7.7.1908 (Core)
やりたいこと
指定した時間にパケットキャプチャーを実行したい。
手段
Wiresharkを実行するシェルスクリプトを作成して、スケジュール機能はCentoS7標準のcronを使用する。
CentOSインストール
詳細は省略。
環境に合わせて仮想マシンを設定。
サウンドカード、フロッピー、プリンターなどは使わないのでこの時点で削除。
今回はGNOMEでインストールしています。Wiresharkをインストール
GUIなのでgnomeをつける。
$ sudo yum install -y wireshark-gnome
入りました。[smatsu@smatsu ~]$ wireshark -v wireshark 1.10.14 (Git Rev Unknown from unknown)このままだと一般ユーザでは権限の問題でインターフェースが表示されませんので権限を与えます。
$ sudo groupadd wireshark $ sudo usermod -aG wireshark [user]
GUIはあくまで確認用で、ここからはCLIで設定していきます。実行ファイルを作成
まずは作業用フォルダを作成。
$ mkdir pcap $ cd pcap
次に実行ファイルを作成。pcap.sh#!/bin/bash /usr/sbin/tshark -i ens33 -w /home/smatsu/pcap/`date +\%Y\%m\%d`/`date +\%Y\%m\%d_\%H\%M`.pcapng -a duration:600・tshark = コマンド版Wireshark
・gnomeをインストールすれば入っています
・ens33 = キャプチャーしたいインターフェース名
・ファイル名は日付フォルダ配下に"(日付).pcapng"で格納
・キャプチャ時間は600秒
実行権限を与えておく。chmod +x pcap.shスケジューリング設定
実行ファイルをスケジューリングするためcronを設定していく。
cronの状態を確認。[smatsu@smatsu ~]$ systemctl status crond ● crond.service - Command Scheduler Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2020-04-21 22:34:28 JST; 8min ago
※ここで有効化されてない場合は、有効化する。$ systemctl start crond
crontabで実行するコマンドを編集。
$ crontab -e 0 6 * * * /usr/bin/mkdir /home/smatsu/pcap/`date +\%Y\%m\%d` # 毎朝6時に日付のフォルダを作成 0 7 * * * /home/smatsu/pcap/pcap.sh # 毎朝7時にキャプチャーファイルを実行※ :wqで保存
cronの内容を確認。[smatsu@smatsu pcap]$ crontab -l 0 6 * * * /usr/bin/mkdir /home/smatsu/pcap/`date +\%Y\%m\%d` 0 7 * * * /home/smatsu/pcap/pcap.sh
これで毎朝日付フォルダ配下にパケットキャプチャを保存できます。
- 投稿日:2020-04-21T23:26:58+09:00
指定時間になったらパケットキャプチャーを実行する
とあるお客様から「指定時間になったら定期的にパケットを取得して欲しい」と言われ、
急遽キャプチャ用PCとしてCentOS7を構築したのですが(ググりながら)、
そのときのものを備忘録として残します。バージョンは以下
[smatsu@smatsu ~]$ cat /etc/redhat-release CentOS Linux release 7.7.1908 (Core)
やりたいこと
指定した時間にパケットキャプチャーを実行したい。
手段
Wiresharkを実行するシェルスクリプトを作成して、スケジュール機能はCentoS7標準のcronを使用する。
CentOSインストール
詳細は省略。
環境に合わせて仮想マシンを設定。
サウンドカード、フロッピー、プリンターなどは使わないのでこの時点で削除。
今回はGNOMEでインストールしています。Wiresharkをインストール
GUIなのでgnomeをつける。
$ sudo yum install -y wireshark-gnome
入りました。[smatsu@smatsu ~]$ wireshark -v wireshark 1.10.14 (Git Rev Unknown from unknown)このままだと一般ユーザでは権限の問題でインターフェースが表示されませんので権限を与えます。
$ sudo groupadd wireshark $ sudo usermod -aG wireshark [user]
GUIはあくまで確認用で、ここからはCLIで設定していきます。実行ファイルを作成
まずは作業用フォルダを作成。
$ mkdir pcap $ cd pcap
次に実行ファイルを作成。pcap.sh#!/bin/bash /usr/sbin/tshark -i ens33 -w /home/smatsu/pcap/`date +\%Y\%m\%d`/`date +\%Y\%m\%d_\%H\%M`.pcapng -a duration:600・tshark = コマンド版Wireshark
・gnomeをインストールすれば入っています
・ens33 = キャプチャーしたいインターフェース名
・ファイル名は日付フォルダ配下に"(日付).pcapng"で格納
・キャプチャ時間は600秒
実行権限を与えておく。chmod +x pcap.shスケジューリング設定
実行ファイルをスケジューリングするためcronを設定していく。
cronの状態を確認。[smatsu@smatsu ~]$ systemctl status crond ● crond.service - Command Scheduler Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2020-04-21 22:34:28 JST; 8min ago
※ここで有効化されてない場合は、有効化する。$ systemctl start crond
crontabで実行するコマンドを編集。
$ crontab -e 0 6 * * * /usr/bin/mkdir /home/smatsu/pcap/`date +\%Y\%m\%d` # 毎朝6時に日付のフォルダを作成 0 7 * * * /home/smatsu/pcap/pcap.sh # 毎朝7時にキャプチャーファイルを実行※ :wqで保存
cronの内容を確認。[smatsu@smatsu pcap]$ crontab -l 0 6 * * * /usr/bin/mkdir /home/smatsu/pcap/`date +\%Y\%m\%d` 0 7 * * * /home/smatsu/pcap/pcap.sh
これで毎朝日付フォルダ配下にパケットキャプチャを保存できます。
- 投稿日:2020-04-21T23:08:33+09:00
Shellメモ
Shell
IF文
IF[ $0-eq 0] THEN echo "success" ELIF[ $0-eq 1] THEN echo "failed,code is 1" FIFOR文
#FOREACH for i in $@;do echo $i done #FOR for((i =0; i <10; i++));do echo $i done for i in{1..5};do echo "Welcome $i" doneWHILE文
while["$ans"!="yes"] do read -p "please input yes to exit loop:" ans donetail
#監視 tail -f notes.log #上からN行目以後の内容を取得 tail +20 notes.log #下からN行目以後の内容を取得 tail -20 notes.loggrep
#検索したい文字を含む行を取得 grep targetStr *.txt #検索したい文字を含まない行を取得 grep -v targetStr *.txtfind
#ファイルやフォルダを検索コマンド #名前指定でファイルやフォルダ検索 find path -name "*.txt" find path -name "*.txt" -type f #ファイルのみ検索 find path -name "*.txt" -type d #フォルダのみ検索 #権限指定で検索 find path -perm 777 #ユーザーで検索 find path -user root #変更時間で検索 find path -mtime -5 #5日以内のもの find path -mtime +3 #3日以前のもの #サイズで検索 find path -size +1024k #1M以上のもの find path -size -1024k #1M以下のもの #検索したものに他の処理を追加 find path -name "*.txt"|xargs rm -rf #削除 find path -name "*.txt"|xargs ls -l #権限を見るsed
awk
crul
その他
wc -l #行数を統計する cp -r dir1 dir2 #フォルダコピー(dir2存在しない場合)
- 投稿日:2020-04-21T23:07:45+09:00
MySQL 8.0 を CentOS 8.1 にインストールする手順
MySQL8.0をCentOS8.1にインストールしたのでその手順を紹介します。
MySQLの公式ページを参考にインストールしたので、マニュアルを要約、かつ実際の実行結果を載せた形となります。環境
- OS:CentOS Linux release 8.1.1911
インストール手順
1. MySQL Yumリポジトリの追加
MySQL Yumリポジトリのダウンロードページからインストールするファイル名を確認します。
ここではCentOS8.1にインストールするので
mysql80-community-release-el8-1.noarch.rpm
となります。
https://dev.mysql.com/get/
と繋げて、以下のコマンドでインストールします。
dnf localinstall https://dev.mysql.com/get/mysql80-community-release-el8-1.noarch.rpm
実行結果[root@centos8 ~]# dnf localinstall https://dev.mysql.com/get/mysql80-community-release-el8-1.noarch.rpm CentOS-8 - AppStream 5.3 kB/s | 4.3 kB 00:00 CentOS-8 - Base 5.7 kB/s | 3.8 kB 00:00 CentOS-8 - Extras 2.2 kB/s | 1.5 kB 00:00 mysql80-community-release-el8-1.noarch.rpm 22 kB/s | 30 kB 00:01 依存関係が解決しました。 ================================================================================ パッケージ Arch バージョン リポジトリー サイズ ================================================================================ インストール: mysql80-community-release noarch el8-1 @commandline 30 k トランザクションの概要 ================================================================================ インストール 1 パッケージ 合計サイズ: 30 k インストール済みのサイズ: 29 k これでよろしいですか? [y/N]: y パッケージのダウンロード: トランザクションの確認を実行中 トランザクションの確認に成功しました。 トランザクションのテストを実行中 トランザクションのテストに成功しました。 トランザクションを実行中 準備 : 1/1 インストール中 : mysql80-community-release-el8-1.noarch 1/1 検証 : mysql80-community-release-el8-1.noarch 1/1 インストール済み: mysql80-community-release-el8-1.noarch 完了しました! [root@centos8 ~]#
/etc/yum.repos.d
配下を参照し、リポジトリが追加されたことを確認します。実行結果[root@centos8 ~]# cd /etc/yum.repos.d [root@centos8 yum.repos.d]# ls -l 合計 60 -rw-r--r--. 1 root root 731 3月 13 04:15 CentOS-AppStream.repo -rw-r--r--. 1 root root 712 3月 13 04:15 CentOS-Base.repo -rw-r--r--. 1 root root 1043 3月 13 04:15 CentOS-CR.repo -rw-r--r--. 1 root root 668 3月 13 04:15 CentOS-Debuginfo.repo -rw-r--r-- 1 root root 743 3月 13 04:15 CentOS-Devel.repo -rw-r--r--. 1 root root 756 3月 13 04:15 CentOS-Extras.repo -rw-r--r--. 1 root root 738 3月 13 04:15 CentOS-HA.repo -rw-r--r--. 1 root root 928 3月 13 04:15 CentOS-Media.repo -rw-r--r--. 1 root root 736 3月 13 04:15 CentOS-PowerTools.repo -rw-r--r--. 1 root root 1382 3月 13 04:15 CentOS-Sources.repo -rw-r--r--. 1 root root 74 3月 13 04:15 CentOS-Vault.repo -rw-r--r--. 1 root root 798 3月 13 04:15 CentOS-centosplus.repo -rw-r--r--. 1 root root 338 3月 13 04:15 CentOS-fasttrack.repo -rw-r--r-- 1 root root 1050 10月 4 2019 mysql-community-source.repo -rw-r--r-- 1 root root 995 10月 4 2019 mysql-community.repo [root@centos8 yum.repos.d]#
mysql-community-source.repo
とmysql-community.repo
が追加されました。以下のコマンドでMySQLのリポジトリが有効になっていることを確認します。
dnf repolist enabled | grep "mysql.*-community.*"
[root@centos8 ~]# dnf repolist enabled | grep "mysql.*-community.*" メタデータの期限切れの最終確認: 0:11:26 時間前の 2020年04月21日 21時24分21秒 に 実施しました。 mysql-connectors-community MySQL Connectors Community 4 mysql-tools-community MySQL Tools Community 1 mysql80-community MySQL 8.0 Community Server 3 [root@centos8 ~]#2. デフォルトのMySQLモジュールの無効化
以下のコマンドでデフォルトデフォルトのMySQLモジュールを無効化します。
dnf module disable mysql
実行結果[root@centos8 ~]# dnf module disable mysql メタデータの期限切れの最終確認: 0:15:51 時間前の 2020年04月21日 21時24分21秒 に 実施しました。 依存関係が解決しました。 ================================================================================ パッケージ アーキテクチャー バージョン リポジトリー サイズ ================================================================================ モジュールの無効化: mysql トランザクションの概要 ================================================================================ これでよろしいですか? [y/N]: y 完了しました! [root@centos8 ~]#3. MySQLのインストール
以下のコマンドでリポジトリからインストールするパッケージを確認します。
dnf info mysql-community-server
実行結果[root@centos8 ~]# dnf info mysql-community-server メタデータの期限切れの最終確認: 0:21:54 時間前の 2020年04月21日 21時24分21秒 に 実施しました。 利用可能なパッケージ 名前 : mysql-community-server バージョン : 8.0.19 リリース : 1.el8 Arch : x86_64 サイズ : 53 M ソース : mysql-community-8.0.19-1.el8.src.rpm リポジトリー : mysql80-community 概要 : A very fast and reliable SQL database server URL : http://www.mysql.com/ ライセンス : Copyright (c) 2000, 2019, Oracle and/or its affiliates. All : rights reserved. Under GPLv2 license as shown in the Description : field. 説明 : The MySQL(TM) software delivers a very fast, multi-threaded, : multi-user, and robust SQL (Structured Query Language) database : server. MySQL Server is intended for mission-critical, heavy-load : production systems as well as for embedding into mass-deployed : software. MySQL is a trademark of Oracle and/or its affiliates : : The MySQL software has Dual Licensing, which means you can use : the MySQL software free of charge under the GNU General Public : License (http://www.gnu.org/licenses/). You can also purchase : commercial MySQL licenses from Oracle and/or its affiliates if : you do not wish to be bound by the terms of the GPL. See the : chapter "Licensing and Support" in the manual for further info. : : The MySQL web site (http://www.mysql.com/) provides the latest : news and information about the MySQL software. Also please see : the documentation and the manual for more information. : : This package includes the MySQL server binary as well as related : utilities to run and administer a MySQL server. [root@centos8 ~]#確認できたので、以下のコマンドでインストールします。
dnf install mysql-community-server
実行結果[root@centos8 ~]# dnf install mysql-community-server メタデータの期限切れの最終確認: 0:23:16 時間前の 2020年04月21日 21時24分21秒 に 実施しました。 依存関係が解決しました。 ================================================================================ パッケージ Arch バージョン リポジトリー サイズ ================================================================================ インストール: mysql-community-server x86_64 8.0.19-1.el8 mysql80-community 53 M 依存関係のインストール: mysql-community-client x86_64 8.0.19-1.el8 mysql80-community 12 M mysql-community-common x86_64 8.0.19-1.el8 mysql80-community 609 k mysql-community-libs x86_64 8.0.19-1.el8 mysql80-community 1.4 M トランザクションの概要 ================================================================================ インストール 4 パッケージ ダウンロードサイズの合計: 67 M インストール済みのサイズ: 383 M これでよろしいですか? [y/N]: y パッケージのダウンロード: (1/4): mysql-community-common-8.0.19-1.el8.x86_ 90 kB/s | 609 kB 00:06 (2/4): mysql-community-libs-8.0.19-1.el8.x86_64 88 kB/s | 1.4 MB 00:16 (3/4): mysql-community-client-8.0.19-1.el8.x86_ 130 kB/s | 12 MB 01:35 (4/4): mysql-community-server-8.0.19-1.el8.x86_ 230 kB/s | 53 MB 03:56 -------------------------------------------------------------------------------- 合計 284 kB/s | 67 MB 04:02 警告: /var/cache/dnf/mysql80-community-b1f1ed5ba88ce0f8/packages/mysql-community-client-8.0.19-1.el8.x86_64.rpm: ヘッダー V3 DSA/SHA1 Signature、鍵 ID 5072e1f5: NOKEY MySQL 8.0 Community Server 27 MB/s | 27 kB 00:00 GPG 鍵 0x5072E1F5 をインポート中: Userid : "MySQL Release Engineering <mysql-build@oss.oracle.com>" Fingerprint: A4A9 4068 76FC BD3C 4567 70C8 8C71 8D3B 5072 E1F5 From : /etc/pki/rpm-gpg/RPM-GPG-KEY-mysql これでよろしいですか? [y/N]: y 鍵のインポートに成功しました トランザクションの確認を実行中 トランザクションの確認に成功しました。 トランザクションのテストを実行中 トランザクションのテストに成功しました。 トランザクションを実行中 準備 : 1/1 インストール中 : mysql-community-common-8.0.19-1.el8.x86_64 1/4 インストール中 : mysql-community-libs-8.0.19-1.el8.x86_64 2/4 scriptletの実行中: mysql-community-libs-8.0.19-1.el8.x86_64 2/4 インストール中 : mysql-community-client-8.0.19-1.el8.x86_64 3/4 scriptletの実行中: mysql-community-server-8.0.19-1.el8.x86_64 4/4 インストール中 : mysql-community-server-8.0.19-1.el8.x86_64 4/4 scriptletの実行中: mysql-community-server-8.0.19-1.el8.x86_64 4/4 検証 : mysql-community-client-8.0.19-1.el8.x86_64 1/4 検証 : mysql-community-common-8.0.19-1.el8.x86_64 2/4 検証 : mysql-community-libs-8.0.19-1.el8.x86_64 3/4 検証 : mysql-community-server-8.0.19-1.el8.x86_64 4/4 インストール済み: mysql-community-server-8.0.19-1.el8.x86_64 mysql-community-client-8.0.19-1.el8.x86_64 mysql-community-common-8.0.19-1.el8.x86_64 mysql-community-libs-8.0.19-1.el8.x86_64 完了しました! [root@centos8 ~]#以下のコマンドでMySQLがインストールされていることを確認します。
mysqld --version
実行結果[root@centos8 ~]# mysqld --version /usr/sbin/mysqld Ver 8.0.19 for Linux on x86_64 (MySQL Community Server - GPL) [root@centos8 ~]#4. MySQLの起動
以下のコマンドでMySQLを起動します。
systemctl start mysqld
console[root@centos8 ~]# systemctl start mysqld [root@centos8 ~]#5. 接続確認
mysqld.log
ファイルから初期パスワードを検索します。
grep 'temporary password' /var/log/mysqld.log
実行結果[root@centos8 ~]# grep 'temporary password' /var/log/mysqld.log 2020-04-21T13:18:30.707097Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: T9sqNDtMTr.O [root@centos8 ~]#
root@localhost
の初期パスワードはT9sqNDtMTr.O
となります。以下のコマンドでMySQLに接続します。
mysql -uroot -p[パスワード]
実行結果[root@centos8 ~]# mysql -uroot -pT9sqNDtMTr.O mysql: [Warning] Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 9 Server version: 8.0.19 Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved. 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>6. mysql_secure_installationの実行
mysql_secure_installation
を実行するとセキュリティの工場として以下を実行することができます。
- rootアカウントの パスワードを設定
- 匿名ユーザーアカウントを削除
- リモートからのrootユーザーのログインを禁止
- testデータベースの削除
実行結果[root@centos8 ~]# mysql_secure_installation Securing the MySQL server deployment. Enter password for user root: The 'validate_password' component is installed on the server. The subsequent steps will run with the existing configuration of the component. Using existing password for root. Estimated strength of the password: 100 Change the password for root ? ((Press y|Y for Yes, any other key for No) : y New password: Re-enter new password: Estimated strength of the password: 100 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! [root@centos8 ~]#以下のコマンドで変更したパスワードで接続確認します。
mysql -uroot -p[変更後パスワード]
実行結果[root@centos8 ~]# mysql -uroot -pPassword01! mysql: [Warning] Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 15 Server version: 8.0.19 MySQL Community Server - GPL Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved. 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 databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+ 4 rows in set (0.01 sec) mysql> exit Bye [root@centos8 ~]#7. 認証方式の設定
MySQL 8.0以降では認証方式のデフォルトはmysql_native_passwordではなく、caching_sha2_passwordに変更されています。
認証方式としてmysql_native_passwordを使用する場合、設定ファイル/etc/my.cnf
の[mysqld]
の
# default-authentication-plugin=mysql_native_password
のコメントを外します。/etc/my.cnf# For advice on how to change settings please see # http://dev.mysql.com/doc/refman/8.0/en/server-configuration-defaults.html [mysqld] # # Remove leading # and set to the amount of RAM for the most important data # cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%. # innodb_buffer_pool_size = 128M # # Remove the leading "# " to disable binary logging # Binary logging captures changes between backups and is enabled by # default. It's default setting is log_bin=binlog # disable_log_bin # # Remove leading # to set options mainly useful for reporting servers. # The server defaults are faster for transactions and fast SELECTs. # Adjust sizes as needed, experiment to find the optimal values. # join_buffer_size = 128M # sort_buffer_size = 2M # read_rnd_buffer_size = 2M # # Remove leading # to revert to previous value for default_authentication_plugin, # this will increase compatibility with older clients. For background, see: # https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_default_authentication_plugin default-authentication-plugin=mysql_native_password datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid参考
公式ページ「2.5.1 Installing MySQL on Linux Using the MySQL Yum Repository」
公式ページ「2.5.4 Installing MySQL on Linux Using RPM Packages from Oracle」
公式ページ「4.4.2 mysql_secure_installation — Improve MySQL Installation Security」
以上
- 投稿日:2020-04-21T22:29:32+09:00
Linax環境におけるNode.jsの導入から利用
はじめに
投稿者の備忘録としての活用が主です。
Webの作成において役に立つNode.jsを導入します。環境
wsl(Windows Subsystem for Linux)
にインストールします。Editor: VSCode Shell: bash version 4.4.20 Ubuntu: 18.04.4 LTS目次
1.nvmの導入
Node.jsのバージョンを管理するためにまず
nvm
を導入します。
これにより、現在利用しているNode.jsのバージョンの把握や
別バージョンへの切り替えなどを行えます。wsl$ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.34.0/install.sh | bash終了したら、
wsl$ source ~/.bashrcで、
.bashrc
の内容を読み込んでおきます。wsl$ nvm Node Version Manager Note: <version> refers to any version-like string nvm understands. This includes: - full or partial version numbers, starting with an optional "v" (0.10, v0.1.2, v1) - default (built-in) aliases: node, stable, unstable, iojs, system - custom aliases you define with `nvm alias foo` 以下略。。。となれば、インストールが成功しています。
2.Node.jsの導入
今回、Ver. 10.14.2 のNode.jsをインストールしました。
wsl$ nvm install v10.14.2 Downloading and installing node v10.14.2... Downloading https://nodejs.org/dist/v10.14.2/node-v10.14.2-linux-x64.tar.xz... ###################################################################### 100.0%Computing checksum with sha256sum Checksums matched! Now using node v10.14.2 (npm v6.4.1) Creating default alias: default -> v10.14.2$ nvm use v10.14.2 Now using node v10.14.2 (npm v6.4.1)$ node --version v10.14.2指定したバージョンのNode.jsがインストールされていることを確認しました。
3.REPLを使ってみる
Node.js版のコンソールだと思えばいいと思います。
(PythonのPythonコンソール的な感じ)
Ctrl
+c
二回でREPLを終了できます。REPL$ node > 1+1 2 > (To exit, press ^C again or type .exit) >4.ファイルを実行してみる
プログラムの書き方は、
JavaScript
と同じかきかたをすればいいと思います。
今回単純な足し算プログラムを書いて動かします。ソースコード
sum.js'use strict'; function aAdd(num) { var res = 0; num[0] = 0; num[1] = 0; for (let s of num) { res += parseInt(s); } console.log(res); } aAdd(process.argv);実行結果
wsl$ node sum.js 1 2 3 4 10 $ node sum.js 0雑に解説
これは、引数の総和をとるプログラムでした。
process.argv
に命令がリストとして入っています。
$ node sum.js 1 1 1 2 3
を実行したとすると、
リストの中身は、[ '/home/yosse95ai/.nvm/versions/node/v10.14.2/bin/node', '/home/yosse95ai/sum.js', '1', '1', '1', '2', '3' ]
といった具合になっています。
だから、
num[0] = 0; num[1] = 0;の部分で数字以外の文字列部分(パス部分)を、
0
に置き換えてます。
多分もっとクレバーなやり方があると思います。おわりに
今回は、かなり初歩的な解説でした。
まだ自分が初心者なので、頭の整理を兼ねて書きました。
おそらく拙い文章でしたが、お付き合いいただきありがとうございました。
さよなら参考
関連記事
~Coming soon~
- 投稿日:2020-04-21T22:29:32+09:00
Linux環境におけるNode.jsの導入から利用
はじめに
投稿者の備忘録としての活用が主です。
Webの作成において役に立つNode.jsを導入します。環境
wsl(Windows Subsystem for Linux)
にインストールします。Editor: VSCode Shell: bash version 4.4.20 Ubuntu: 18.04.4 LTS目次
1.nvmの導入
Node.jsのバージョンを管理するためにまず
nvm
を導入します。
現在利用しているNode.jsのバージョンの把握
別バージョンへの切り替えなどを行えます。wsl$ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.34.0/install.sh | bash終了したら、
wsl$ source ~/.bashrcで、
.bashrc
の内容を読み込んでおきます。wsl$ nvm Node Version Manager Note: <version> refers to any version-like string nvm understands. This includes: - full or partial version numbers, starting with an optional "v" (0.10, v0.1.2, v1) - default (built-in) aliases: node, stable, unstable, iojs, system - custom aliases you define with `nvm alias foo` 以下略。。。となれば、インストールが成功しています。
2.Node.jsの導入
今回、Ver. 10.14.2 のNode.jsをインストールしました。
wsl$ nvm install v10.14.2Downloading and installing node v10.14.2... Downloading https://nodejs.org/dist/v10.14.2/node-v10.14.2-linux-x64.tar.xz... ###################################################################### 100.0%Computing checksum with sha256sum Checksums matched! Now using node v10.14.2 (npm v6.4.1) Creating default alias: default -> v10.14.2$ nvm use v10.14.2 Now using node v10.14.2 (npm v6.4.1)$ node --version v10.14.2指定したバージョンのNode.jsがインストールされていることを確認しました。
3.REPLを使ってみる
Node.js版のコンソールだと思えばいいと思います。
(PythonのPythonコンソール的な感じ)
Ctrl
+c
二回でREPLを終了できます。REPL$ node > 1+1 2 > (To exit, press ^C again or type .exit) >4.ファイルを実行してみる
プログラムの書き方は、
JavaScript
と同じかきかたをすればいいと思います。
今回単純な足し算プログラムを書いて動かします。ソースコード
sum.js'use strict'; function aAdd(num) { var res = 0; num[0] = 0; num[1] = 0; for (let s of num) { res += parseInt(s); } console.log(res); } aAdd(process.argv);実行結果
wsl$ node sum.js 1 2 3 4 10 $ node sum.js 0雑に解説
これは、引数の総和をとるプログラムでした。
process.argv
に命令がリストとして入っています。
$ node sum.js 1 1 1 2 3
を実行したとすると、
リストの中身は、[ '/home/yosse95ai/.nvm/versions/node/v10.14.2/bin/node', '/home/yosse95ai/sum.js', '1', '1', '1', '2', '3' ]
といった具合になっています。
だから、
num[0] = 0; num[1] = 0;の部分で数字以外の文字列部分(パス部分)を、
0
に置き換えてます。
多分もっとクレバーなやり方があると思います。おわりに
今回は、かなり初歩的な解説でした。
まだ自分が初心者なので、頭の整理を兼ねて書きました。
おそらく拙い文章でしたが、お付き合いいただきありがとうございました。
さよなら関連記事
参考
- 投稿日:2020-04-21T16:58:47+09:00
Linuxコマンドをコンパイルしてみる(クロスコンパイルの練習)
Linuxコマンドをコンパイルしてみる(クロスコンパイルの練習)
クロスコンパイルの練習例として、MIPS CPUのLinux上で動作するプログラムをUbuntu上で作成してみます。
ハンズオン等だと、いつもなら使えるLinuxコマンドが組み込み機器では無いことが多く、困ってしまう場合もあります。
今回は、そのような場合を想定した例になります。ご注意 :
1)この手順での動作保証は一切しません、ご了承ください。
実行する組み込み用ハードウェア、それぞれに適した環境が必要になるため。2)こちらの記事で紹介した環境を利用しますので、記事を見て環境を用意ください。
Mac上で動作するVirtualBoxのUbuntu上でGccクロスコンパイル環境をDockerで構築Dcckerの起動
$ sudo docker start gcc-ubuntu $ sudo docker exec -it gcc-ubuntu /bin/bashLinuxコマンドのソースコード
今回はsleepenhコマンドを例とします。
探しやすかったので、Debianから持ってきます。これで良いのかはわかりません!参考:コマンドが含まるパッケージを探す方法(Ubuntuでの例)
コマンドが【有る】マシンで実行してください。root@af48c1a975a2:~# which bash # コマンドの場所を確認 /bin/bash root@af48c1a975a2:~# dpkg --search /bin/bash # dpkgで調べられる bash: /bin/bash「bash」パッケージに/bin/bashコマンドが含まれることがわかります。
ソースコードを入手する
パッケージをソースコードで入手
root@af48c1a975a2:~/dev# mkdir sleepenh # 作業ディレクトリを作成 <docker環境でのファイルの取得や転送方法は、各自環境に合わせて実施ください 省略> sleepenh-master.zip を手に入れた root@af48c1a975a2:~/dev/sleepenh# unzip sleepenh-master.zip root@af48c1a975a2:~/dev/sleepenh# cd sleepenh-masterコンパイルする
Makefaileのままコンパイルするとクロスコンパイルにならないので、Makefileを修正します。
root@af48c1a975a2:~/dev/sleepenh/sleepenh-master# vi Makefile修正箇所は 「CC =」の場所、gcc を mips-linux-gnu-gcc に変更します。
これで、PCでMIPS用のsleepenhをコンパイルできます。(クロスコンパイル)Q ?= @ ifneq ($(Q),@) Q := endif CC = mips-linux-gnu-gcc CFLAGS = -std=gnu11 -Wall -Wextra -O2 $(EXTRA_CFLAGS) << 以下省略 >>makeします
root@af48c1a975a2:~/dev/sleepenh/sleepenh-master# make /bin/sh: 1: git: not found mips-linux-gnu-gcc -std=gnu11 -Wall -Wextra -O2 -DVCSVERSION='' sleepenh.c -o sleepenh gzip -9 < sleepenh.1 > sleepenh.1.gz root@af48c1a975a2:~/dev/sleepenh/sleepenh-master# ls Makefile Makefile.org changelog debian sleepenh sleepenh.1 sleepenh.1.gz sleepenh.csleepenh がコンパイルできました。
ダイナミックリンク と スタティックリンク
プログラムを簡単に書くためには、用意されているライブラリを活用することが大事です。
コマンド等でも多く使われています。
このとき、PCやサーバであれば、ライブラリの不具合があればライブラリだけ更新されるのが便利です。
そのため、プログラムからは、動的にライブラリを参照する(ダイナミック リンク)ようにコンパイルするのが普通です。ただ、組み込み環境などでは、ライブラリが無い、バージョンが揃っていないなど様々な環境でも動作すると便利です。
そのため、参照するライブラリを固定してしまうために、実行バイナリにライブラリを組み込んだ形(スタティック リンク)でコンパイルし、外部環境に左右されないようにすることがあります。gcc に -static オプションを付加してコンパイルすると「スタティック リンク」、付加しないと「ダイナミック リンク」になります。
作成できたファイルの情報を確認
実際に作成できたsleepenhコマンドを確認してみます。
root@af48c1a975a2:~/dev/sleepenh/sleepenh-master# file sleepenh sleepenh: ELF 32-bit MSB executable, MIPS, MIPS-I version 1 (SYSV), dynamically linked, interpreter /lib/ld., for GNU/Linux 3.2.0, with debug_info, not strippedMIPS用( MIPS, MIPS-I version 1 (SYSV) )で、ダイナミック リンク( dynamically linked )の実行ファイルができたことがわかります。
ダイナミック リンクですから、動作環境に依存してしまいます。
場合によっては参照するライブラリが無い可能性もあります。スタティック リンクでコンパイルする
そこで、スタティック リンクでコンパイルしてみます。
後で比較できるように、ディレクトリごとコピーして、準備します。
root@af48c1a975a2:~/dev/sleepenh# cd ~/dev/sleepenh/ root@af48c1a975a2:~/dev/sleepenh# cp -r sleepenh-static sleepenh-static root@af48c1a975a2:~/dev/sleepenh# cd sleepenh-static root@af48c1a975a2:~/dev/sleepenh/sleepenh-static# make clean #掃除スタティック リンクでコンパイルするため、Makefileを修正します。
root@af48c1a975a2:~/dev/sleepenh/sleepenh-static# vi Makefile修正箇所は 「CFLAGS =」の場所に「 -static 」を追加します。
これで、PCでMIPS用のsleepenhをスタティック リンクでコンパイルできます。(クロスコンパイル)変更前CFLAGS = -std=gnu11 -Wall -Wextra -O2 $(EXTRA_CFLAGS)変更後CFLAGS = -std=gnu11 -Wall -static -Wextra -O2 $(EXTRA_CFLAGS)変更後Q ?= @ ifneq ($(Q),@) Q := endif CC = mips-linux-gnu-gcc CFLAGS = -std=gnu11 -Wall -static -Wextra -O2 $(EXTRA_CFLAGS) << 以下省略 >>makeします
root@af48c1a975a2:~/dev/sleepenh/sleepenh-static# make /bin/sh: 1: git: not found mips-linux-gnu-gcc -std=gnu11 -Wall -static -Wextra -O2 -DVCSVERSION='' sleepenh.c -o sleepenh gzip -9 < sleepenh.1 > sleepenh.1.gz root@af48c1a975a2:~/dev/sleepenh/sleepenh-master# ls Makefile Makefile.org changelog debian sleepenh sleepenh.1 sleepenh.1.gz sleepenh.csleepenh がコンパイルできました。
作成できたファイルの情報を確認(スタティック リンクになったかどうか)
実際に作成できたsleepenhコマンドを確認してみます。
sleepenh: ELF 32-bit MSB executable, MIPS, MIPS-I version 1 (SYSV), statically linked, for GNU/Linux 3.2.0, with debug_info, not strippedMIPS用( MIPS, MIPS-I version 1 (SYSV) )で、スタティック リンク( statically linked )の実行ファイルができたことがわかります。
スタティック リンクであれば、動作環境に依存せず動作します。
場合によっては参照するライブラリが無い可能性もありますが、問題ありません。このスタティック リンクでコンパイルした方を、MIPS Linuxの装置に持っていき、動作試験をしてみてください。
- 投稿日:2020-04-21T16:10:48+09:00
Ubuntu20.04 LTS インストール方法(外付けデバイス対応)
本記事では,内蔵HDD/SSDにWindows10が元々インストールされている環境下で,外付けデバイスにUbuntu20.04をインストールする手順を説明します.
ノートPCなど,一時的に内蔵HDD/SSDを取り出すのが難しい場合に有効です.
もし,一時的に取り出すことが可能であれば,インストール時には取り出しておきましょう.はじめに
用意するもの
(1) PC(Windows10インストール済みの内蔵HDD/SSD搭載)
(2) USBメモリ(4GB以上)
→これがライブUSB(Ubuntuのインストーラ)になる
(3) 外付けHDD/SSD/USBメモリ(64GB以上)
→ここにUbuntuがインストールされる
(4) 外付けHDD/SSD/USBメモリ/SDカード等(容量任意)
→バックアップ用(1)~(3)→必須,(4)→任意
インストール時の注意点
Ubuntuをインストールする際に手順を間違えた場合,Windows10のデータが消える可能性があります.
一つ一つの手順を間違えないように実行してください.
(赤字で書いてある場所は,特に注意してください.)
万が一のために,別のデバイスにバックアップを取っておくことをお勧めします.また,以下のPCではUbuntuが起動しないことを確認しています.
・Microsoft Surface(0)バックアップ
Ubuntuのインストール時にWindows10のデータが一度消去されてしまった場合,そのデータを復旧することは困難です.
そうならないために,データをバックアップしておくと良いです.
特に,初めてUbuntuをインストールする方は,データをバックアップしておくことを強くお勧めします.以下に詳しい手順を記載します.
まず,PCに(4)のバックアップ用の外付けデバイスを挿します.
次に,スタートボタンをクリックし,「コントロールパネル」と入力し,検索結果の「コントロール パネル」をクリックします.
「バックアップと復元(Windows 7)」をクリックします.
「Windows 7」と書いてありますが,「Windows 10」のために使うことも可能なので問題ありません.
バックアップ先のデバイスとして(4)のデバイスを選択し,「今すぐバックアップ」をクリックします.
これで,データのバックアップは完了です.
(1)ライブUSB(インストーラ)の作成
PCでUbuntuを始めるためには,デバイスにUbuntuをインストールしておく必要があります.
また,Ubuntuをインストールするためには,専用のインストーラが必要になります.今回は,ISOファイルをダウンロードし,これをUSBメモリに書き込むことによって,ライブUSB(Ubuntuのインストーラ)を作成します.
それでは,いつものようにWindows10を起動します.
以下のサイトにアクセスし,「ubuntu-20.04.x-desktop-amd64.iso」をダウンロードします.
http://releases.ubuntu.com/20.04/
ここで,ダウンロードしたISOファイルをUSBメモリに書き込む際には専用のソフトウェアを使います.
以下のサイトにアクセスし,「Rufus」をダウンロードします.
https://rufus.ie/
ダウンロードできたら,「rufus-x.x.exe」を実行します.
用意するもの(2)のUSBメモリをPCに挿してください.
以下の「デバイス」を(2)のUSBメモリに設定します.
ライブUSBにすると,USBメモリに保存されているデータが全て消えてしまいます.
データがある場合は他のデバイスに移しておいてください.「選択」をクリックし,ダウンロードしたISOファイルを選択します.
入力に間違いがないことを確認できたら,「スタート」をクリックします.
「ISO イメージモードで書き込む」にチェックを入れ,「OK」をクリックします.
ISOファイルをコピーしている最中は以下のような感じになります.
状態が「準備完了」になった場合,ISOファイルの書き込みは終了です.
「閉じる」をクリックして終了します.
(2)Ubuntuのインストール
ライブUSBの起動
それでは,以下のいずれかの方法で,先程作成したUbuntuのインストーラを起動します.
1.「スタートボタン」→「シャットダウンのボタン」→「Shift」+「再起動」→「デバイスの使用」→ライブUSBを選択
2.「スタートボタン」→「シャットダウンのボタン」→「Shift」+「再起動」→「トラブルシューティング」→「詳細オプション」→「UEFI ファームウェアの設定」→「再起動」→UEFIまたはBIOS起動→ライブUSBを選択(またはブート順の並び替え)
3. シャットダウン→電源ボタンタッチ→「F2」連打→UEFIまたはBIOS起動→ライブUSBを選択(またはブート順の並び替え)2または3の方法で起動する場合は,以下のサイトが参考になります.
https://freesoft.tvbok.com/tips/peripherals/bios_boot_fn-key_list.html
https://www.pc-master.jp/mainte/k-jyuni.htmlデバイスの確認・初期化
Ubuntuのインストーラを起動し,以下のような画面が出てきたら,左下の「アプリケーションボタン」をクリックします.
検索ワードに「disks」と入力し,「Disks」をクリックします.
そうすると,現在PCに認識されているデバイスが表示されます.
それでは,用意するもの(3)のHDD/SSD/USBメモリをPCに挿してください.
ここで,左の欄に新しく追加されたデバイスが(3)のデバイスになります.
新しく追加されたデバイスを選択し,「Device」の右に書いてある文字をメモしておきましょう.私の場合は,上から一番目がWindows10がインストールされているデバイス(/dev/sda),二番目が(2)のライブUSB(/dev/sdb),三番目が(3)のデバイス(/dev/sdc)になっていました.
もし,(3)のデバイスにパーティションが割り当てられている場合,そこの「ー」ボタンを押して削除してください.
注意:削除するデバイスが正しいかどうかを確認してから実行してください.
インストールの設定
それでは,インストールを開始します.
「Install Ubuntu 20.04 LTS」を実行してください.
・言語の設定
・キーボードレイアウトの設定
・インターネット接続の設定
もし,インターネットが接続できる環境ならば接続しておきましょう.
・アップデートと他のソフトウェアの設定
アップデートのオプションはおまかせします.
基本的には,以下のように設定すれば問題ないです.
設定できたら「続ける」をクリックします.
・インストールの種類の設定
インストールの種類は,「それ以外」をクリックしてください.
注意:上2つを選ぶと,Windows10のデータが削除される可能性があります.
・パーティションの設定
先程メモしておいたデバイスの名前(例なら「/dev/sdc」)のすぐ下にある「空き領域」を選択し,「+」をクリックします.
注意:PCによって認識の仕方が違うので,必ずしも例とデバイスが同じとは限りません.
以下のように,「EFIシステムパーティション」を選択し,サイズを「512MB」にした後「OK」をクリックします.
EFIシステムパーティションとは,OSを起動するためのブートローダが管理されている場所です.
先程と同じデバイスの名前の下にある「空き領域」を選択し,「+」をクリックします.
以下のように,「スワップ領域」を選択し,サイズを「8000MB」にした後「OK」をクリックします.
スワップ領域とは,メインメモリ(RAM)の容量がオーバーフローしそうなときにデータを一時的に避難しておく場所です.
もし,メインメモリ(RAM)が4GBしかなくても,スワップ領域が8GBあれば,まるでメインメモリが12GBであるかのように使えます.
先程と同じデバイスの名前の下にある「空き領域」を選択し,「+」をクリックします.
以下のように,「ext4ジャーナリングファイルシステム」を選択し,マウントポイントを「/」,残り全てのサイズを割り当てた後「OK」をクリックします.
このパーティションにUbuntuを構成するファイルがインストールされます.
インストール後に保存するデータの場所も,基本的にこのパーティションに相当します.
「ブートローダをインストールするデバイス」を(3)のデバイス(例では「/dev/sdc」)の場所に設定します.
本来ならばこのデバイスにブートローダがインストールされてほしいですが,もしされない場合はインストール後に後処理を実行してください.(後で記載します.)
(インストールされるデバイスが「/dev/sda」ではない場合にこのような不具合が発生するようです.)
(3)のデバイスの「ext4ジャーナリングファイルシステム」(例では「/dev/sdc3」)のフォーマットにチェックがついていることを確認し,インストールをクリックします.
注意:今一度,(3)のデバイスが選択されているかどうか確認してください.
(3)のデバイスが選択されていることを確認できたら,「続ける」をクリックします.
・タイムゾーンの設定
日本在住ならば「Tokyo」と入力し,「続ける」をクリックします.
・アカウントの設定
名前,パスワードを設定した後,「続ける」をクリックします.
このパスワードはUbuntuのログイン時に必要なので覚えておいてください.
インストール中にするべきこと
下の画面が出てきたら,Ubuntuのインストールが開始されます.
・自動シャットダウンの防止
インストールする際にPCを放置する場合は以下の設定をしましょう.
まず,アプリケーションボタンをクリックし,検索ワードに「settings」と入力し,「Settings」をクリックします.
「Power」を選択し,以下のように設定します.
これで,インストール中に,勝手に画面が暗くなりシャットダウンするということが無くなります.
・ブートローダのインストール先の確認
アプリケーションボタンから「Disks」を開いてください.
ここで,(3)のデバイスの「EFIシステムパーティション」がマウントされていない(三角マークがついていない)場合は,このデバイスにブートローダがインストールされていません.
おそらく,Windows10がインストールされているデバイスの「EFIシステムパーティション」にブートローダがインストールされています.
つまり,Ubuntuを起動する際には,(3)のデバイスだけではなく,Windows10がインストールされているデバイスの2つが必要である状態になっています.
もし,(3)のデバイスの「EFIシステムパーティション」がマウントされているならば必要ありませんが,そうでない場合は後処理が必要になります.
後処理は,本記事の最後(4)にて記載します.・インストール完了の確認
以下のウィンドウが表示された場合,インストールは完了です.
「今すぐ再起動する」をクリックします.
再起動してログインします.
この時点で,PCからライブUSBを外しても構いません.
Windows10が起動してしまった場合は,ライブUSBを起動したときと似たような感じで,(3)のデバイスに入っているUbuntuを起動してください.(3)インストール後のセットアップ
Ubuntuにログインして少し時間が立つと以下のような画面が出てくるので,「今すぐインストールする」をクリックします.
(出てこない場合は無視してください.)
インストールが完了すると以下のような画面が出てくるので,「すぐに再起動」をクリックします.
日本語入力の有効化
ホームディレクトリの言語「日本語→英語」の設定
まず,「Ctrl」+「Alt」+「T」でターミナルを開きます.
以下のコマンド(「$ 」以降の文字列)を入力し(範囲選択してドラッグ&ドロップ,またはコピーして「Ctrl」+「Shift」+「V」でも可),エンターキーを押して実行します.
$ LANG=C xdg-user-dirs-gtk-update次に,「Dont's ask me this again」にチェックを入れ,「Update Names」をクリックします.
CapsLockキーの設定
以下のコマンドを実行することによって,「CapsLock」キーを「Ctrl」キーに変更することが可能です.
$ gsettings set org.gnome.desktop.input-sources xkb-options "['ctrl:nocaps']"Google Chromeのインストール
以下のコマンドを実行することによって,「Google Chrome」をインストールします.
パスワードの入力が要求された場合は,インストール時に設定したパスワードを入力してエンターキーを押してください.$ wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb $ sudo dpkg -i google-chrome-stable_current_amd64.deb $ rm google-chrome-stable_current_amd64.debVimのインストール
以下のコマンドを実行することによって,高機能なテキストエディタである「vim」をインストールします.
$ sudo apt install vimパッケージの更新
以下のコマンドを実行することによって,「update」でパッケージの一覧を更新し,「upgrade」でパッケージの一覧に基づきパッケージのバージョンを更新します.
定期的に,Ubuntuを起動した直後に実行すると良いと思います.$ sudo apt update $ sudo apt upgrade(4)インストール後の後処理
もし,(3)のデバイスの「EFIシステムパーティション」にブートローダがインストールされなかった場合は,以下の後処理を実行してください.
後処理をしないと,インストールに使用していないPCで起動することができません.つまり,この処理によって,別のPCでも(3)のデバイスさえあれば,Ubuntuを起動することができるようになります.
※Windows10起動時に「BitLocker」が出てくる場合,この後処理によって元通りになることを確認しています.ブートローダの再インストール
(3)のデバイスの「EFIシステムパーティション」にブートローダを再インストールします.
「Ctrl」+「Alt」+「T」でターミナルを開き,以下のコマンドを実行します.
PPAを追加する際に確認画面が表示されるので,エンターキーを押します.$ sudo add-apt-repository ppa:yannubuntu/boot-repair && sudo apt update Simple tool to repair frequent boot problems. Website: https://sourceforge.net/p/boot-repair/home 詳しい情報: https://launchpad.net/~yannubuntu/+archive/ubuntu/boot-repair [ENTER] を押すと続行します。Ctrl-c で追加をキャンセルできます。アップデートが終了したら,以下のコマンドを実行して「Boot Repair」をインストールします.
$ sudo apt install -y boot-repair && (boot-repair &)インストールが完了したら,以下の「おすすめの修復」をクリックします.
(3)のデバイスの「EFIシステムパーティション」にブートローダがインストールされました.
つまり,この時点で,基本的にどのPCでも(3)のデバイスさえあれば,Ubuntuを起動することができます.旧ブートローダの削除
(3)のデバイスに新しいブートローダをインストールすることはできました.
しかし,Windows10には,まだUbuntuの旧ブートローダが残っています.
そこで,Windows10のデバイスに入っているUbuntuの旧ブートローダを削除します.それでは,PCから(3)のデバイスを外し,Windows10を起動してください.
「grub」の画面が出てきたら,「exit」を実行してください.Windows10の画面が立ち上がったら,スタートボタンをクリックし,「コマンドプロンプト」と入力します.
検索結果に「コマンド プロンプト」が出てきたら,それを右クリックし,「管理者として実行」をクリックします.
コマンドプロンプトが立ち上がったら,以下のコマンドを実行します.
C:\WINDOWS\system32>cd c:\c:\>bcdedit /enum firmware ファームウェア アプリケーション (101fffff -------------------------------- identifier {d626dc8a-3f6d-11ea-ab4f-806e6f6e6963} device partition=\Device\HarddiskVolume1 path \EFI\UBUNTU\SHIMX64.EFI description ubuntuここでdescriptionが「ubuntu」になっているファームウェアに注目し,identifierの右側に書いてある文字を以下の"identifier"に当てはめてコマンドを実行します.
c:\>bcdedit /delete "identifier" ~~~~~例~~~~~ c:\>bcdedit /delete {d626dc8a-3f6d-11ea-ab4f-806e6f6e6963} この操作を正しく終了しました。 ~~~~~~~~~~~再度,以下のコマンドを実行して,descriptionが「ubuntu」のファームウェアが削除されたことを確認します.
c:\>bcdedit /enum firmware次に,「diskpart」を実行して,Windows10がインストールされているデバイスのEFIシステムパーティションをマウントします.
c:\>diskpartDISKPART> list disk ディスク 状態 サイズ 空き ダイナ GPT ### ミック ------------ ------------- ------- ------- --- --- ディスク 0 オンライン 476 GB 0 B *「sel disk」を実行する際は,Windows10のディスクの番号を入力してください.
DISKPART> sel disk 0 ディスク 0 が選択されました。DISKPART> list vol Volume ### Ltr Label Fs Type Size Status Info ---------- --- ----------- ---- ---------- ------- --------- -------- Volume 0 C Windows NTFS Partition 475 GB 正常 ブート Volume 1 Windows RE NTFS Partition 990 MB 正常 Volume 2 SYSTEM FAT32 Partition 260 MB 正常 システム「sel vol」を実行する際は,Infoがシステムとなっている部分の番号を入力してください.
DISKPART> sel vol 2 ボリューム 2 が選択されました。DISKPART> assign letter=Z DiskPart はドライブ文字またはマウント ポイントを正常に割り当てました。DISKPART> exit最後に,以下のコマンドを順に実行することで,Ubuntuの旧ブートローダを完全に削除します.
c:\>cd /d Z:Z:\>dir ドライブ Z のボリューム ラベルは SYSTEM です ボリューム シリアル番号は EC96-1E84 です Z:\ のディレクトリ 2020/01/25 11:02 <DIR> EFI 2019/04/23 14:20 <DIR> boot-repair 0 個のファイル 0 バイト 2 個のディレクトリ 232,128,512 バイトの空き領域Z:\>cd EFIZ:\EFI>dir ドライブ Z のボリューム ラベルは SYSTEM です ボリューム シリアル番号は EC96-1E84 です Z:\EFI のディレクトリ 2018/11/12 13:38 <DIR> . 2018/11/12 13:38 <DIR> .. 2018/11/12 13:38 <DIR> Microsoft 2019/05/06 17:20 <DIR> Boot 2020/01/25 11:08 <DIR> ubuntu 0 個のファイル 0 バイト 5 個のディレクトリ 232,128,512 バイトの空き領域Z:\EFI>rmdir /S ubuntu ubuntu、よろしいですか (Y/N)? Y以上で,インストール後の後処理は終了です.
おわりに
インストールの手順および後処理の説明は以上です.
これで,Ubuntuがインストールされているデバイスさえ持っていれば,どのPCでも基本的にUbuntuを起動することができます.Ubuntuは非常に開発に向いているOSなので,うまく使いこなせば開発もはかどると思います.
それでは,よい開発生活を!
参考URL
- 投稿日:2020-04-21T15:13:05+09:00
CentOS 8.1 を Virtual Box にインストールする手順
前提条件
- VirtualBox6.0をインストール済み
CentOS-8.1.1911-x86_64-dvd1.iso
をダウンロード済み- ホストOS:Windows7(固定IPアドレス:192.169.0.2/24)
- ゲストOS:CentOS-8.1.1911(固定IPアドレス:192.168.0.10/24)
インストール手順
1. VirtualBoxを起動
VirtualBoxの起動のショートカットをダブルクリックし、VirtualBoxを起動します。
2. 仮想マシンの新規作成
Oracle VM VirtualBox マネージャーで「新規」をクリックします。
3. 仮想マシンの作成
以下を入力して、「作成」ボタンをクリックします。
項目 設定内容 名前 CentOS-8.1.1911 マシンフォルダー C:\DK\VirtualBox タイプ Linux バージョン Red-Hat (64bit) メモリサイズ 2048MB ハードディスク 仮想ハードディスクを作成する 4. 仮想ハードディスクの作成
以下を入力して、「作成」ボタンをクリックします。
項目 設定内容 ファイルの場所 C:/DK/VirtualBox/CentOS-8.1.1911/CentOS-8.1.1911.vdi ファイルサイズ 16GB ハードディスクのファイルタイプ VDI (VirtualBox Disk Image) 物理ファイルにあるファイルディスクのストレージ 固定サイズ ※「ガイド付きモード」ボタンを押すと、各項目の設定の意味が書いてあり、それに従い設定できます。
仮想マシンを作成が開始されます。
(そこそこ時間がかかります。)5. 仮想マシン作成完了
「CentOS-8.1.1911」が追加されます。
6. 仮想マシンの設定
「CentOS-8.1.1911」が選択されている状態で、「設定」ボタンをクリックします。
7. 仮想マシン(システム)の設定
「システム」を選択し、「起動順序」が
(1)「フロッピー」
(2)「光学」
(3)「ハードディスク」
の順となっているのを
(1)「フロッピー」
(2)「ハードディスク」
(3)「光学」
の順に変更する。8. 仮想マシン(ストレージ)の設定
DVDイメージの
CentOS-8.1.1911-x86_64-dvd1.iso
を起動ディスクとして設定します。「ストレージ」を選択し、「コントローラー:IDE」の「光学ドライブ追加」のアイコンをクリックします。
「ディスクを選択」ボタンをクリックします。
メディアで「追加」ボタンをクリックします。
ダウンロードしている
CentOS-8.1.1911-x86_64-dvd1.iso
を選択します。
CentOS-8.1.1911-x86_64-dvd1.iso
が追加されていることを確認し、「選択」をクリックします。コントローラー:IDEに
CentOS-8.1.1911-x86_64-dvd1.iso
が追加されていることを確認します。※コントローラー:IDEに
CentOS-8.1.1911-x86_64-dvd1.iso
を追加することで、起動時にインストールメディアとしてCentOS-8.1.1911-x86_64-dvd1.iso
が起動されます。9. 仮想マシン(ネットワーク)の設定
「ネットワーク」を選択し、アダプターに「ブリッジアダプター」を選択し、「OK」ボタンをクリックします。
10. 作成した仮想マシンを起動
「CentOS-8.1.1911」が選択されている状態で、「起動」ボタンをクリックします。
(起動時にインストールメディアとしてCentOS-8.1.1911-x86_64-dvd1.iso
が起動されます。)11. メニュー選択
「Install CentOS Linux 8.0.1905」を選択し、「Enter」キーを押下します。
12. インストール時に使用する言語を選択
インストール時に使用する言語として「日本語」を選択し「続行」ボタンをクリックします。
13. キーボードの設定
「キーボード」をクリックします。
日本語になっていることを確認し、「完了」ボタンをクリックします。
14. 言語サポートの設定
「言語サポート」をクリックします。
日本語が選択されていることを確認し、「完了」ボタンをクリックします。
15. インストールソースの設定
「インストールソース」をクリックします。
「自動検出されたインストールメディア」がチェックされていることを確認し、「完了」ボタンをクリックします。
16. ソフトウェアの選択の設定
「ソフトウェアの選択」をクリックします。
「ベース環境」、「選択した環境のその他のソフトウェア」を選択し完了」ボタンをクリックします。
(ここではベース環境に「サーバー(GUI使用)」を選択、選択した環境のその他のソフトウェアに「FTPサーバー」、「開発ツール」及び「グラフィカル管理ツール」を選択し、インストールします。)17. インストール先の設定
「インストール先」をクリックします。
インストール先の内容を確認し「完了」ボタンをクリックします。
(ここではストレージの設定として「自動構成」を選択していますが、「カスタム」を選択してパーティションを設定することも可能です。)18. KDUMPの設定
「KDUMP」をクリックします。
「kdump を有効にする」のチェックを外し「完了」ボタンをクリックします。
(今回はお試し用なのでチェックを外しましたが、不具合が発生した場合にカーネルのダンプを参照したい場合はチェックを入れます。)19. ネットワークとホスト名の設定
「ネットワークとホスト名」をクリックします。
Ethernetを「オン」にし、「設定」ボタンをクリックします。
「IPv4 設定」タブを開き、方式に「手動」を選択し、アドレス、ネットマスク、ゲートウェイ、及びDNSサーバを入力し、「保存」ボタンをクリックします。DNSサーバを複数設定する場合、
,
で区切って入力します。「ホスト名」を入力し「適用」ボタンをクリック後、「完了」ボタンをクリックします。
20. 日付と時刻の設定
「日付と時刻」をクリックします。
「地域」、「都市」を選択し、「ネットワーク時刻」を「オン」にし、「設定」ボタンをクリックします。
(ここでは、地域に「アジア」、都市に「東京」を設定しています。)NTPサーバを設定後、「OK」ボタンをクリックします。
ここでは以下の日本のNTPサーバを設定しています。
- ntp1.jst.mfeed.ad.jp
- ntp2.jst.mfeed.ad.jp
- ntp3.jst.mfeed.ad.jp
「完了」ボタンをクリックします。
21. インストールの開始
「インストールの開始」ボタンをクリックします。
22. root パスワードの設定
「root パスワード」をクリックします。
root のパスワードを入力し「完了」ボタンをクリックします。
「ユーザの作成」も実施したい場合、「ユーザの作成」をクリックし、ユーザ情報を入力します。
インストールが続行されます。
23. インストール完了後再起動
インストール完了後、「再起動」ボタンをクリックします。
起動時にエラーが出ていることが確認できます。このエラーは後で対応します。
24. ライセンス同意
「License Information」をクリックします。
内容を確認し、「ライセンス契約に同意します。」をチェックし、「完了」ボタンをクリックします。
CentOS8 Linux EULA CentOS 8 Linux comes with no guarantees or warranties of any sorts, either written or implied. The Distribution is released as GPLv2, Individual packages in the distribution come with their own licences. A copy of the GPLv2 licences is included with the distrobution media.CentOS8 Linux EULA CentOS 8 Linuxには、書面または黙示を問わず、いかなる種類の保証もありません。 ディストリビューションはGPLv2としてリリースされ、ディストリビューション内の個々のパッケージには独自のライセンスが付属しています。 GPLv2ライセンスのコピーは配布メディアに含まれています。「設定の完了」ボタンをクリックします。
25. root でログインして確認
「アカウントが見つかりませんか?」をクリックします。
ユーザー名に「root」を入力し、「次へ」ボタンをクリックします。
パスワードを入力し、「サインイン」ボタンをクリックします。
「ようこそ」の画面で「日本語」がチェックされていることを確認し、「次へ」ボタンをクリックします。
「入力」の画面で「日本語」がチェックされていることを確認し、「次へ」ボタンをクリックします。
「プライバシー」の画面で「位置情報サービス」を「オフ」に設定し、「次へ」ボタンをクリックします。
「オンラインアカウント」の画面で「スキップ」ボタンをクリックします。
「準備完了」の画面で「CentOS Linux を使い始める」ボタンをクリックします。
「初めて使う方へ」の画面が表示されるので「×」ボタンをクリックして閉じます。
「▼」をクリックし、「電源」ボタンをクリックします。
「電源オフ」をクリックします。
26. 起動時エラーの解消
「23. インストール完了後再起動」で発生していた起動時のエラーを解消します。
Oracle VM VirtualBox マネージャーで「CentOS-8.1.1911」が選択されている状態で、「設定」ボタンをクリックします。
「ディスプレイ」を選択後、グラフィックコントローラーに「VboxVGA」を選択し、「OK」ボタンをクリックします。
- ただしインストール時にグラフィックコントローラーに「VboxVGA」を選択すると、インストール完了時に画面が固まってしまいます。インストール時にはグラフィックコントローラーにはデフォルトの「VMSVGA」を選択した方がよいと思われます。
Oracle VM VirtualBox マネージャーで「CentOS-8.1.1911」が選択されている状態で、「起動」ボタンをクリックします。
エラーが発生せずに起動されることを確認します。
以上
- 投稿日:2020-04-21T14:59:01+09:00
基本的なコマンド
はじめに
コマンドは、フロントエンドやバックエンドをされる方もおそらく避けては通れないだろう。
今回は、特に押さえておきたいコマンドを幾つか紹介したいと思う。lsコマンド
lsコマンドは、ファイルやコマンドの一覧を確認するコマンドだ。list segmentsの略で、それぞれの頭文字のlとsを取って、lsとなっている。
Code$ls上の画像よりlsと打つだけで、ファイルやディレクトリ(一般的にはフォルダ)の一覧を表示することができる。
cdコマンド
cdコマンドは、今いるディレクトリから移動するコマンドだ。作業しているディレクトリを変更する。change directoryの略で、それぞれのcとdの頭文字を取ってcdとなっている。
Code$cd ディレクトリ名もし、cdの後に何もなしで実行すると、ホームディレクトリへ移動することとなる。環境構築する際に、注意しておきたいところ。
pwdコマンド
pwdコマンドは、今いるディレクトリを絶対パス(フルパス)で表示してくれるコマンド。
Code$pwdHTMLファイルにてjsファイルやCSSファイルの読み込みする時に使う。
まとめ
おおよそ基本的なコマンドを整理する形で記してみた。ただ、ここは補足が必要だと感じられた際是非コメントをいただけるとありがたい。
そこから所々修正する予定。
- 投稿日:2020-04-21T14:05:01+09:00
ShellScript 備忘録
はじめに
こちらではshellscriptの基本的操作から紹介したいと思います。
備忘録も兼ねているので少しずつ増やしていきたいと思います。
基本
まずは基本的なところから
よだんですが1行目のはShebangというものでスクリプトを指定しているらしいです。
へーtest.sh#!/bin/sh #コメントアウト echo "Hello, World!"権限の変更
$ chmod 755 test.sh実行結果
$ ./test.sh Hello, World!楽したい
ここではアプリ起動をする時めんどいものを楽しようというものです。
shellで実行できるものはたいてい実行できる例:MySQL
とりあえず普通に実行$ mysql -u [user名] -p Enter password: mysql>いちいちユーザー名とパスワード入力が面倒、、、、
まず一番シンプルに
sql.sh#!/bin/sh mysql -u [ユーザ名] -p[パスワード] #-pの横はスペース開けないようにこれで実行してもいいけどこれだとユーザ名とパスワード変更するたびにその部分sql.shを変更しなければならない...(1行だけだからそんなに手間はないと思うけども。。。)
なのでそこだけ別ファイルに読み込んでみる。別ファイルから読み込む
test.txtHELLO=hellotest.sh#!/bin/sh . ./test.txt echo $HELLO実行
権限の変更するのを忘れずに!!$ ./test.sh hello別ファイルから読み込んでいるのがわかると思います。
実行してみる
では実際別にして読み込んで実行みましょう
sql.cnfUSER=[ユーザ名] PASS=[パスワード]別にcnfにする必要ないですが形から入る感じで
sql.sh#!/bin/sh . ./sql.cnf mysql -u $USER -p$PASS実行結果
$ ./sql.sh mysql>まとめ
いかがだったでしょうかパッと思いつくところでここまでですが
また効率のいい方法見つけたり思いついたら書いていきたいと思うます。
- 投稿日:2020-04-21T11:43:42+09:00
Booting ARM Linuxを再読する
Bootring ARM Linuxを再読する
ARM Linuxの起動プロセスってどうなっているのか、というのをもう一度認識を改めるためにも、今回は、Bootring ARM Linuxを再読していく。
(追記)もともと、Linux Kernelのソースコードの一部なので、GPLv2扱いになる(認識)。
https://www.kernel.org/doc/html/latest/index.html
Licensing documentation
The following describes the license of the Linux kernel source code (GPLv2), how to properly mark the license of individual files in the source tree, as well as links to the full license text.
https://www.kernel.org/doc/html/latest/process/license-rules.html#kernel-licensing
では読んでいきます。
https://www.kernel.org/doc/html/latest/arm/booting.html#
In order to boot ARM Linux, you require a boot loader, which is a small program that runs before the main kernel. The boot loader is expected to initialise various devices, and eventually call the Linux kernel, passing information to the kernel.
ARM Linuxを起動するにため、boot loaderが必要となる。boot loaderはmain kernelを起動する前に動作する小さいプログラムである。boot loaderは様々なデバイスの初期化をしたり、最終的にはLinux kernelを呼び出すために、Kernelに情報を伝達したりするだろう。
Essentially, the boot loader should provide (as a minimum) the following:
1.Setup and initialise the RAM.
2.Initialise one serial port.
3.Detect the machine type.
4.Setup the kernel tagged list.
5.Load initramfs.
6.Call the kernel image.本質的には、boot loderは下記を(ミニマム構成として)実行する。
1. RAMのセットアップと初期化
2. 1つシリアルポートの初期化。
3. machine typeの特定
4. kernel tagged listのセットアップ
5. initramfsの呼び込み
6. kernel imageの呼び出し。1. Setup and initialise RAM
Existing boot loaders:
MANDATORY (必須)
New boot loaders:
MANDATORY (必須)The boot loader is expected to find and initialise all RAM that the kernel will use for volatile data storage in the system. It performs this in a machine dependent manner. (It may use internal algorithms to automatically locate and size all RAM, or it may use knowledge of the RAM in the machine, or any other method the boot loader designer sees fit.)
boot loaderはkernelがシステムにおいて一時的なデータストレージとして用いるすべてのRAMを検出し初期化するだろう。これは、machineに依存したやり方となる。(おそらく、自動的にすべてのRAMの位置や容量、machineにおけるRAMに関する知識、あるいは、その他boot loaderの設計者のフィットする、内部アルゴリズムが使われるだろう)。
2. Initialise one serial port
Existing boot loaders:
OPTIONAL, RECOMMENDED(オプションであり、推奨される)
New boot loaders:
OPTIONAL, RECOMMENDED(オプションであり、推奨される)The boot loader should initialise and enable one serial port on the target. This allows the kernel serial driver to automatically detect which serial port it should use for the kernel console (generally used for debugging purposes, or communication with the target.)
boot loaderは、target上の1つのシリアルポートを初期化し、有効にするべきである。これは、kernel serial driverが自動的にkernel consoleに利用されているシリアルポートを検知するのに用いられる(一般的には、デバッグ目的、あるいは、targetとの通信のために用いられる)。
As an alternative, the boot loader can pass the relevant ‘console=’ option to the kernel via the tagged lists specifying the port, and serial format options as described in
別の手段としては、boot loaderはkernelに対して関連する"console=" optionをportに関するtagged listを介して通知してもよい。serial format optionの詳細は以下にある。
Documentation/admin-guide/kernel-parameters.rst.
3. Detect the machine type
Existing boot loaders:
OPTIONAL(オプション)
New boot loaders:
MANDATORY except for DT-only platforms(DT-only platfromではおそらく必須)The boot loader should detect the machine type its running on by some method. Whether this is a hard coded value or some algorithm that looks at the connected hardware is beyond the scope of this document. The boot loader must ultimately be able to provide a MACH_TYPE_xxx value to the kernel. (see linux/arch/arm/tools/mach-types). This should be passed to the kernel in register r1.
boot loaderは、何らかの手段に基づいて動作しているmachine typeを検知するべきである。ハードコードされた値を用いる、あるいは、接続されたハードウェアを読みだして何らかのアルゴリズムを用いるなどになるが、このドキュメントのスコープ外となる。boot loaderは最終的にはkernelに対してMACH_TYPE_xxx値を通知することができなければならない(linux/arch/arm/tools/mach-typesを参照)。これは、register r1を介して、kernelに通知される。
For DT-only platforms, the machine type will be determined by device tree. set the machine type to all ones (~0). This is not strictly necessary, but assures that it will not match any existing types.
DT-only plaftormでは、machine typeはdevice treeを判別するために用いられる。machine typeは全1にセットされる(~0)。これは厳密には必要のないことではあるが、既存のタイプと一致しないことを保証します。
4. Setup boot data
Existing boot loaders:
OPTIONAL, HIGHLY RECOMMENDED(オプションだが、強く推奨)
New boot loaders:
MANDATORY(必須)The boot loader must provide either a tagged list or a dtb image for passing configuration data to the kernel. The physical address of the boot data is passed to the kernel in register r2.
boot loaderはtagged listもしくはdtb imageのいずれかを、kernelに対する設定データとして提供しなければならない。boot dataの物理アドレスは、register r2を介してkernelに通知される。
4a. Setup the kernel tagged list
The boot loader must create and initialise the kernel tagged list. A valid tagged list starts with ATAG_CORE and ends with ATAG_NONE. The ATAG_CORE tag may or may not be empty. An empty ATAG_CORE tag has the size field set to ‘2’ (0x00000002). The ATAG_NONE must set the size field to zero.
boot loaderは、kernel tagged listを生成し初期化しなければならない。有効なtagged listは、ATAG_COREから介し、ATAG_NONEで終了する。ATAG_CORE tagは~であってもなくてもよい。空のATAG_CORE tagはsize fieldが'2'(0x00000002)としてセットされる。ATAG_NONEはsize filedが0でなければならない。
Any number of tags can be placed in the list. It is undefined whether a repeated tag appends to the information carried by the previous tag, or whether it replaces the information in its entirety; some tags behave as the former, others the latter.
tagsのいくつかの数値はlistに保持することができる。タグが繰り返された場合、前のタグによって通視された情報に追加されるのか、それとも情報全体を置き換えるのかは定義されていない。前者として動作するタグもあれば、後者として動作するタグもある。
The boot loader must pass at a minimum the size and location of the system memory, and root filesystem location. Therefore, the minimum tagged list should look:
boot loaderは、system memoryのサイズや位置の情報、root filesystemの位置の情報を最低でも伝えれねばならない。最小のtagged listは以下のようになる。
+-----------+ base -> | ATAG_CORE | | +-----------+ | | ATAG_MEM | | increasing address +-----------+ | | ATAG_NONE | | +-----------+ vThe tagged list should be stored in system RAM.
tagged listはsystem RAMに保持される。The tagged list must be placed in a region of memory where neither the kernel decompressor nor initrd ‘bootp’ program will overwrite it. The recommended placement is in the first 16KiB of RAM.
tagged listは、kernel decompressorあるいはinitrdの"bootp" prgoramも上書きしないメモリ領域上に設置しなければならない。推奨される位置は、メモリの先頭16KiBである。
4b. Setup the device tree
The boot loader must load a device tree image (dtb) into system ram at a 64bit aligned address and initialize it with the boot data. The dtb format is documented in Documentation/devicetree/booting-without-of.txt. The kernel will look for the dtb magic value of 0xd00dfeed at the dtb physical address to determine if a dtb has been passed instead of a tagged list.
boot loaderは、device tree image (dtb)を system RAM上の64bit alignment addressにロードし、boot dataを初期化しなければならない。drb formatについては、Documentation/devicetree/booting-without-of.txt に文書化されている。kernelは、drb 物理アドレスからdtb magic value 0xd00dfeedを見つける事で、tagged listの代わりにdtbを用いる。
The boot loader must pass at a minimum the size and location of the system memory, and the root filesystem location. The dtb must be placed in a region of memory where the kernel decompressor will not overwrite it, while remaining within the region which will be covered by the kernel’s low-memory mapping.
boot loaderは、system memoryのサイズと位置、そして、root filesystem の位置といった最小限の情報を伝達する。dtbは、kernel decompressorで上書きされないメモリ領域上に置かれねばならない。そして、kernelのlow memory mappinguでカバーできる領域内にあるべきだ。
A safe location is just above the 128MiB boundary from start of RAM.
RAMの先頭128Mibバウンダリまでの領域が安全な位置となる。
5. Load initramfs.
Existing boot loaders:
OPTIONAL(オプション)
New boot loaders:
OPTIONAL(オプション)If an initramfs is in use then, as with the dtb, it must be placed in a region of memory where the kernel decompressor will not overwrite it while also with the region which will be covered by the kernel’s low-memory mapping.
initramfsをdtbと共に用いる場合には、kernel decompressorが上書きしないメモリ領域上に設置しなければならない。そして、kernelのlow memory mappinguでカバーできる領域内にあるべきだ。
A safe location is just above the device tree blob which itself will be loaded just above the 128MiB boundary from the start of RAM as recommended above.
安全な場所は、device treeのすぐ上となる。device tree blobは上記で推奨されている通り、RAMの先頭から128MiB領域のすぐ上にLoadされる。
6. Calling the kernel image
Existing boot loaders:
MANDATORY(必須)
New boot loaders:
MANDATORY(必須)There are two options for calling the kernel zImage. If the zImage is stored in flash, and is linked correctly to be run from flash, then it is legal for the boot loader to call the zImage in flash directly.
kernel zImageを呼び出すには2つの方法があります。もし、zImageがFlashに保持され、それはflashから動作するように正しくlinkされているならば、boot loaderはflash内から直接zImageを呼び出すことができます。
The zImage may also be placed in system RAM and called there. The kernel should be placed in the first 128MiB of RAM. It is recommended that it is loaded above 32MiB in order to avoid the need to relocate prior to decompression, which will make the boot process slightly faster.
zImageはあるいはsystem RAM上に配置され、そこから呼び出す事も出来ます。kernelはRAMの先頭128MiBに配置されるべきです。そして、展開後に再配置する必要が無いように、32MiBを越えた位置にロードすることを推奨します。これにより、boot processがわずかに早くなります。
When booting a raw (non-zImage) kernel the constraints are tighter. In this case the kernel must be loaded at an offset into system equal to TEXT_OFFSET - PAGE_OFFSET.
ram(non-zImage) kernelを起動するときには、制約は更に厳しくなります。この場合、カーネルはTEXT_OFFSET - PAGE_OFFSETに等しいオフセットにシステムはカーネルをロードしなければなりません。
In any case, the following conditions must be met:
いずれかのケースであっても、下記状態に合致させなければなりません。
・Quiesce all DMA capable devices so that memory does not get corrupted by bogus network packets or disk data. This will save you many hours of debug.
全てのDMA capable deviceはnetwork packetやdisk dataを取得しないように停止させなければなりません。これは、デバッグのためのあなたの時間を大いに救うことになるでしょう、
・CPU register settings
r0 = 0,
r1 = machine type number discovered in (3) above.
r2 = physical address of tagged list in system RAM, or physical address of device tree block (dtb) in system RAM
CPU modeCPUレジスタ設定。
r0 = 0,
r1 = 前記3で述べた、machine type num。
r2 = system RAM内のtagged listの物理アドレス、あるいは、system RAM CPU modeでのdevice tree block(dtb)の物理アドレス。All forms of interrupts must be disabled (IRQs and FIQs)
全ての割り込み(IRQ/FIQ)は無効化されていること。
For CPUs which do not include the ARM virtualization extensions, the CPU must be in SVC mode. (A special exception exists for Angel)
CPUが仮想化拡張を含んでいないのであれば、CPUはSVC modeであること(Angelには特別な例外があります)
CPUs which include support for the virtualization extensions can be entered in HYP mode in order to enable the kernel to make full use of these extensions. This is the recommended boot method for such CPUs, unless the virtualisations are already in use by a pre-installed hypervisor.
CPUが仮想化拡張を含んでいる場合には、HYP modeに入ることで、これらの拡張をkernelがfullで利用できるようにすること。これは、仮想化があらかじめインストールされているハイパーバイザーによって既に利用されている場合を除いて、このようなCPUに推奨される起動方法です。
If the kernel is not entered in HYP mode for any reason, it must be entered in SVC mode.
もしカーネルがHYP modeに何らかの理由で入らない場合には、SVC modeに入らなければならない。
・Caches, MMUs
The MMU must be off.
Instruction cache may be on or off.
Data cache must be off.・Cache, MMU
MMUはOFFでなければならない。
命令キャッシュは、OnでもOffでもよい。
データキャッシュは、Offでなければならない。If the kernel is entered in HYP mode, the above requirements apply to the HYP mode configuration in addition to the ordinary PL1 (privileged kernel modes) configuration. In addition, all traps into the hypervisor must be disabled, and PL1 access must be granted for all peripherals and CPU resources for which this is architecturally possible.
もし、カーネルがHYP modeで起動する場合には、上記要件は通常のPL1(特権カーネルモード)に加えて、HYP mode構成にも適用されます。更に、ハイパーバイザーへのすべてのtrapを無効化し、PL1はアーキテクチャが利用可能である、すべての周辺機器やCPU Resouceに対してアクセス可能である必要があります。
Except for entering in HYP mode, the system configuration should be such that a kernel which does not include support for the virtualization extensions can boot correctly without extra help.
HYP modeに入る場合を除いて、システム構成は、仮想化拡張機能のサポートを含まないカーネルが特別な支援なしで正しく起動できるようにする必要があります。
・The boot loader is expected to call the kernel image by jumping directly to the first instruction of the kernel image.
・boot loaderは、kernel imageの最初のインストラクションに直接ジャンプする事で、kernel imageを呼び出します。
・On CPUs supporting the ARM instruction set, the entry must be made in ARM state, even for a Thumb-2 kernel.
ARM instruction setをサポートするCPUであれば、Thumb-2 kernelであっても、ARM stateでentryしてよいです。
On CPUs supporting only the Thumb instruction set such as Cortex-M class CPUs, the entry must be made in Thumb state.
Thumb instruction setだけをサポートする、Cortex-M class のようなCPUであれば、Thumb stateでentryしなければなりません。