11:ログイン機能をつける

基本方針:これから作るrailsアプリは社内の特定部署の社員しか使わないので、userのデーターベースは作りますが、大げさなgemやrails8から実装されたauthenticationなどは使わず、管理者が直接データーベースにアクセスし、ユーザー名とパスワードを作るようにし、アプリ側からは新規作成、編集、削除など一切作らないようにします。
まずはデーターベースの作成
[fuji@rails8 TourData]$ rails g model user name:string password_digest:string
invoke active_record
create db/migrate/20250820061510_create_users.rb
create app/models/user.rb
invoke test_unit
create test/models/user_test.rb
create test/fixtures/users.yml
[fuji@rails8 TourData]$ rails db:migrate
== 20250820061510 CreateUsers: migrating ======================================
— create_table(:users)
-> 0.0873s
== 20250820061510 CreateUsers: migrated (0.0875s) =
password_digestに注意してください。これは平文でパスワードを入れると、データーベースには暗号化した文字列が入るようになる。
そのためにGEMが必要になるので
[fuji@rails8 TourData]$ gedit Gemfile

# Use Active Storage variants [https://guides.rubyonrails.org/active_storage_overview.html#transforming-images]
# gem “image_processing”, “~> 1.2”
gem “spring-commands-rspec” → これは前に入れた
gem “bcrypt”           → これを追記
group :development, :test do
でお約束の
[fuji@rails8 TourData]$ bundle

で最初にtestユーザーでも作っておく、railsコンソールで作るがその前にusers.rbを設定しておく
[fuji@rails8 TourData]$ gedit app/models/user.rb
class User < ApplicationRecord
   has_secure_password              → これを追記
   validates :name, prsence: true, uniqueness: true → これを追記
end
[fuji@rails8 TourData]$ rails c
tour-data(dev)> User.new( name: ‘ユーザー名’, password: ‘パスワード’, password_confirmation: ‘パスワード’).save
TRANSACTION (0.2ms) BEGIN /*application=’TouData’*/
User Create (1.0ms) INSERT INTO `users` (`name`, `password_digest`, `created_at`, `updated_at`) VALUES 後略
そしてデーターベースにログインし、ユーザーが出来ているか確認した。

ログイン画面を作るが、rails ではセッションを使うので
[fuji@rails8 TourData]$ rails g controller Sessions new
create app/controllers/sessions_controller.rb
  route get “sessions/new”
  invoke erb
  create app/views/sessions
後略
routeの変更するがログイン画面を/loginにしたいので
[fuji@rails8 TourData]$ gedit config/routes.rb
Rails.application.routes.draw do
 #get “sessions/new”       コメントアウトし
 get “/login”, to: “sessions/new”  これを追記
後略
テンプレートを作る
[fuji@rails8 TourData]$ gedit /app/views/sessions.new.html.erb
<h1>ログイン</h1>
<%= form_for(:session, url: login_path) do |f| %>
 <%= f.label :name %>
 <%= f.name_field :name %>
 <%= f.label :password %>
 <%= f.password_field :password %>
 <%= f.submit “Log in” %>
<% end %>

カテゴリー: Ruby on railsに挑戦(almalinux9) | コメントする

10:下準備

springを入れます(これはプリローダーでアプリをバックグランドで走らせてままに出来、rails generate やrake コマンドの起動が早くなるとの事)Gemfileに追記する
[fuji@rails8 TourData]$ gedit Gemfile
前略
# Use Active Storage variants [https://guides.rubyonrails.org/active_storage_overview.html#transforming-images]
# gem “image_processing”, “~> 1.2”
gem “spring-commands-rspec” → これを追記
group :development, :test do

[fuji@rails8 TourData]$ bundle
[fuji@rails8 TourData]$ spring binstub rspec
スプリングが走っているかチェック
[fuji@rails8 TourData]$ spring status
Spring is not running.
なので
[fuji@rails8 TourData]$ spring start
[fuji@rails8 TourData]$ spring status
Spring is running:
140726 spring server | TourData | started 9 secs ago

タイムゾーンとロケールの設定
[fuji@rails8 TourData]$ gedit config/application.rb
config.time_zone = ‘Tokyo’
config.i18n.load_path +=
Dir[Rails.root.join(‘config’, ‘locales’, ‘**’, ‘*.{rb.yml}’).to_s]
config.i18n.default_locale = :ja
この4行をclass と end の中に追記します。(どこでもいいが最後がいいかな)

JavaScriptを圧縮するためにnode.jsを入れますがどのバージョンがあるか調べます。
[fuji@rails8 TourData]$ sudo dnf module list nodejs
前略
nodejs 18 common [d], development, minimal, s2i Javascript runtime
nodejs 20 common [d], development, minimal, s2i Javascript runtime
nodejs 22 common [d], development, minimal, s2i Javascript runtime
後略
なので、22を入れます
[fuji@rails8 TourData]$ sudo dnf module -y install nodejs:22/common

 

カテゴリー: Ruby on railsに挑戦(almalinux9) | コメントする

9:データーベースの設定

Databaseをmariadb(3:10.5.27-1)に変更したので、設定が必要になる。databaseなどを作っていく
[fuji@rails8 TourData]$  sudo mysql
前略
MariaDB [(none)]> grant all privileges on tour_data_development.* to yyyyyyy@localhost identified by “xxxxxxxx”;
Query OK, 0 rows affected (0.001 sec)

MariaDB [(none)]> grant all privileges on tour_data_test.* to yyyyyyy@localhost identified by “xxxxxxxxx”;
Query OK, 0 rows affected (0.002 sec)

MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.000 sec)

MariaDB [(none)]> create database tour_data_development;
Query OK, 1 row affected (0.000 sec)

MariaDB [(none)]> create database tour_data_test;
Query OK, 1 row affected (0.000 sec)

ここで、これから作るrailsアプリを作る,データーベースはmysqlにするが、アプリを置く領域を作ってあるのでそこに移動(30Gibある)
[fuji@rails8 ~]$ cd /rails
[fuji@rails8 Rails]$ rails new TourData -d mysql
     create
     create README.md
     create Rakefile
     create .ruby-version
     create config.ru
     create .gitignore
     create .gitattributes
後略
[fuji@rails8 ~]$ cd TourData
次に設定ファイルの変更
[fuji@rails8 TourData]$  gedit config/database.yml

default: &default
adapter: mysql2
encoding: utf8mb4
pool: <%= ENV.fetch(“RAILS_MAX_THREADS”) { 5 } %>
username: yyyyyyy  ← ここを設定したユーザーに
password: xxxxxxx   ここを設定したパスワードに
socket: /var/lib/mysql/mysql.sock

development:
<<: *default
database: tour_data_development

Gemファイル記載されたパッケージ群の相互依存関係を調べるため
[fuji@rails8 TourData]$ bundle
Bundle complete! 21 Gemfile dependencies, 119 gems now installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.
1 installed gem you directly depend on is looking for funding.
Run `bundle fund` for details

で新規に端末を開いてWEBサーバーを立ち上げるが、この端末はずーっと、サーバーが使用するので、今後のために別の端末を立ち上げそこでサ行をする
[fuji@rails8 TourData]$   rails s

ブラウザでlocalhost:3000にアクセスして、上に画面が出れば正常です。

カテゴリー: Ruby on railsに挑戦(almalinux9) | コメントする

8:railsのデーターベースをmariadbにする

rubyとrailsの設定は終わっているとする(ここを参照
まずはmariadbのインストール
$ sudo dnf install mariadb-server mariadb-devel
注:以前にmysqlなどをインストールしていると/var/lib/mysqlにデーターが残っているのでスタートに失敗するので、/var/lib/mysqlを空にしておくこと。mariadb-develはrailsに必要になります
$ sudo systemctl enable – –now mariadb
ここで以前は mysql_secure_installation などをやっていたのですが、いつのバージョンからは分かりませんが、現在は”unix_socket 認証プラグインを使用するように構成されています。”との事なので、
$ sudo mysql
とやるとログインできます

MariaDB [(none)]> show databases;
+—————————–+
| Database                      |
+—————————–+
| information_schema |
| mysql |
| performance_schema |
+——————————+
3 rows in set (0.001 sec)

MariaDB [(none)]> select user,host,password from mysql.user;
+—————–+————–+————–+
| User               | Host          | Password |
+—————–+————–+————–+
| mariadb.sys | localhost |                    |
| root                 | localhost | invalid     |
| mysql             | localhost | invalid     |
+——————+————-+————–+
3 rows in set (0.003 sec)
と言う分けで,rootのPWは無効化されています。
ちなみにインストールされている物は(mariadbはログアウトしてね)
$ sudo dnf list installed |grep mariadb
mariadb.x86_64                                       3:10.5.27-1.el9_5     @appstream
mariadb-backup.x86_64                       3:10.5.27-1.el9_5      @appstream
mariadb-common.x86_64                    3:10.5.27-1.el9_5      @appstream
mariadb-connector-c.x86_64              3.2.6-1.el9_0              @appstream
mariadb-connector-c-config.noarch 3.2.6-1.el9_0              @appstream
mariadb-connector-c-devel.x86_64   3.2.6-1.el9_0              @appstream
mariadb-connector-c-doc.noarch      3.2.6-1.el9_0              @crb
mariadb-devel.x86_64                           3:10.5.27-1.el9_5       @crb
mariadb-errmsg.x86_64                        3:10.5.27-1.el9_5      @appstream
mariadb-gssapi-server.x86_64             3:10.5.27-1.el9_5      @appstream
mariadb-server.x86_64                          3:10.5.27-1.el9_5      @appstream
mariadb-server-utils.x86_64                3:10.5.27-1.el9_5      @appstream
ここで、databaseのデーターディレクトリーをRailsのデーターディレクトリ(/Rails)と同じ領域に移します。まず、ディレクトリー作成
$ sudo mkdir /Rails/mysql
$ sudo chown mysql. /Rails/mysql
でサーバーの設定ファイル変更
$ sudo gedit /etc/my.cnf.d/mariadb-server.cnf
前略
[mysqld]
datadir=/Rails/mysql      ← ここを変更
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mariadb/mariadb.log
pid-file=/run/mariadb/mariadb.pid
mariadbのデーターの保存場所を変更したので、再起動しておく
$ sudo systemctl restart mariadb

いよいよrailsのプログラムを作成
$ cd /Rails
$ rails new TourData -d mysql
ずらずらとかなりのファイルが作成されるが出来た様だ,なのでディレクトリーを変更
$ cd TourData

9:データーベースの設定 に続く

カテゴリー: Ruby on railsに挑戦(almalinux9) | コメントする

lsyncd をインストールして見た

ファイルサーバーが動いている本番環境では問題があるので、3番目のホストに同期するようにしてテストする。すべて同じネットワークにある。

  1. ホスト名: smb7 ファイルサーバーが動いているサーバー
  2. ホスト名: smb6A ファイルサーバーをコピーしたホスト、IPとホスト名だけを変更、     rsyncで30分毎に同期している。バックアップとしている
  3. ホスト名: smb3 ファイルサーバーをコピーしたホスト、IPとホスト名だけを変更、rsyncで30分毎に同期している。2番目のバックアップとしている

前提:smb3でrsyncの設定が済んでいる亊。私はファイルサーバのバックアップしているので設定は終わっているが、Cronで30分毎のバックアップは止める。
smb6Aでの設定。
先ずはlsyncdのインストール
# dnf install lsyncd
Verは2.2.3がインストールされた。でもってlsyncdの設定
# gedit /etc/lsyncd.conf

このファイルではーーがコメントの様だ。でlsyncdをスタート
# systemctl start lsyncd
# systemctl enable lsyncd
テストをする。smb6Aに何か保存、smb3に反映してるか、保存したファイルを消去、smb3から消えているか。(ただこれは30分毎に本チャンのファイルサーバーから同期が入るので、その影響の無い時間にテストする) 無事確認が済んだ。
少し様子を見てから、本番環境に設定する。

ちなみに、lsyncdはファイルの作製、変更、消去などをOSが通知するのを受けて動作するが、最大数があるので調べて見る
# sysctl -a | grep inotify
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 128
fs.inotify.max_user_watches = 262144
user.max_inotify_instances = 128
user.max_inotify_watches = 262144

fs.inotify.max_queued_eventsとは(googleより)
もし、ファイルシステムの変更が頻繁に発生し、イベントの取りこぼしが発生している可能性がある場合は、max_queued_eventsの値を大きくすることを検討すると良いでしょう。ただし、値を大きくしすぎると、カーネルのメモリ消費量が増加する可能性があるため、適切な値を設定する必要があります。

fs.inotify.max_user_instancesとは(googleより)
このパラメータは、各ユーザーが同時に使用できる inotify インスタンスの数を制限します。inotify インスタンスは、ファイルシステムの監視対象ごとに作成されます。例えば、多数のディレクトリやファイルを監視するアプリケーションでは、多くの inotify インスタンスが必要になります。

fs.inotify.max_user_watchesとは(googleより)
Linuxカーネルのinotifyサブシステムにおける、ユーザーが監視できるファイルの最大数を設定するパラメータです。inotifyは、ファイルシステムの変更を監視するためのカーネル機能で、例えばファイルが作成、削除、変更されたときにアプリケーションに通知を送るのに使われます。fs.inotify.max_user_watches は、inotifyインスタンスごとに監視できるファイルの最大数を制限し、システムリソースの過剰な消費を防ぎます。

 

カテゴリー: Linux運用時のメモ | コメントする

DRBDを止めた

DRBDを止めた理由

1:原因は未だに不明だが、再起動後 pacemaker が良く落ちてクラスターの変更が出来ない。PCSDを使用せず、drbd だけ走らせてもいい(DRBDはファイルサーバーに使っているので、おかしければすぐに社員から連絡が入り対処出きるので、どうしてもクラスターの変更を自動でしなくても良さげ)

2:DRBDは必ず2台以上の運用が前提でこれが極まれに問題になる。1台だけでもそれをPRIMARYにして運用は出来るがこれだとDRBDの意味がない。

3:これがかなり問題になるが問題が出たとき、DRBDのファイルシステムを通常のホストにマウント出来ない(kmod-drbd9xなどをインストールしDRBD対応のカーネルにしてもいいが、検査の為だけに変更するのもなー?)

4:ではどうするか
通常のファイルサーバーと物理的に別のホストでそれぞれファイルサーバーを起動し、メインでないホストはrsyncで30分おきにデータを同期する(lsyncはまだ勉強中)。またさらに、サブの方にファイルサーバーのバックアップ用のホストを作り、やはりrsyncで1時間おきに同期をする。また、ファイルサーバーのデーターをbaculaで1日おきにバックアップする。つまり待機側にはファイルサーバーを2台作っておく。又、デザスターリカバリーの為に物理的にかなり離れた場所に、rsyncでデーターを1時間おきに同期する。
これら4重のホストでデーターを同期している。ファイルサーバーはsambaで運用しているが、今までに瞬電以外で止まった事はない。マイグレーションの時人為ミスで、ファイルサーバーが落ちた事もあったが!

カテゴリー: Linux運用時のメモ | コメントする

thunderbirdのメール保存形式

thunderbird(Windows11)のメール保存形式をmboxからmdirに変更しようとgoogle 先生に聞いたら

具体的な手順 (Thunderbird 128の場合)
Thunderbirdを起動し、メニューから「設定」を選択します。
「一般」→「ネットワークとディスク領域」→「索引データベース」→「新しいアカウントのメッセージ格納形式」を選択します。
「メッセージ単位(maildir形式)」を選択します。

とあったので、まずは現在のメールをどこかのコピーして置く。
私はdefaultの設定から変更し、Dドライブの中にあるが、本来は(googleのIMAPの場合)
Cドライブ→ユーザー→ユーザー名→AppData→Roming→thunderbird→profiles→ランダムな文字→ImapMail→imap.gmail.com(エクスプローラの隠しファイルのチェックをして置く事)
このimap.gmail.comとimap.gmail.com.msfを何処かにコピーして置く
thuderbirdを立ち上げ、右上の3本の横線をクリック→設定→左ペインの一般を選び、右をスクロールダウンし、ネットワークとディスク領域で、索引データベースにある、フォルダー単位(mbox形式)をクリックするとメッセージ単位(mdir形式)を選びthunderbirdをクローズして置く。

imap.gmail.comフォルダーのあった場所にmdir.imap.gmail.com(名前は何でもいい)を作って置く。この設定は既存のメアドには適用されないので、新規にメアドを作るのではなく、既存のメアドを消去し同じメアドを新規に作る。(幸い私はgmailのサーバーに必要なメールは保存してあるので、メアドを削除しても問題ない)そしてthunderbirdを立ち上げ、メニューからツール→アカウント設定→自分のメアド選び、アカウント操作からアカウントを削除をクリックする。そしてさらにアカウント操作からメールアカウントを追加を選び、各設定をしていく。

そうするとサーバーからダウンロードが始まり(私は30GBくらいあったのでかなり時間がかかるので、thunderbirdを立ち上げぱなしにして置く。)
mdir.imap.gmail.comのINBOXを見るとcurとtmpフォルダーが出来ておりcurの中に各メール毎にファイルが出来て行く。これで1日くらいほっておいて、どうなるか見てみる

カテゴリー: Window運用時のメモ, その他 | コメントする

Note PCが真っ黒で何も表示されない

先日、友人がノートPCが壊れたと持って来た。彼はNECに修理見積を取ったらマザーボードやら、欠けたケースやらで10万円以上の金額が出たので、やめたそうで、何とかならないかと持って来たのだ!メーカーがマザーボード交換と言っているので、大変そうだが、ケースの一部が欠けており、聞くと2ヶ月くらい前にテーブルから落としてケースが欠けたそうだが、その後も使えていたとの事。今は時々使える事もあるが、十数回に1回くらいの確立だそうだ。典型的な接触不良だ。最初はBIOSの接触不良だと思ったがもしかして、液晶ディスプレーへの接続線コネクターの接触不良かも知れないと思い、思い切って分解し組み立て直したら見事復活した。これで修理費はゼロ円だ!

右上が本体側のコネクター。はずした画像

ほとんどのノートPCはWifiのアンテナがディスプレーの方に行っているので、それも外す


ディスプレーの画面側

ディスプレーの裏側、コネクターをはずしてある。

分解の方法は各PCで違うので表示していないが、かなりのビスを外す必要があると思う。コネクターは外した後、接点復活剤をスプレーし軽くふき取り、数回抜き差しして接触を戻す。本体側のコネクターはフラットケーブルを上から差し込み、コネクター側の黒いプラスチックを半回転し固定するようになっていると思うが、ここはプラスチックを回転する前に細い角の無いプラスチックで上から数回こする。

これで再組立て後、見事に復活した。

カテゴリー: その他 | コメントする

Failed to start Security Auditing Service.

/var/log/boot.logをチェックしていたら、
Failed to start Security Auditing Service.
が表示されている。早速調べる
# systemctl status auditd
auditd.service: Start request repeated too quickly. の表示があるので、
# gedit /usr/lib/systemd/system/auditd.service
を見ると、Restart=on-failure がある。リスタートの時間を長くするより、リスタートしなようにしてみるので Restart=no に変更して、
# systemctl start auditd
Warning: The unit file, source configuration file or drop-ins of auditd.service changed on disk. Run ‘systemctl daemon-reload’ to reload units.
なので
# systemctl daemon-reload
そして更にスタート
# systemctl start auditd
勿論スタートに失敗するので
# systemctl status auditd
終わりの方に
auditd.service: Control process exited, code=exited status=6
があるので、これをgoogle先生に聞くと
https://discussion.fedoraproject.org/t/failed-to-start-security-auditing-service/77095/3 これによると auditdを再インストールしろとの事
# dnf reinstall audit
# systemctl reset-failed auditd.service
# systemctl start auditd.service
# systemctl status auditd.service
を見るとactive (running) になっているので、一見落着
auditd.serviceRestart=noはそのままにしておく。

カテゴリー: その他 | コメントする

nc経由で、DDでコピー中に頻繁に落ちる

# nc -l 12345 | dd of=/dev/xxxxxx/web
dd: ‘/dev/SubHost6/web’ に書き込み中です: 入力/出力エラーです
write: Broken pipe
1771554+12329 レコード入力
1777472+0 レコード出力
910065664 bytes (910 MB, 868 MiB) copied, 93.1886 s, 9.8 MB/s

# nc -l 12345 | dd of=/dev/xxxxxx/web
dd: ‘/dev/SubHost6/web’ に書き込み中です: 入力/出力エラーです
write: Broken pipe
1771298+12620 レコード入力
1777472+0 レコード出力
910065664 bytes (910 MB, 868 MiB) copied, 96.9826 s, 9.4 MB/s

これは2回だが何度やっても途中でエラーになり書き込めない。
色々調べたが中々原因が判らなかったが、問題はこのデバイス /dev/xxxxxx/webに問題があった。
# xfs_repair /dev/xxxxxx/web

なので、このlvmの領域を再度 xfs でformat する
# mkfs.xfs /dev/xxxxxx/web
で再度 dd でコピーしたら問題なく出来た。

カテゴリー: その他 | コメントする