20210302のLinuxに関する記事は7件です。

ローカル環境にyumリポジトリを構築する

前置き

インターネットに接続できない環境でもyumコマンドでパッケージをインストールできるようにセットアップした。
以下はRHEL 7.9で実施した内容です。

対応内容

rpmパッケージのアップロード

インストールメディアからrpmパッケージをサーバ上にアップロードする。
rpmパッケージはPackagesディレクトリ内にある。

[root@hogehoge ~]# mkdir /mnt/cdrom
[root@hogehoge ~]# 
[root@hogehoge ~]# mount -t iso9660 -o loop /dev/sr0 /mnt/cdrom
[root@hogehoge ~]# 
[root@hogehoge ~]# ls -l /mnt/cdrom
合計 974
dr-xr-xr-x. 3 root root   2048  9月 18 04:35 EFI
-r--r--r--. 1 root root   8266  9月 18 03:27 EULA
-r--r--r--. 1 root root  18092  9月 18 03:27 GPL
dr-xr-xr-x. 2 root root   2048  9月 18 04:35 LiveOS
dr-xr-xr-x. 2 root root 946176  9月 18 04:35 Packages
-r--r--r--. 1 root root   3375  7月 14 23:15 RPM-GPG-KEY-redhat-beta
-r--r--r--. 1 root root   3211  7月 14 23:15 RPM-GPG-KEY-redhat-release
-r--r--r--. 1 root root   1796  9月 18 04:35 TRANS.TBL
dr-xr-xr-x. 4 root root   2048  9月 18 04:35 addons
-r--r--r--. 1 root root   1455  9月 18 03:27 extra_files.json
dr-xr-xr-x. 3 root root   2048  9月 18 04:35 images
dr-xr-xr-x. 2 root root   2048  9月 18 04:35 isolinux
-r--r--r--. 1 root root    114  9月 18 04:08 media.repo
dr-xr-xr-x. 2 root root   2048  9月 18 04:35 repodata
[root@hogehoge ~]# 
[root@hogehoge ~]# mkdir -p /var/local/repo
[root@hogehoge ~]# 
[root@hogehoge ~]# cp -p /mnt/cdrom/Packages/* /var/local/repo
[root@hogehoge ~]# 

yumリポジトリの作成

createrepoコマンドを使用できるようにするため、必要なパッケージをインストールする。

[root@hogehoge ~]# ls -l /var/local/repo | grep -E "createrepo|deltarpm|python-deltarpm"
-r--r--r--. 1 root root    95888  3月 25  2017 createrepo-0.9.9-28.el7.noarch.rpm
-r--r--r--. 1 root root    84048  4月  1  2014 deltarpm-3.6-3.el7.x86_64.rpm
-r--r--r--. 1 root root    32140  4月  1  2014 python-deltarpm-3.6-3.el7.x86_64.rpm
[root@hogehoge ~]# 
[root@hogehoge ~]# rpm -ivh /var/local/repo/deltarpm-3.6-3.el7.x86_64.rpm
[root@hogehoge ~]# rpm -ivh /var/local/repo/python-deltarpm-3.6-3.el7.x86_64.rpm
[root@hogehoge ~]# rpm -ivh /var/local/repo/createrepo-0.9.9-28.el7.noarch.rpm
[root@hogehoge ~]# 
[root@hogehoge ~]# yum list installed | grep -E "createrepo|delta"
createrepo.noarch                       0.9.9-28.el7               installed    
deltarpm.x86_64                         3.6-3.el7                  installed    
python-deltarpm.x86_64                  3.6-3.el7                  installed    
[root@hogehoge ~]# 

createrepoコマンドでリポジトリを作成。
事前にrpmパッケージを上げておいたディレクトリを指定する。
処理が完了すると、repodataディレクトリが作成される。

[root@hogehoge ~]# createrepo -v /var/local/repo
Spawning worker 0 with 654 pkgs
Spawning worker 1 with 654 pkgs
Spawning worker 2 with 654 pkgs
Spawning worker 3 with 654 pkgs
Spawning worker 4 with 654 pkgs
Spawning worker 5 with 654 pkgs
Spawning worker 6 with 653 pkgs
Spawning worker 7 with 653 pkgs
Worker 0: reading 389-ds-base-1.3.10.2-6.el7.x86_64.rpm
Worker 1: reading 389-ds-base-libs-1.3.10.2-6.el7.x86_64.rpm
~ 中略 ~
Worker 4: reading zziplib-0.13.62-12.el7.i686.rpm
Worker 5: reading zziplib-0.13.62-12.el7.x86_64.rpm
Workers Finished
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Starting other db creation: Tue Jan 23 13:45:34 2021
Ending other db creation: Tue Jan 23 13:45:35 2021
Starting filelists db creation: Tue Jan 23 13:45:35 2021
Ending filelists db creation: Tue Jan 23 13:45:37 2021
Starting primary db creation: Tue Jan 23 13:45:37 2021
Ending primary db creation: Tue Jan 23 13:45:40 2021
Sqlite DBs complete
[root@hogehoge ~]# 
[root@hogehoge ~]# ls -ld /var/local/repo/repodata
drwxr-xr-x. 2 root root 4096  1月 23 13:45 /var/local/repo/repodata
[root@hogehoge ~]# 

yum設定ファイルの編集

yumの設定ファイルを作成する。
baseurlにはrpmパッケージを上げておいたディレクトリを指定する。

[root@hogehoge ~]# vi /etc/yum.repos.d/local.repo
/etc/yum.repos.d/local.repo
[local]
name=local repo
baseurl=file:///var/local/repo
enabled=1
gpgcheck=0

RHELデフォルトの設定ファイルをそのままにしておくと、外部に問い合わせにいこうとしてエラーを吐くので無効化しておく。
enabledの値が1は有効、0が無効となる。

[root@hogehoge ~]# sed -i.org 's/enabled = 1/enabled = 0/g' /etc/yum.repos.d/redhat.repo
[root@hogehoge ~]# 
[root@hogehoge ~]# yum clean all
読み込んだプラグイン:product-id, search-disabled-repos, subscription-manager
リポジトリーを清掃しています: local
[root@hogehoge ~]# 
[root@hogehoge ~]# yum repolist enabled
読み込んだプラグイン:product-id, search-disabled-repos, subscription-manager
local                                                                                     | 2.9 kB  00:00:00     
local/primary_db                                                                          | 4.3 MB  00:00:00     
リポジトリー ID                                      リポジトリー名                                          状態
local                                               local repo                                            5,230
repolist: 5,230
[root@hogehoge ~]# 

以上です。

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

findを使ってデータを一か所に集めたい +自動削除も

ユースケース

radikoで録音した音源、クラウドにアップロードしたいが手動のコピーや削除が面倒なので自動化したい

環境

debian_version:9.4

最新〇〇日のデータをコピー

ラジオフォルダに保存されているデータ(サブディレクトリを含む)をクラウドにコピーします

例)
ラジオ---
       |---オードリーのオールナイトニッポン---20210302オードリーのオールナイトニッポン.mp3
       |---有吉弘行のsundaynightdreamer---20210202有吉弘行のsundaynightdreamer.mp3
       |---霜降り明星のオールナイトニッポンゼロ---20200103霜降り明星のオールナイトニッポンゼロ.mp3
find /録音ディレクトリ -mtime -最新〇〇日 -iname *.mp3 -exec cp -n --target-directory /コピーしたいクラウドストレージ {} \;

結果
最新〇〇日データのみクラウドのストレージにコピーされました。

BOX---20210302オードリーのオールナイトニッポン.mp3,20210202有吉弘行のsundaynightdreamer.mp3,

〇〇日以降経過したデータの削除

こちらはfindとrmを組み合わせて、〇〇日以降経過したデータを削除します。

find /クラウドストレージ -iname *.mp3  -type f -mtime +〇〇日+1 -exec rm -rf {} \;

あとはcrontabに登録し、毎日実行させてば自動化されます。

楽しいデータ管理ライフを!

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

[Amazon linux 2] /tmp配下の自動削除

/tmp配下ファイル削除の仕組み

  • /tmp配下ファイルの削除タイミングは、systemdのtimerで指定されています。
  • systemd-tmpfiles-clean.timerの中身を確認することで、そのタイミングを知ることができます。(デフォルト: 起動後 15 分経過時点と、それ以降に一日置きにタイマーが発火)
$ sudo systemctl cat systemd-tmpfiles-clean.timer
 ...
 [Timer]
 OnBootSec=15min
 OnUnitActiveSec=1d
  • タイマーが発火後は、以下のコマンドが実行されます。
$ sudo systemctl cat systemd-tmpfiles-clean.service
...
ExecStart=/usr/bin/systemd-tmpfiles --clean
  • --clean オプションを指定していると、 systemd-tmpfiles.d の設定ファイルで Age パラメータでした期間を経過したファイルが削除されます。

  • 削除対象のファイルは、/usr/lib/tmpfiles.d/tmp.confで指定されています。
    /usr/lib/tmpfiles.d/tmp.confのファイルの中を確認すると、デフォルトで/tmpは10日、/var/tmpは30日で配下のファイルが削除される設定が書かれています。

$ cat /usr/lib/tmpfiles.d/tmp.conf
...
# Clear tmp directories separately, to make them easier to override
v /tmp 1777 root root 10d
...

次回及び前回のタイマー発火時刻の確認方法

  • Amazon linux2だと、systemd list-timersコマンドで確認できます。
sh-4.2$ sudo systemctl list-timers
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Raspberry Pi 4でIPアドレス固定したら外部ネットワークにつながらなかった 解決策 備忘録

1.固定時の状況

先日、WebAPIを用いてアプリケーションや簡易サーバー的な事を行っていました、その際Raspberry Pi4のIPアドレスを固定化しなければならなかったのでRaspberry Pi 3 でIPアドレスを固定して、外部からSSH接続できるようにするを参考にIPアドレス固定化を行いました。
以下はIP固定時のソフトウェアのバージョンとハードウェアの詳細です。

pi@raspberrypi:~ $ cat /etc/debian_version
10.7
pi@raspberrypi:~ $ cat /proc/device-tree/model
Raspberry Pi 4 Model B Rev 1.2

Raspberry Pi 4 4GB
USB boot SSD 120GB
SD搭載なし

私はIPアドレス固定化に伴いdhcpcd.confを以下の様に変更しました。
個人情報とセキュリティに関して全文はお見せできませんが、重要な一部を下に記します。*コピペする場合には#とXに注意してください。

dhcpcd.conf
#追記部分のみ、前文は変更なし
interface eth0
static ip_address=192.168.X.XX/XX #固定したいIPアドレス
static routers=XXX.XXX.X.X #ルーターのIPです、詳しくはルーターの設定で確認してください
static domain_name_servers=XXX.XXX.X.X #大体routersと同じで動くはずです、これもルーターの設定で確認してください
static domain_search= #この状態でも動きましたので入力要らないとおもいます

2.問題発生

上記のようにdhcpcdを設定し直した後に再起動しました。
私はVNCを用いてRaspberry Pi上で作業を行っていますが繋がりませんでした
また起動時にWebAPIのアプリも同時に起動するように設定していましたがそちらも反応なし。しかし、SSHやローカル接続のVNCは繋がりました。つまり、
Raspberry Pi ---> ローカルネットワーク ---////問題発生? グローバルネットワーク
だと考えたわけです。

またその時にローカル上でもIPアドレスを確認できるのですがdhcpcdで指定したIPアドレスで取得はできていました
それもできないという人は下の補足を確認してください。

3.解決策

結果的に下記のコマンドで直すことができました。

sudo dhclient eth0

WiFiでIPを固定して同じように問題が発生した場合はsudo dhclient wlan0を実行してみてください。
実行すると下記のようになりました

pi@raspberrypi:~ $ sudo dhclient eth0
RTNETLINK answers: File exists
Too few arguments.
Too few arguments.

RTNETLINK answers: File existsは出ない場合もあります。
私以外にもこのような問題が発生している人が少しいましたがその解決策を明示しているサイトなどがあまりなかったです。この問題自体は前からLinux系のOSに見られるらしくLinux系を扱っているサイトなどで解決策を発見しました。

4.補足

IPアドレス固定化に関して少し補足があります。Linux系のOSを使っている人はIPアドレス固定などアプリケーションを操作する際によくターミナルを使用します。しかし普段Windows OSを使用する人はGUIに慣れていて、どうしてもGUIで操作したい場合があると思います。
またdebianにはGUIで操作できるアプリケーションも多く存在しています。そしてIPアドレス固定化も下記のGUIで操作できます。
キャプチャ.PNG
このGUIで操作して固定できますが問題が発生する場合があります。
このアプリケーションでIPアドレス固定をした後ターミナルでdhcpcd.confを確認すると

dhcpcd.conf
#追記部分のみ、前文は変更なし
interface eth0
inform 192.168.X.XX/XX
static routers=XXX.XXX.X.X 
static domain_name_servers=XXX.XXX.X.X
static domain_search=

このようにstatic ip_address=informに代わっていました。私の環境下ではこのinformがあるとうまくIPを取得できませんでした。なのでそもそもローカル上でも繋がらない場合はこのように確認してみてはどうでしょう。(他のサイトではこのinformでも大丈夫というのもありました)

5.まとめ

結果的に問題は解決できましたが明確な原因はわかりません。なので今後もDHCP系は勉強しないとですね。こういうあまり大きな問題でもないが面倒くさい問題はOSのバージョンアップでよくおきますのでできれば原理を理解しておきたいものです。
ではたのしいRaspberry Pi工作ライフを!!
また何かあれば記事にするかこの記事に追記しますね!!!

参考資料

Raspberry Pi 3 でIPアドレスを固定して、外部からSSH接続できるようにする

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

/etc/default/keyboard を編集して CapsLock を Ctrl にしようとしたのに GNOME デスクトップで適用されなかったときの対処

生じた問題

GNOME デスクトップを使っていて /etc/default/keyboard を編集して、CapsLock を Ctrl にしようとしたのに期待された挙動になりませんでした。

書き込んだ設定

/etc/default/keyboard
# CapsLock をなくして Ctrl にする
XKBOPTIONS="ctrl:nocaps"

期待された挙動

  • CapsLock が Ctrl になる
  • CapsLock の機能をもつキーは消える

実際の挙動

  • CapsLock が Ctrl になる
  • 左 Ctrl が CapsLock の機能になる

この挙動はctrl:nocaps ではなく ctrl:swapcaps の挙動です。仮想コンソールを開くとちゃんと nocaps の仕様になっているようなので、これは GNOME デスクトップの設定と競合しているのだと推測しました。

対処法

ターミナルで dconf-editor を実行します。

$ dconf-editor

GUI の設定画面が開くので org > gnome > desktop > input-sources > xkb-options を開きます。そこに Custom Value 欄があり、['ctrl:nocaps', 'ctrl:swapcaps'] などと並んでいるので必要な内容(ここでは 'ctrl:swapcaps' を削除する)に編集します。

参考資料

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

CentOS8環境でmanpages-jaをインストールする

CentOS8環境では、manpages-jaがパッケージで提供されていないので、日本語のマニュアルがほとんどない。catコマンドなど、基本的なコマンドのマニュアルも英語のものが提供される。
そのままでもいいんだけれど、日本語のマニュアルを入れてみようかなということで、以下でご提供いただいているファイルをダウンロードして、インストールしてみた。
https://linuxjm.osdn.jp/download.html

以下、実行した構文。
以下は、執筆時点の最新のアーカイブ(man-pages-ja-20210215.tar.gz)をダウンロードして、展開。展開したディレクトリをカレントディレクトリにする。

man-pages-jaアーカイブのダウンロードと展開
[...]# curl -O https://linuxjm.osdn.jp/man-pages-ja-20210215.tar.gz
...(実行結果省略)...
[...]# tar xzf man-pages-ja-20210215.tar.gz
[...]# cd man-pages-ja-20210215

以下は、インストール手順。
ほぼアーカイブの中に含まれるINSTALLファイルの通り。めちゃめちゃ親切に書かれている。
インストールに必要なパッケージをdnfでインストールしてから、make configを実行。インストールするマニュアル項目等の指定を行う。enterキーを押すと、既定値で進める。
その後、make installでインストール。
インストールしたマニュアルの索引情報を展開するためにmandbコマンドを実行。

man-pages-jaのインストール
[...]# dnf install perl-Env make
...(実行結果省略)...
[...]# make config
perl -w script/configure.perl
[INSTALLATION INFORMATION]
(just Return if you accept default)
   Install directory   [/usr/share/man/ja_JP.UTF-8] ?:
   compress manual with..
      0: none
      1: gzip
      2: bzip2
      3: compress
   select [0..3] : 1
   uname of page owner [root] ?:
   group of page owner [root] ?:

   Directory:    /usr/share/man/ja_JP.UTF-8
   Compression:  gzip
   Page uid/gid: root/root

All OK? (Yes, [C]ontinue / No, [R]eselect) : C
[INSTALL PACKAGE SELECTION]
(just Return if you accept default choice)
(you can change the default by editing script/pkgs.list)
   [ 0/120] shadow          [Y/n] ?:
...(以降省略)...
[...]# make install
...(実行結果省略)...
[...]# mandb
/usr/share/man/overrides 内の古いデータベース要素を取り除いています...
...(以降省略)...

これで、manコマンドを実行すると、日本語のマニュアルが表示される。もちろんLANG変数の設定とかで、日本語環境になっている必要あり。

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

LinuxサーバでSolidfire iSCSIボリュームをマウントしてみる

LinuxサーバでSolidfire iSCSIボリュームをマウントしてみる

LinuxサーバからSolidfireのiSCSIボリュームをマウントする時の手順の覚書です。

NetAppからテクニカルレポートが提供されているので、そちらも参考にして シンプルにiSCSIボリュームをマウントする手順を記載しています。

なお、Storage側のiSCSIボリューム作成・設定完了済みの前提です。
SolidfireのiSCSiボリューム作成・設定については、
Ansibleを利用したiSCSIボリューム作成の記事があるので、よろしければそちらもどうぞ。

前提

以下の環境で試しています

  • Cent 7.7
  • Solidfire 12.2

作業の流れ

  1. Linuxサーバに iSCSIパッケージ導入
  2. 認証方式にあわせてiscsi.confファイルを編集
  3. iSCSIボリュームを検出
  4. LinuxサーバでLVMボリュームとしてマウントしてみる

1. Linuxサーバに iSCSIパッケージ導入

まずは必要なパッケージを導入

$ sudo yum install –y iscsi-initiator-utils 
- 出力は省略:必要に応じて "y" を入力 -

$ cat /etc/iscsi/initiatorname.iscsi
$ sudo systemctl restart iscsid 
$ sudo systemctl enable iscsid 

2. 認証方式にあわせてiscsi.confファイルを編集

VAG認証方式

VAGでの認証方式(Initiator名とVolumeを紐づけてアクセス許可)を利用する場合は、特にLinuxサーバ側でiscsi.confファイルの設定作業は不要です。

CHAP認証方式

CHAP認証方式を利用する場合は、iscsi.confファイルを編集して、認証情報を記述します。ファイル編集後、設定反映のためiscsidサービスを再起動します。

以下認証情報である前提の記述例を記載します。

項目 備考
認証方式 CHAP
username TenantA
Initiator Secret zp9g_fW_Jt5C4Y6y
Target Secret aZ_RKL_tw8w3_ZuS
$ sudo vi /etc/iscsi/iscsid.conf
ーー追記する内容ーー
node.session.auth.authmethod = CHAP
node.session.auth.username = TenantA
node.session.auth.password = zp9g_fW_Jt5C4Y6y
node.session.auth.username_in = TenantA
node.session.auth.password_in = aZ_RKL_tw8w3_ZuS

discovery.sendtargets.auth.authmethod = CHAP
discovery.sendtargets.auth.username = TenantA
discovery.sendtargets.auth.password = zp9g_fW_Jt5C4Y6y
discovery.sendtargets.auth.username_in = TenantA
discovery.sendtargets.auth.password_in = aZ_RKL_tw8w3_ZuS
ーー追記する内容ーー

$ sudo systemctl restart iscsid 

3. iSCSIボリュームを検出

LinuxサーバでiSCSIボリュームを認識できるようにします。
iSCSIボリュームを検出し、ログインすることで、Linuxサーバがデバイスとして認識します。

$ sudo iscsiadm -m discovery -t st -p <Solidfire SVIP>:3260
$ sudo iscsiadm -m node -L all 

4. LinuxサーバでLVMボリュームとしてマウントしてみる

認識したiSCSiボリュームを、Linuxサーバでマウントしてみます。
今回はLVMボリュームとしてマウントします。

以下パラメータの前提でのコマンド例を記載します。

項目
disk sdb
vg名 vg01
lv名 lvol01
ディレクトリ /sfvol01
$ sudo pvcreate /dev/sdb
$ sudo vgcreate vg01 /dev/sdb
$ sudo lvcreate -l 100%FREE -n lvol01 vg01
$ sudo mkfs.xfs /dev/mapper/vg01-lvol01
$ sudo mkdir /sfvol01
$ sudo mount /dev/mapper/vg01-lvol01 /sfvol01/

なお、/etc/fstabに登録する場合は、"_netdev"のつけ忘れに注意ください。

$ sudo cat /etc/fstab|grep sfvol01
/dev/mapper/vg01-lvol01 /sfvol01        xfs defaults,_netdev 0 0

これで、再起動後も自動的にiSCSIボリュームをマウントしてくれます。

まとめ

LinuxサーバでiSCSIボリュームをマウントする操作を記載してみました。

久しぶりにiSCSIボリュームをマウントしようとすると、コマンドなんだっけとかなることもあるかと思います。
今回は手動でマウント作業を実施しましたが、Ansibleとかの構成管理ツール等で自動化しておくと何かと便利(かも)です。

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