20210226のLinuxに関する記事は9件です。

[Linux(Ubuntu)]タイムゾーンを日本時間にする4つの方法まとめ

Zennにも筆者本人が転載済

環境

Ubuntu18をVirtualbox/Vagrantの仮想環境で動かしている。

$ cat /etc/os-release
NAME="Ubuntu"
VERSION="18.04.3 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.3 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic

設定方法(4つ)

(1)/etc/localtimeを変更

$ cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

上記だけで他のユーザーも同様のタイムゾーンに設定される。

(2)環境変数TZを設定

$ export TZ="Asia/Tokyo"

上記の設定は現在のユーザーにしか適用されない。
(試しに現在のユーザーで上記の環境変数を設定した後にrootになってからuptimeコマンドを打ってみればわかる。)

(3)tzselectコマンドから選択

スクリーンショット 2021-02-26 15.26.06.png

上記のように質問が来るので数字を入力してEnterすることで選択を進めていく。

スクリーンショット 2021-02-26 15.41.13.png

上記の

TZ='Asia/Tokyo'; export TZ

を~/.bash_profileに於けばそのホームディレクトリのユーザーのタイムゾーンは変更される。

(4)tzconfig(もしくはdpkg-reconfigure tzdata)

$ tzconfig
WARNING: the tzconfig command is deprecated, please use:
dpkg-reconfigure tzdata

tzconfigは最近のLinuxディストリビューションでは使えないみたい。。。なのでお勧めされている『dpkg-reconfigure tzdata』を使ってみよう。

-- rootユーザーに切り替えてからやるかsudoでやるように
$ sudo dpkg-reconfigure tzdata

下記のようにカラフルな選択画面が出てくる。

スクリーンショット 2021-02-26 15.57.56.png

スクリーンショット 2021-02-26 15.59.08.png

上記で選択をしていけば、どのユーザーでもタイムゾーンは統一される。

本日は以上です。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[Linux(Ubuntu)]タイムゾーンを日本時間にする5つの方法まとめ

Zennにも筆者本人が転載済

環境

Ubuntu18をVirtualbox/Vagrantの仮想環境で動かしている。

$ cat /etc/os-release
NAME="Ubuntu"
VERSION="18.04.3 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.3 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic

設定方法(5つ)

(1)/etc/localtimeを変更

$ cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

上記だけで他のユーザーも同様のタイムゾーンに設定される。

(2)環境変数TZを設定

$ export TZ="Asia/Tokyo"

上記の設定は現在のユーザーにしか適用されない。
(試しに現在のユーザーで上記の環境変数を設定した後にrootになってからuptimeコマンドを打ってみればわかる。)

(3)tzselectコマンドから設定すべきタイムゾーンを知る

tzselect自体はタイムゾーンの値を確認するための対話コマンド。

スクリーンショット 2021-02-26 15.26.06.png

上記のように質問が来るので数字を入力してEnterすることで選択を進めていく。

スクリーンショット 2021-02-26 15.41.13.png

上記の

TZ='Asia/Tokyo'; export TZ

を~/.bash_profileに於けばそのホームディレクトリのユーザーのタイムゾーンは変更される。

もしくは/etc/timezoneに

Asia/Tokyo

を記入する。(これで全ユーザーに適用される)

(4)tzconfig(もしくはdpkg-reconfigure tzdata)で設定

$ tzconfig
WARNING: the tzconfig command is deprecated, please use:
dpkg-reconfigure tzdata

tzconfigは最近のLinuxディストリビューションでは使えないみたい。。。なのでお勧めされている『dpkg-reconfigure tzdata』を使ってみよう。

-- rootユーザーに切り替えてからやるかsudoでやるように
$ sudo dpkg-reconfigure tzdata

下記のようにカラフルな選択画面が出てくる。

スクリーンショット 2021-02-26 15.57.56.png

スクリーンショット 2021-02-26 15.59.08.png

上記で選択をしていけば、どのユーザーでもタイムゾーンは統一される。

(5)timedatectlで設定

$ timedatectl set-timezone Asia/Tokyo
$ cat /etc/timezone
Asia/Tokyo

問題なく全ユーザーのタイムゾーン設定が出来ている。

ちなみに余談だがtimedatectlコマンドを用いれば下記でタイムゾーン表記の確認も出来る。

$ timedatectl list-timezones | grep -i tokyo
Asia/Tokyo

※『grep -i』は大文字小文字を区別せずに文字検索する

本日は以上です。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[Linux(Ubuntu)]タイムゾーンを日本時間にする5つの方法まとめG

Zennにも筆者本人が転載済

環境

Ubuntu18をVirtualbox/Vagrantの仮想環境で動かしている。

$ cat /etc/os-release
NAME="Ubuntu"
VERSION="18.04.3 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.3 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic

設定方法(5つ)

(1)/etc/localtimeを変更

$ cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

上記だけで他のユーザーも同様のタイムゾーンに設定される。

(2)環境変数TZを設定

$ export TZ="Asia/Tokyo"

上記の設定は現在のユーザーにしか適用されない。
(試しに現在のユーザーで上記の環境変数を設定した後にrootになってからuptimeコマンドを打ってみればわかる。)

(3)tzselectコマンドから設定すべきタイムゾーンを知る

tzselect自体はタイムゾーンの値を確認するための対話コマンド。

スクリーンショット 2021-02-26 15.26.06.png

上記のように質問が来るので数字を入力してEnterすることで選択を進めていく。

スクリーンショット 2021-02-26 15.41.13.png

上記の

TZ='Asia/Tokyo'; export TZ

を~/.bash_profileに於けばそのホームディレクトリのユーザーのタイムゾーンは変更される。

もしくは/etc/timezoneに

Asia/Tokyo

を記入する。(これで全ユーザーに適用される)

(4)tzconfig(もしくはdpkg-reconfigure tzdata)で設定

$ tzconfig
WARNING: the tzconfig command is deprecated, please use:
dpkg-reconfigure tzdata

tzconfigは最近のLinuxディストリビューションでは使えないみたい。。。なのでお勧めされている『dpkg-reconfigure tzdata』を使ってみよう。

-- rootユーザーに切り替えてからやるかsudoでやるように
$ sudo dpkg-reconfigure tzdata

下記のようにカラフルな選択画面が出てくる。

スクリーンショット 2021-02-26 15.57.56.png

スクリーンショット 2021-02-26 15.59.08.png

上記で選択をしていけば、どのユーザーでもタイムゾーンは統一される。

(5)timedatectlで設定

$ timedatectl set-timezone Asia/Tokyo
$ cat /etc/timezone
Asia/Tokyo

問題なく全ユーザーのタイムゾーン設定が出来ている。

ちなみに余談だがtimedatectlコマンドを用いれば下記でタイムゾーン表記の確認も出来る。

$ timedatectl list-timezones | grep -i tokyo
Asia/Tokyo

※『grep -i』は大文字小文字を区別せずに文字検索する

本日は以上です。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Couldn't serve files through port 8081, AWS EC2 Ubuntu 18.04 Instance

Issue

Was setting up a simple website for fun/practice on Ubuntu 18.04, using Apache2 as the web server. I then wanted to work on another website, so I thought I would work on it through a different port than the one for the first (443/HTTPS), and tried it with a random port 8081.

For some strange reason, I couldn't get it to work. I checked the access logs for my instance from AWS, and the requests via port 8081 were getting in, but the web server was not responding.

TL,DR; (Solution)

Turns out I had set up a separate firewall within the Ubuntu instance that I had completely forgotten about.

Once I figured that out, fixing it was easy: sudo ufw allow 8081

If you try troubleshooting firewall issues with AWS instances, most of the guides/ knowledge online tells you to look at the settings in AWS, since those should be the only ones that matter.

But if you're like me and followed Apache tutorials that told you to set up a firewall within the server, and then you just forgot you did that, chances are you might've forgotten that you need to edit those firewalls.

So I wrote this as a friendly reminder that this might be something you have to check, since I didn't see it anywhere else :)

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

EC2インスタンスにRails + MySQL環境構築

はじめに

AWSEC2インスタンス立ち上げたところからのサーバー構築手順です。

・設定用のツールをインストール
・Node.jsをインストール
・Yarnをインストール
・rbenvとruby-buildをインストール
・Rubyをインストール
・MariaDBをインストール(サーバーにDB設定する場合)
・Githubとの接続
・Unicornをインストール
・Githubからコードをクローン
・gemをインストール
・環境変数の設定
・アセットファイルをコンパイル
・本番環境でRailsを起動

ここまではアプリケーションサーバー構築。
WEBサーバー構築は以下。
EC2サーバーにRails + Nginx

設定用のツールをインストール

yumというコマンドを使ってこのサーバに元々あるプログラムをアップデートします。

$ sudo yum -y update

環境構築に必要なパッケージを諸々インストール。(長いコマンド)

$ sudo yum  -y install git make gcc-c++ patch libyaml-devel libffi-devel libicu-devel zlib-devel readline-devel libxml2-devel libxslt-devel ImageMagick ImageMagick-devel openssl-devel libcurl libcurl-devel curl

Node.jsをインストール

サーバーサイドで動くJavaScriptのパッケージです。

$ sudo curl -sL https://rpm.nodesource.com/setup_10.x | sudo bash -
$ sudo yum -y install nodejs

Yarnをインストール

Railsに搭載されているJavaScriptのパッケージを管理するためのパッケージマネージャです。

$ sudo yum -y install wget
$ sudo wget https://dl.yarnpkg.com/rpm/yarn.repo -O /etc/yum.repos.d/yarn.repo
$ sudo yum -y install yarn

rbenvとruby-buildをインストール

rbenvruby-buildは、Rubyのバージョンを管理する際に組み合わせて使うツールになります。これらはRubyをインストールする前に、インストールする必要があります。
ruby-buildrbenvのプラグインであり、ruby-buildによってRubyの様々なバージョン(2.0.0など)をインストールすることができます。
rbenvを使用することでrubyのバージョンを切り替えることできます。

#rbenvのインストール
$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv

#パスを通す(どのディレクトリからもアプリケーションを呼び出せる状態にする)
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile

#rbenvを呼び出すための記述
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile

#.bash_profileの読み込み
$ source .bash_profile

#ruby-buildのインストール
$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build

#rehashを行う
$ rbenv rehash

Rubyをインストール

Rubyのインストールには時間がかかります。

$ rbenv install 2.6.5
$ rbenv global 2.6.5 #EC2インスタンス内で使用するRubyのバージョンを決める
$ rbenv rehash  #rehashを行う
$ ruby -v # バージョンを確認

AWS RDSを使用する場合はMariaDB関連操作は不要。

MariaDBをインストール(サーバーにDB設定する場合)

Amazon Linux 2を利用している場合、MariaDByum コマンドからインストールすることができます。

$ sudo yum -y install mysql56-server mysql56-devel mysql56 mariadb-server mysql-devel

○○○利用できませんと表示されますが問題ありません。

データベースを起動

データベースを起動するためにsystemctlコマンドを利用します。これは、Amazon LinuxCentOSに含まれているもので、インストールしたソフトウェアの起動を一括して行えるツールです。

$ sudo systemctl start mariadb
$ sudo systemctl status mariadb #起動できたか確認

データベースのrootパスワードの設定

yum でインストールしたMariaDBには、デフォルトで root というユーザーでアクセス出来るようになっていますが、パスワードは設定されていません。パスワードを設定していきます。

$ sudo /usr/bin/mysql_secure_installation

対話形式でパスワードを設定します。

データベースへの接続確認

$ mysql -u root -p

パスワードを入力するように表示されるので、先程設定したパスワードを入力して、Enterしてください。

Githubとの接続

EC2サーバのSSH鍵ペアを作成

$ ssh-keygen -t rsa -b 4096

Generating public/private rsa key pair.
Enter file in which to save the key (/home/ec2-user/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/ec2-user/.ssh/id_rsa.
Your public key has been saved in /home/ec2-user/.ssh/id_rsa.pub.
The key fingerprint is:
3a:8c:1d:d1:a9:22:c7:6e:6b:43:22:31:0f:ca:63:fa ec2-user@ip-172-31-23-189
The key's randomart image is:
+--[ RSA 4096]----+
|    +            |
| . . =           |
|  = . o .        |
| * o . o         |
|= *     S        |
|.* +     .       |
|  * +            |
| .E+ .           |
| .o              |
+-----------------+

全て何も入力せずにEnterキーで進んでください。

生成されたSSH公開鍵を表示し、値をコピーします。

$ cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2E......

catで表示させた公開鍵を、Githubにアクセスして登録していきます。
https://github.com/settings/keys

①Titleは自由に記入
②Keyに公開鍵をペースト
Add SSH Keyを押して保存

Githubに鍵を登録できたら、SSH接続できるか以下のコマンドで確認

$ ssh -T git@github.com
Hi <Githubユーザー名>! You've successfully authenticated, but GitHub does not provide shell access.

Permission denied (publickey). と表示された場合は、SSH鍵の設定が間違っているので、作業を確認してください。

アプリケーションサーバの設定

アプリケーションサーバとは、ブラウザからの「リクエスト」を受け付けRailsアプリケーションを実際に動作させるソフトウェアのことです。

Unicornをインストール

ローカル環境のGemfile を編集

group :production do
  gem 'unicorn', '5.4.1'
end

ローカルのターミナルで

% bundle install

config/unicorn.rbを作成し、内容を以下のように編集

#サーバ上でのアプリケーションコードが設置されているディレクトリを変数に入れておく
app_path = File.expand_path('../../', __FILE__)

#アプリケーションサーバの性能を決定する
worker_processes 1

#アプリケーションの設置されているディレクトリを指定
working_directory app_path

#Unicornの起動に必要なファイルの設置場所を指定
pid "#{app_path}/tmp/pids/unicorn.pid"

#ポート番号を指定
listen 3000

#エラーのログを記録するファイルを指定
stderr_path "#{app_path}/log/unicorn.stderr.log"

#通常のログを記録するファイルを指定
stdout_path "#{app_path}/log/unicorn.stdout.log"

#Railsアプリケーションの応答を待つ上限時間を設定
timeout 60

#以下は応用的な設定なので説明は割愛

preload_app true
GC.respond_to?(:copy_on_write_friendly=) && GC.copy_on_write_friendly = true

check_client_connection false

run_once = true

before_fork do |server, worker|
  defined?(ActiveRecord::Base) &&
    ActiveRecord::Base.connection.disconnect!

  if run_once
    run_once = false # prevent from firing again
  end

  old_pid = "#{server.config[:pid]}.oldbin"
  if File.exist?(old_pid) && server.pid != old_pid
    begin
      sig = (worker.nr + 1) >= server.worker_processes ? :QUIT : :TTOU
      Process.kill(sig, File.read(old_pid).to_i)
    rescue Errno::ENOENT, Errno::ESRCH => e
      logger.error e
    end
  end
end

after_fork do |_server, _worker|
  defined?(ActiveRecord::Base) && ActiveRecord::Base.establish_connection
end

Githubからコードをクローン

EC2サーバーにSSH接続後に以下の操作

#mkdirコマンドで新たにディレクトリを作成
$ sudo mkdir /var/www/

#作成したwwwディレクトリの権限をec2-userに変更
$ sudo chown ec2-user /var/www/

#移動
$ cd /var/www/

#Githubから「リポジトリURL」を取得しクローンします
$ git clone https://github.com/<ユーザー名>/<リポジトリ名>.git

Swap(スワップ)領域作成

Swap領域は、メモリが使い切られそうになった時にメモリの容量を一時的に増やすために準備されるファイルです。

EC2はデフォルトではSwap領域を用意していないため、これを準備することでメモリ不足の処理エラーを防ぎます。

$ cd
$ sudo dd if=/dev/zero of=/swapfile1 bs=1M count=512
# しばらく待って、以下のように表示されれば成功
512+0 レコード入力
512+0 レコード出力
536870912 バイト (537 MB) コピーされました、 7.35077 秒、 73.0 MB/秒

$ sudo chmod 600 /swapfile1
$ sudo mkswap /swapfile1
# 以下のように表示されれば成功
スワップ空間バージョン1を設定します、サイズ = 524284 KiB
ラベルはありません, UUID=74a961ba-7a33-4c18-b1cd-9779bcda8ab1

$ sudo swapon /swapfile1

#右へ長いコマンドです
$ sudo sh -c 'echo "/swapfile1  none        swap    sw              0   0" >> /etc/fstab'

gemをインストール

rbenvでインストールされたRubyが使われているかチェック

$ cd  /var/www/<アプリ名>
$ ruby -v
ruby 2.6.5p114 (2019-10-01 revision 67812) [x86_64-linux]

本番環境でgemを管理するためのbundlerをインストールして、bundle installを実行

ローカル環境でバージョン確認。

#ローカル環境 アプリのディレクトリで以下を実行
% bundler -v
Bundler version 2.1.4

ローカルと同じバージョンをEC2サーバー上で以下のコマンド

# ローカルで確認したbundlerのバージョンを導入する
$ gem install bundler -v 2.1.4

$ bundle install

環境変数の設定

環境変数は、Railsからは ENV['<環境変数名>'] という記述でその値を利用することができます。今回は、 SECRET_KEY_BASE という環境変数を指定していきます。

$ rake secret
69619d9a75b78f2e1c87ec5e07541b42f23efeb6a54e97da3723de06fe74af29d5718adff77d2b04b2805d3a1e143fa61baacfbf4ca2c6fcc608cff8d5a28e8d

この長い英数の羅列は、この後利用するのでコピーしておきます。

環境変数は /etc/environment というファイルに保存することで、サーバ全体に適用されます。

$ sudo vim /etc/environment
#前章で設定したデータベースのrootユーザーのパスワードを入力
DATABASE_PASSWORD='データベースのrootユーザーのパスワード'
SECRET_KEY_BASE='先程コピーしたsecret_key_base'

書き込みができたら esc(エスケープキー)を押下後、:wqと入力して内容を保存します。
保存できたら環境変数を適用するために一旦ログアウト。

$ exit
logout
Connection to 52.xx.xx.xx closed.

再度ログイン。

$ ssh -i [ダウンロードした鍵の名前].pem ec2-user@[作成したEC2インスタンスと紐付けたElastic IP]

環境変数が適用されているか確認

$ env | grep SECRET_KEY_BASE
SECRET_KEY_BASE='secret_key_base'

$ env | grep DATABASE_PASSWORD
DATABASE_PASSWORD='データベースのrootユーザーのパスワード'

ポートを開放

config/unicorn.rblisten 3000 と記述しましたが、これはRailsのサーバを3000番ポートで起動するということを意味します。

EC2インスタンスのセキュリティグループを編集しカスタムTCPでポート3000を許可してください。

database.ymlの本番環境の設定

config/database.yml(ローカル)を以下のように設定。

  <<: *default
  database: ~~~(それぞれのアプリによって異なる)
  username: root
  password: <%= ENV['DATABASE_PASSWORD'] %>
  socket: /var/lib/mysql/mysql.sock

RDSなど使用の場合はまた異なります。

ローカルでの編集をコミットして、GitHubにプッシュし、EC2へ再度クローンします。

$ git pull origin master

データベースを作成しマイグレーションを実行

EC2サーバー上で以下のコマンド。

$ rails db:create RAILS_ENV=production
Created database '<データベース名>'

$ rails db:migrate RAILS_ENV=production

もしデータベースが起動していないときは

sudo systemctl start mariadb

アセットファイルをコンパイル

本番モードでは、事前にアセットをコンパイルする必要があります。

$ rails assets:precompile RAILS_ENV=production

本番環境でRailsを起動

unicorn のgemをインストールしていると unicorn_rails というコマンドが使えるようになっています.
ローカルでいうrails sにあたります。

Unicornのプロセスを確認

$ ps aux | grep unicorn
ec2-user 17877  0.4 18.1 588472 182840 ?       Sl   01:55   0:02 unicorn_rails master -c config/unicorn.rb -E production -D
ec2-user 17881  0.0 17.3 589088 175164 ?       Sl   01:55   0:00 unicorn_rails worker[0] -c config/unicorn.rb -E production -D
ec2-user 17911  0.0  0.2 110532  2180 pts/0    S+   02:05   0:00 grep --color=auto unicorn

「unicorn_rails master」と表示されているプロセスがあればkillコマンドで停止してください。

$ kill <確認したunicorn rails masterのPID>

unicornを起動

$ cd /var/www/[リポジトリ]
$ RAILS_SERVE_STATIC_FILES=1 unicorn_rails -c config/unicorn.rb -E production -D

RAILS_SERVE_STATIC_FILES=1は、コンパイルされたアセットをRailsが見つけられるような指定です。

ブラウザで確認

http://<Elastic IP>:3000/で正常に表示されれば成功です。

うまく表示されない場合

エラーが起こっているのでログを確認。

$tail -f /var/www/<アプリ名>/log/production.log

または/var/www/<リポジトリ名>/log/unicorn.stderr.logをlessまたはcatコマンドで確認。

設定は以上です。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

#ターミナルをかっこよくする

プロンプト

.bashrc
PS1='\[\e[30;47m\] \u \[\e[37;46m\] \W \[\e[0m\]\$'
$ source ~/.bashrc

説明
[\e[ 0x;3x;4x m]]の中身の文法

書体,文字色,背景色の順位に;で区切る

エスケープシーケンス
00 普通
01 ボールド
02 細字
03 イタリック
04 アンダーライン
05 点滅

3x 文字色
4x 背景色

x0 黒
x1 赤
x2 緑
x3 黄
x4 青
x5 紫
x6 水
x7 灰

変数の説明

\h ホスト名 パソコンの名前
\u ユーザ名
\w カレントディレクトリ絶対パス
\W カレントディレクトリ相対パス
\t 時間 24h
\T 時間 12h
\@ 時刻PM  AM
\d 日付
\D タイプスタンプ \D{}として%y,%m,%d,%H,%M,%Sの引数をとれる
\# コマンド番号
\n 改行する
\$ $ or #の表示 末尾に入れるべき

ひとまずここまで

参考

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

カレントディレクトリ以下に、「ディレクトリを指し示しているシンボリックリンク」が存在しているか調べる

もともと2014年4月28日に別のところに書いていた記事を、備忘的に持ってきたものです。

方法

find -type l -and -xtype d

-xtypeの指定は、シンボリックリンクを辿った先のファイルがどのような属性であるかを調べる1。そのため、ファイル自体がシンボリックリンクであり(-type l)、かつそれを辿った先がディレクトリである(-xtype d)という条件で検索すればよい。

経緯

「ディレクトリを書庫に格納するとき、シンボリックリンクが示すファイルは実体のほうを書庫に格納する」という方法で書庫を作りたかったのだが、その中にディレクトリを指し示すようなシンボリックリンクがあると不用意に書庫のサイズを大きくしてしまいかねないので、それを避けたかったのである。


  1. -xtypeがこのような挙動になるには、findコマンドのデフォルトオプション(ファイルを列挙する過程ではシンボリックリンクも単にファイルとみなし、辿ることはしない。オプションを明示的に書くなら-P)を使っているという前提が必要である。詳細は例えばMan page of FIND(OSDNによる日本語訳)を参照。 

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Raspberry Pi 4BにUbuntu20.04でサーバー構築し、Nextcloudを導入してみた。第1回[準備~SSHでログイン出来るまで]

第1回 現在のページ

  • Ubuntuのインストール
  • Raspberry Piの準備
  • キーボード・ユーザー設定
  • プライベートIPアドレス固定化

第2回

  • SSH公開鍵認証
  • サーバー側ファイアウォール
  • swap領域の作成
  • タイムゾーン・ホスト名設定など

第3回

  • SSDマウント
  • ドメイン取得・DDNS設定
  • Nextcloudインストール
  • サーバー・ルーターのポート開放
  • SSL証明書取得

第4回

  • Nextcloudへの外付けSSD認識
  • 2要素認証
  • 通知メール設定
  • 主な参考元

※第2回以降は限定公開となっておりますが、どなたでも閲覧して構いません。

先に用意するもの

Raspberry Pi 4B (妥協するなら3Bでも可)
8GB以上のmicroSD
SSD(usb3.0以上対応)
usbタイプのキーボード
HDMIケーブルと対応するモニター
イーサネットケーブル(Cat6以上推奨)
PC(私はWindows 10 OSのものを使用)

1. Ubuntuのインストール

まず、PCでラズベリーパイ公式サイトよりRaspberry Pi Imagerをダウンロード。
8GB以上のMicroSDをPCに差し込む。
ダウンロードしたimagerをインストールし、起動。
imagerが起動したら、OSはubuntu server 20.04 LTSを選び、挿入したSDカードを選択して書き込む。

2. Raspberry Piの準備~起動

付属の説明書通りに組み立てます。私はビニル手袋を嵌めて作業しました。
各差込口がきちんと嵌まっているかよく確認してネジ止め。
組みあがったら、ubuntuをインストールしたSDカード、usbキーボード、ルータと繋いだイーサネットケーブル、モニタに繋いだHDMIを予め差し込んでから起動。

初回ログインは

login: ubuntu
password: ubuntu

でログインします。
(ちなみに私の場合、何故か上記のとおり入力して何度やっても上手くいかず、翌日になると正常にログイン出来ました・・・)
初回ログイン直後に現在のパスワードubuntuと新しいパスワードの入力を求められるので、入力完了したらいよいよ各種設定です。

3. キーボード・ユーザー設定

ラズパイ版ubuntuでは最初にキーボードレイアウトを日本語に設定する必要があります。

$ sudo dpkg-reconfigure keyboard-configuration

で対話形式の設定画面に移り、
Generic 105-key PC (Intl.)

Japanese

Japanese

The default for the keyboard layout

No compose key
と選択して設定完了後、再起動すると反映されます。

次に、デフォルトのubuntuユーザーを使うことはセキュリティ上好ましくないので、新たなユーザーを追加した上でユーザーubuntuを削除します。

$ sudo adduser ユーザー名

でユーザーを追加出来ます。ユーザー名の先頭はa-z以後はa-zと0-9しか使用出来ないことに注意(環境変数を変更することで他の文字も使用出来ますがここでは割愛)。

加えて、sudoコマンドでルート権限で実行できるように、以下のコマンドでユーザーをグループsudoへ追加します。

$ sudo gpasswd -a ユーザー名 sudo

再起動した後、新しいユーザー名でログインし、

$ sudo userdel -r ubuntu

でデフォルトユーザーを削除して完了です。

4. プライベートIPアドレスの固定化

PCからSSH接続でサーバー設定を行うため、プライベートIPアドレスを固定化します。

$ sudo vi /etc/netplan/99-config.yaml

でファイルを開き、以下の様にネットワーク設定を書き込みます。

network
     version: 2
     renderer: networkd
     ethernets:
           eth0:
                dhcp4: false
                dhcp6: false
                addresses: [   .   .   .   /24 ] 空欄にサーバーに設定するIPアドレスを入力
                gateway4:    .   .   .   空欄にデフォルトゲートウェイのIPアドレスを入力
                nameservers:
                      addresses: [   .   .   .   , 8.8.8.8 ] 空欄にDNSサーバーのIPアドレスを入力

各種IPアドレスの設定は、コマンドプロンプト(Win)のipconfig /allなどでLANのサブネット及び、デフォルトゲートウェイ、DNSサーバのアドレスを確認した上で行ってください。

下記コマンドで設定を反映。

$ sudo netplan apply

その後、以下のコマンドでeth0がstate UPinetの欄が設定されたIPアドレスになっていれば成功です。

$ ip addr

ここまで出来たら、PCでPuTTYをダウンロードし、Host Name欄にサーバーのIPアドレスを、Port欄に22と入力、Connection typeのSSHを選択することでSSHでのログインが可能です。

初回起動時には接続先が正しいかを確認されますがyesで大丈夫です。これによってホスト認証キーがPC側にも保存され、以後は確認されなくなります。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Raspberry Pi 4BにUbuntu20.04でサーバー構築し、Nextcloudを導入してみた。第1回

第1回 現在のページ

  • Ubuntuのインストール
  • Raspberry Piの準備
  • キーボード・ユーザー設定
  • プライベートIPアドレス固定化

第2回

  • SSH公開鍵認証
  • サーバー側ファイアウォール
  • swap領域の作成
  • タイムゾーン・ホスト名設定など

第3回

  • SSDマウント
  • ドメイン取得・DDNS設定
  • Nextcloudインストール
  • サーバー・ルーターのポート開放
  • SSL証明書取得

第4回

  • Nextcloudへの外付けSSD認識
  • 2要素認証
  • 通知メール設定
  • 主な参考元

※第2回以降は限定公開となっておりますが、どなたでも閲覧して構いません。

先に用意するもの

Raspberry Pi 4B (妥協するなら3Bでも可)
8GB以上のmicroSD
SSD(usb3.0以上対応)
usbタイプのキーボード
HDMIケーブルと対応するモニター
イーサネットケーブル(Cat6以上推奨)
PC(私はWindows 10 OSのものを使用)

1. Ubuntuのインストール

まず、PCでラズベリーパイ公式サイトよりRaspberry Pi Imagerをダウンロード。
8GB以上のMicroSDをPCに差し込む。
ダウンロードしたimagerをインストールし、起動。
imagerが起動したら、OSはubuntu server 20.04 LTSを選び、挿入したSDカードを選択して書き込む。

2. Raspberry Piの準備~起動

付属の説明書通りに組み立てます。私はビニル手袋を嵌めて作業しました。
各差込口がきちんと嵌まっているかよく確認してネジ止め。
組みあがったら、ubuntuをインストールしたSDカード、usbキーボード、ルータと繋いだイーサネットケーブル、モニタに繋いだHDMIを予め差し込んでから起動。

初回ログインは

login: ubuntu
password: ubuntu

でログインします。
(ちなみに私の場合、何故か上記のとおり入力して何度やっても上手くいかず、翌日になると正常にログイン出来ました・・・)
初回ログイン直後に現在のパスワードubuntuと新しいパスワードの入力を求められるので、入力完了したらいよいよ各種設定です。

3. キーボード・ユーザー設定

ラズパイ版ubuntuでは最初にキーボードレイアウトを日本語に設定する必要があります。

$ sudo dpkg-reconfigure keyboard-configuration

で対話形式の設定画面に移り、
Generic 105-key PC (Intl.)

Japanese

Japanese

The default for the keyboard layout

No compose key
と選択して設定完了後、再起動すると反映されます。

次に、デフォルトのubuntuユーザーを使うことはセキュリティ上好ましくないので、新たなユーザーを追加した上でユーザーubuntuを削除します。

$ sudo adduser ユーザー名

でユーザーを追加出来ます。ユーザー名の先頭はa-z以後はa-zと0-9しか使用出来ないことに注意(環境変数を変更することで他の文字も使用出来ますがここでは割愛)。

加えて、sudoコマンドでルート権限で実行できるように、以下のコマンドでユーザーをグループsudoへ追加します。

$ sudo gpasswd -a ユーザー名 sudo

再起動した後、新しいユーザー名でログインし、

$ sudo userdel -r ubuntu

でデフォルトユーザーを削除して完了です。

4. プライベートIPアドレスの固定化

PCからSSH接続でサーバー設定を行うため、プライベートIPアドレスを固定化します。

$ sudo vi /etc/netplan/99-config.yaml

でファイルを開き、以下の様にネットワーク設定を書き込みます。

network
     version: 2
     renderer: networkd
     ethernets:
           eth0:
                dhcp4: false
                dhcp6: false
                addresses: [   .   .   .   /24 ] 空欄にサーバーに設定するIPアドレスを入力
                gateway4:    .   .   .   空欄にデフォルトゲートウェイのIPアドレスを入力
                nameservers:
                      addresses: [   .   .   .   , 8.8.8.8 ] 空欄にDNSサーバーのIPアドレスを入力

各種IPアドレスの設定は、コマンドプロンプト(Win)のipconfig /allなどでLANのサブネット及び、デフォルトゲートウェイ、DNSサーバのアドレスを確認した上で行ってください。

下記コマンドで設定を反映。

$ sudo netplan apply

その後、以下のコマンドでeth0がstate UPinetの欄が設定されたIPアドレスになっていれば成功です。

$ ip addr

ここまで出来たら、PCでPuTTYをダウンロードし、Host Name欄にサーバーのIPアドレスを、Port欄に22と入力、Connection typeのSSHを選択することでSSHでのログインが可能です。

初回起動時には接続先が正しいかを確認されますがyesで大丈夫です。これによってホスト認証キーがPC側にも保存され、以後は確認されなくなります。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む