Proxmoxでサーバ構築

イメージ
これまでテスト用にi5第8世代の廃棄PCを使用してきた。 とはいえ今の所何も問題は起きていないが、入れ替えも視野に入れ予備サーバを用意することに。 - メモリ:16GB - SSD:500GB - DDNS+Let's Encrypt - Ubuntu24.04 この環境なので、すぐに構築し直すことは可能だが、とりあえずこのまま置いておいて別のサーバを立てることにする。 最初はRaspberryPiで構築しようと思ったけれど、本体電源+外付けHDD電源+ディスプレイ電源と考えると、邪魔なので廃案。 そこで廃棄しようと思っていた「Lavie NS300/N」が手元にあったので、これを利用することに。 一応バッテリーは正常に動作するので、UPS代わりにそのまま。 - Core™ i3-8145U(やや非力) - メモリ:8GB(少ないが…) - HDD:1TB なので、これまで使用しているものより、若干スペックダウン。 ただ用途は、非常勤で教えに行っている専門学校生用の練習マシンとする予定なので、まぁ問題なさそう。 Proxmox導入 直接、Linuxを導入してもよいのだけれど、今回は Proxmox を導入し、その上でUbuntu Serverを動作させる計画。 USBにProxmoxのイメージを焼いて、インストールすれば問題なく完了。 ただ、現在のバージョンはdebian - trixieがベースになっているので、若干参考になるサイトが少なめ。とはいえ旧版のは参考になるので調べつつ… HDDなだけあって、最初の起動は少し遅いものの、立ち上がってしまえば問題ない。 さぁ、VMにするかCTにするか…。 GUI使うのであれば、VMかなぁ。サーバだしCTでいいかぁ。 という程度の選定で、CT(コンテナ)で進めることに。 - メモリ:4GB - CPU:2 - HDD:20GB(root disk) - HDD:400GB(home用) - Ubuntu24.04 という構成で進めることにした。 テンプレートを用意して、初期設定を行い起動。 まぁすんなりと入った。 液晶を閉じたら、Suspendになってしまったので、若干設定変更。 $ sudo nano /etc/systemd/logind.conf HandleLidSwitch=ignore $ sudo sy...

グループを別のグループに追加

Linux上での話ですが…

友人より、相談のメールが。
すでにLinux上でユーザを幾つかのグループに分けて管理している。
今回整理統合したのでしょうか、GroupA、GroupBをGroupCに突っ込みたいけど、良い方法は?という質問がありました。

Linuxの場合、プライマリーグループがあってdefaultだとユーザ名と同じグループが作られ、運用しています。
それとは別に、ユーザは他のグループに所属するケースもあるわけで、複数のグループに所属することが可能になっています。

で、その操作を簡単にできるのではないか?ということでした。
結論から言うと、その手のコマンドは存在していないので、標準コマンドで作業を完結することはできないわけです。
じゃぁ、無理なのか?というと、そんなことはなく、ちょっとスクリプトを書けば可能です。

解決方法1

メールの中身を読んだのが、日付が変わる頃だったので、寝ぼけながらも何とか処理できました。

ユーザのグループは、/etc/groupに格納されていて、以下のような構成になっています。

test:x:1003:
test1:x:1004:test2,test3
test2:x:1005:
test3:x:1006:
test4:x:1007:test5
test5:x:1008:

あくまでもサンプルですが、test1グループにユーザtest2,test3がいます。さらにグループtest4にはtest5がいます。
このtest1,test4をグループtestに入れることにします。
最終的には、test=(test2,test3,test5)となればOKと。
※本当は、test1にはユーザtest1、test4にはユーザtest4も入っているんだけど、今回は処理しない前提で行きます。一人くらいなら、手作業で変更できるので…。

考え方

まずは、test1のグループのメンバーを引っ張りだします。

これはgrepを利用すればOK。
$ grep test1 /etc/group
すると
test1:x:1004:test2,test3
という行を得ることができます。欲しいのはtest2,test3の部分なので、切り出します。

$ grep test1 /etc/group | cut -d: -f4
これによって、test2,test3が得られます。
test3の後ろに、改行コードが含まれているので、それを除去し、「,」で切り出します。
ユーザ名の一覧を配列に入れて、グループへの追加コマンドの書式にあわせて出力します。(gpasswdコマンドを利用)
以下、その完成したperlスクリプトです。

#!/usr/bin/perl
# usage: $     ./gag.pl groupA groupB...
#           $ perl gag.pl groupA groupB...
if($#ARGV<1){
  print "usage: ./gag.pl groupA groupB...\n";
}
my $sgroup = $ARGV[0];
for($i=1;$i<=$#ARGV;$i++){
  my $result=`grep ^$ARGV[$i] /etc/group | cut -d: -f4`;
  chomp($result);
  @usr=split(/,/,$result);
  if($usr[0]){
    foreach $u(@usr){ print "/usr/bin/gpasswd -a $u $sgroup\n";}
  }
}
基本的には、複数のグループの処理をまとめてできるようにしたのと、結果は標準出力に吐くようにしています。
処理内容が正しいのを確認して、実行する流れです。
$ perl test test1 test4
これで、標準出力にgpasswdコマンドが自動で出来上がるわけで、そのまま実行するなら
$ perl test test1 test4 | xargs sudo sh
でシェルに流し込めば完了です。
残しておきたいのであれば、 
$ perl test test1 test4 > gag.list
とでもしてリダイレクトしておけば、あとで実行することも可能ですね〜。

よく考えてみたら 

とここまで、perlで作成しておいてなんなんだけど…。スクリプト書く程でもなかったことに気づいてしまって…。

$ grep ^test1 /etc/group | cut -d: -f4 | sed -e 's/,/\n/g' | xargs -i! sudo gpasswd -a ! test 
$ grep ^test4 /etc/group | cut -d: -f4 | sed -e 's/,/\n/g' | xargs -i! sudo gpasswd -a ! test
こんだけでした。test1とtest4のユーザをtestに突っ込むだけなので…。
1行といっても、少々長いかもしれないですが、unixの精神を感じずにはいられないですね〜。

ということで、無事解決法を伝えて完了なり…。
自分も使うことあるかもしれないので、記録しておきます。





コメント

このブログの人気の投稿

Ubuntu24.04 でGUIが死んだ

VirtualBoxが異常

MEGAにも弱点があった?