- 投稿日:2021-03-02T23:52:24+09:00
ローカル環境に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=0RHELデフォルトの設定ファイルをそのままにしておくと、外部に問い合わせにいこうとしてエラーを吐くので無効化しておく。
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 ~]#以上です。
- 投稿日:2021-03-02T19:14:03+09:00
findを使ってデータを一か所に集めたい +自動削除も
ユースケース
radikoで録音した音源、クラウドにアップロードしたいが手動のコピーや削除が面倒なので自動化したい
環境
debian_version:9.4
最新〇〇日のデータをコピー
ラジオフォルダに保存されているデータ(サブディレクトリを含む)をクラウドにコピーします
例) ラジオ--- |---オードリーのオールナイトニッポン---20210302オードリーのオールナイトニッポン.mp3 |---有吉弘行のsundaynightdreamer---20210202有吉弘行のsundaynightdreamer.mp3 |---霜降り明星のオールナイトニッポンゼロ---20200103霜降り明星のオールナイトニッポンゼロ.mp3find /録音ディレクトリ -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に登録し、毎日実行させてば自動化されます。
楽しいデータ管理ライフを!
- 投稿日:2021-03-02T18:42:25+09:00
[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
- 投稿日:2021-03-02T16:11:42+09:00
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.2Raspberry 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 eth0WiFiで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で操作できます。
この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工作ライフを!!
また何かあれば記事にするかこの記事に追記しますね!!!参考資料
- 投稿日:2021-03-02T12:37:46+09:00
/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'
を削除する)に編集します。参考資料
- 投稿日:2021-03-02T12:37:28+09:00
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変数の設定とかで、日本語環境になっている必要あり。
- 投稿日:2021-03-02T09:13:56+09:00
LinuxサーバでSolidfire iSCSIボリュームをマウントしてみる
LinuxサーバでSolidfire iSCSIボリュームをマウントしてみる
LinuxサーバからSolidfireのiSCSIボリュームをマウントする時の手順の覚書です。
NetAppからテクニカルレポートが提供されているので、そちらも参考にして シンプルにiSCSIボリュームをマウントする手順を記載しています。
なお、Storage側のiSCSIボリューム作成・設定完了済みの前提です。
SolidfireのiSCSiボリューム作成・設定については、
Ansibleを利用したiSCSIボリューム作成の記事があるので、よろしければそちらもどうぞ。前提
以下の環境で試しています
- Cent 7.7
- Solidfire 12.2
作業の流れ
- Linuxサーバに iSCSIパッケージ導入
- 認証方式にあわせてiscsi.confファイルを編集
- iSCSIボリュームを検出
- 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 iscsid2. 認証方式にあわせて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 iscsid3. iSCSIボリュームを検出
LinuxサーバでiSCSIボリュームを認識できるようにします。
iSCSIボリュームを検出し、ログインすることで、Linuxサーバがデバイスとして認識します。$ sudo iscsiadm -m discovery -t st -p <Solidfire SVIP>:3260 $ sudo iscsiadm -m node -L all4. 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とかの構成管理ツール等で自動化しておくと何かと便利(かも)です。