CentOS7 ランレベル変更して起動させる

こんにちはー

 

先日のOSバージョンアップでランレベル5から3に変更してシェルを起動させる必要があったので、その時の手順を記載します。

 

まず簡単に知識のおさらいから実施したいと思います。(間違ってるかもだけど)

ランレベルは起動するときにどのモードで起動するか設定するものになります。Windowsで言うところのsafe modeみたいな感じですね。

 

ランレベルごとの動作

ランレベル 1 :リカバリモード(緊急の時に使用)

ランレベル3:コマンドラインモード

ランレベル5:グラフィカルモード

 

今回はグラフィックのところでトラブルが発生していたので、ランレベルを3にして起動する方法を案内します。

 

ランレベルを変更して起動

まずはLinuxをシャットダウンしてそれからコンソールにつないだ状態で電源を入れて下さい。時間が短いのですが、この画面が出たら3秒以内に何かキーを押して下さい。

f:id:dokokei:20201018164929p:plain

 

通常そのままでOKだと思いますが、おそらく(Core)とか記載されているを選ぶのがよいと思います。 選択したら"e"を押して下さい。

f:id:dokokei:20201018165022p:plain

 

起動するためのシェルが表示されるので、おそらく長い方を選択した状態で"e"を押して下さい。

f:id:dokokei:20201018165123p:plain

 

シェルを編集できる画面になるので、最後に3を付けてエンター

f:id:dokokei:20201018165234p:plain

 

もう一度編集するか聞いてくるので、"b"を押して、編集したシェルで起動を進めます。

f:id:dokokei:20201018165315p:plain

 

こちらの設定変更で問題なくCentOSにて起動することが出来ました。

 

CentOS 6 -> 7 バージョンアップその後に

こんにちはー

 

 

今回は準備万端になりましたので、あとはリブートを実施して普通に起動してきたらOKです。 あっという間にリブートして終了になればよいなと期待していましたがそんなことなく、二日かかりで対応しました。 この記録が少しでも皆さんのお役に立てばよいと思います。

 

では早速rebootこれでうまく起動するかドキドキ

コンソールでつなげて状況を見てみると"kernel panic"が発生してフリーズしていました。強制終了させて、再度起動するとアップデートが始まりました。ちょっとアップデートには時間がかかりますが、完了するとリブートして1つ1つプロセスが起動します。

ところが

[ * ** * ] A start job is running for Wait for Plymouth Boot Screen to Quit ( *** / no limit )

という表示がでて ***の部分に時間がカウントされていますが、すでに12分経っても起動しない 汗

 

WEBで調べてみると45分ぐらいで立ち上がるとも出ているのでとりあえず、もう少し気長に待ってみます。

 

その後45分過ぎてもこのままだったので、ランレベル3に設定をして再度起動を試したらログイン画面が無事に出てきました。 ランレベル3にて起動する方法はちょっと難しいので別に説明したいと思います。

 

sshが出来ない

起動したので、sshをしようとするとできない。sshdが起動していないので起動させましょう。

$ systemctl start sshd
$ systemctl enable sshd

これで今後リブートした時も起動してくれます。

 

grepライブラリ見つからない

grepを実行すると

grep: error while loading shared libraries: libpcre.so.0: cannot open shared object file: No such file or directory

と表示されて実行が出来ない。そこでライブラリを確認

ldd /usr/bin/grep

        linux-vdso.so.1 =>  (0x00007ffdded34000)

        libpcre.so.0 => not found

        libc.so.6 => /lib64/libc.so.6 (0x00007f454e81c000)

        /lib64/ld-linux-x86-64.so.2 (0x00007f454ebea000)

 

libpcre.so.0が見つからないと言っていますので、リンクをコピーしてあげます。

link /usr/lib64/libpcre.so.1 /lib64/libpcre.so.0

再度調べてみると

 ldd /usr/bin/grep

        linux-vdso.so.1 =>  (0x00007ffc2d338000)

        libpcre.so.0 => /lib64/libpcre.so.0 (0x00007fb19969e000)

        libc.so.6 => /lib64/libc.so.6 (0x00007fb1992d0000)

        libpthread.so.0 /lib64/libpthread.so.0 (0x00007fb1990b4000)

        /lib64/ld-linux-x86-64.so.2 (0x00007fb199900000)

これで大丈夫です。

 

Apache起動エラー

次はApatcheの起動です。起動コマンドは変更になっていますが、エラーが次々でてなかなか先に進みません。Apacheは今までは2.2のバージョンを使用していましたが、今回のバージョンアップに伴いバージョンが2.4になっています。この2.2から2.4の変更で大幅にコマンドなどが変更になっているようです。

 

とりあえず起動してみる。

systemctl start httpd

エラーが発生しているのでstatus コマンドで詳細を確認

systemctl status httpd.service

   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)

   Active: failed (Result: exit-code) since 土 2020-10-10 16:12:16 JST; 1min 13s ago

     Docs: man:httpd(8)

           man:apachectl(8)

  Process: 2288 ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND (code=exited, status=1/FAILURE)

 Main PID: 2288 (code=exited, status=1/FAILURE)

 

10月 10 16:12:16 v157-7-142-74.myvps.jp httpd[2288]: [Sat Oct 10 16:12:16.387008 2020] [so:warn] [pid 2288] AH01574: module ...pping

10月 10 16:12:16 v157-7-142-74.myvps.jp httpd[2288]: [Sat Oct 10 16:12:16.387072 2020] [so:warn] [pid 2288] AH01574: module ...pping

10月 10 16:12:16 v157-7-142-74.myvps.jp httpd[2288]: [Sat Oct 10 16:12:16.387096 2020] [so:warn] [pid 2288] AH01574: module ...pping

10月 10 16:12:16 v157-7-142-74.myvps.jp httpd[2288]: [Sat Oct 10 16:12:16.387118 2020] [so:warn] [pid 2288] AH01574: module ...pping

10月 10 16:12:16 v157-7-142-74.myvps.jp httpd[2288]: [Sat Oct 10 16:12:16.387171 2020] [so:warn] [pid 2288] AH01574: module ...pping

10月 10 16:12:16 v157-7-142-74.myvps.jp httpd[2288]: httpd: Syntax error on line 222 of /etc/httpd/conf/httpd.conf: Syntax e...child

10月 10 16:12:16 v157-7-142-74.myvps.jp systemd[1]: httpd.service: main process exited, code=exited, status=1/FAILURE

10月 10 16:12:16 v157-7-142-74.myvps.jp systemd[1]: Failed to start The Apache HTTP Server.

10月 10 16:12:16 v157-7-142-74.myvps.jp systemd[1]: Unit httpd.service entered failed state.

10月 10 16:12:16 v157-7-142-74.myvps.jp systemd[1]: httpd.service failed.

Hint: Some lines were ellipsized, use -l to show in full.

 どうやら -lオプションを指定するともう少し詳細が見れるみたい。

ちなみに.serviceですが、つけなくても正しく動作しました。

systemctl status httpd.service -l

10 10 16:12:16 v157-7-142-74.myvps.jp httpd[2288]: httpd: Syntax error on line 222 of /etc/httpd/conf/httpd.conf: Syntax error on line 1 of /etc/httpd/conf.d/mod_dnssd.conf: Cannot load modules/mod_dnssd.so into server: /etc/httpd/modules/mod_dnssd.so: undefined symbol: unixd_setup_child

 これをみると/etc/httpd/conf.d/mod_dnssd.confのファイルが悪さをしているみたい。名前を変更して、読み込まないようにしてしまおう。結構今まで動作していたけど動作しなくなったコマンドなどがあります。

そのようなコマンドはどんどんコメントつけていきましょう。

詳細はこちらのサイトを見てみましょう。

Apache2.2の設定ファイルをApache2.4に移植するためにやったことまとめ - Qiita

 

Yum update失敗

 yum updateを実行して最新の情報にアップデートしようとしたら、el6のパッケージが絡んでいてエラーになってアップデートができません。

いろいろと細かくアップデートなどを実施してみたのですが、うまくいきませんでした。そこでyumのレポジトリいったん削除(old フォルダを作成してそちらへ移動)させて再度実行。 これはレポジトリがないと怒られて失敗

ちなみにレポジトリは通常「/etc/yum.repos.d」ここに格納されています。

次にCentOS-から始まるレポジトリがあるので、1つ1つoldフォルダから戻していきます。戻した後にファイルを開いていくとel6や6の数字があるものをすべて7に変更してから再度yum update残念ながらこれでも失敗。epelが悪さをしているようです。そこでepelをアップデートするも失敗に終わります。そこで失敗したファイルがel6のパッケージが多いので1つ1つel7にアップデートを試みるのですが

/etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7

このファイルがないと怒られて失敗に終わります。どこかからダウンロードできたのですが見つからないので、こちらに張り付けます。この内容をファイルを作成してみて下さい。

# cat /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.11 (GNU/Linux)

mQINBFKuaIQBEAC1UphXwMqCAarPUH/ZsOFslabeTVO2pDk5YnO96f+rgZB7xArB
OSeQk7B90iqSJ85/c72OAn4OXYvT63gfCeXpJs5M7emXkPsNQWWSju99lW+AqSNm
jYWhmRlLRGl0OO7gIwj776dIXvcMNFlzSPj00N2xAqjMbjlnV2n2abAE5gq6VpqP
vFXVyfrVa/ualogDVmf6h2t4Rdpifq8qTHsHFU3xpCz+T6/dGWKGQ42ZQfTaLnDM
jToAsmY0AyevkIbX6iZVtzGvanYpPcWW4X0RDPcpqfFNZk643xI4lsZ+Y2Er9Yu5
S/8x0ly+tmmIokaE0wwbdUu740YTZjCesroYWiRg5zuQ2xfKxJoV5E+Eh+tYwGDJ
n6HfWhRgnudRRwvuJ45ztYVtKulKw8QQpd2STWrcQQDJaRWmnMooX/PATTjCBExB
9dkz38Druvk7IkHMtsIqlkAOQMdsX1d3Tov6BE2XDjIG0zFxLduJGbVwc/6rIc95
T055j36Ez0HrjxdpTGOOHxRqMK5m9flFbaxxtDnS7w77WqzW7HjFrD0VeTx2vnjj
GqchHEQpfDpFOzb8LTFhgYidyRNUflQY35WLOzLNV+pV3eQ3Jg11UFwelSNLqfQf
uFRGc+zcwkNjHh5yPvm9odR1BIfqJ6sKGPGbtPNXo7ERMRypWyRz0zi0twARAQAB
tChGZWRvcmEgRVBFTCAoNykgPGVwZWxAZmVkb3JhcHJvamVjdC5vcmc+iQI4BBMB
AgAiBQJSrmiEAhsPBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRBqL66iNSxk
5cfGD/4spqpsTjtDM7qpytKLHKruZtvuWiqt5RfvT9ww9GUUFMZ4ZZGX4nUXg49q
ixDLayWR8ddG/s5kyOi3C0uX/6inzaYyRg+Bh70brqKUK14F1BrrPi29eaKfG+Gu
MFtXdBG2a7OtPmw3yuKmq9Epv6B0mP6E5KSdvSRSqJWtGcA6wRS/wDzXJENHp5re
9Ism3CYydpy0GLRA5wo4fPB5uLdUhLEUDvh2KK//fMjja3o0L+SNz8N0aDZyn5Ax
CU9RB3EHcTecFgoy5umRj99BZrebR1NO+4gBrivIfdvD4fJNfNBHXwhSH9ACGCNv
HnXVjHQF9iHWApKkRIeh8Fr2n5dtfJEF7SEX8GbX7FbsWo29kXMrVgNqHNyDnfAB
VoPubgQdtJZJkVZAkaHrMu8AytwT62Q4eNqmJI1aWbZQNI5jWYqc6RKuCK6/F99q
thFT9gJO17+yRuL6Uv2/vgzVR1RGdwVLKwlUjGPAjYflpCQwWMAASxiv9uPyYPHc
ErSrbRG0wjIfAR3vus1OSOx3xZHZpXFfmQTsDP7zVROLzV98R3JwFAxJ4/xqeON4
vCPFU6OsT3lWQ8w7il5ohY95wmujfr6lk89kEzJdOTzcn7DBbUru33CQMGKZ3Evt
RjsC7FDbL017qxS+ZVA/HGkyfiu4cpgV8VUnbql5eAZ+1Ll6Dw==
=hdPa
-----END PGP PUBLIC KEY BLOCK-----

 これで無事にアップデートが完了して、yum updateも成功します。

その後el6のパッケージを一応el7にアップデートしていきます。ちょっと面倒ですがやっておくと後々よいと思うので実施してみてください。

# yum list *el6*
インストール済みパッケージ
grep.x86_64 2.20-6.el6 @base/6
mongodb-org.x86_64 4.2.9-1.el6 @mongodb/6
mongodb-org-mongos.x86_64 4.2.9-1.el6 @mongodb/6
mongodb-org-server.x86_64 4.2.9-1.el6 @mongodb/6
mongodb-org-shell.x86_64 4.2.9-1.el6 @mongodb/6
mongodb-org-tools.x86_64 4.2.9-1.el6 @mongodb/6
mysql-community-client.x86_64 5.6.49-2.el6 @mysql56-community/6
mysql-community-common.x86_64 5.6.49-2.el6 @mysql56-community/6
mysql-community-devel.x86_64 5.6.49-2.el6 @mysql56-community/6
mysql-community-libs.x86_64 5.6.49-2.el6 @mysql56-community/6
mysql-community-release.noarch el6-5 @/mysql-community-release-el6-5.noarch/6
mysql-community-server.x86_64 5.6.49-2.el6 @mysql56-community/6
mysql-connector-python.x86_64 2.1.7-1.el6 @mysql-connectors-community/6
mysql-utilities.noarch 1.6.5-1.el6 @mysql-tools-community/6
mysqlclient16.x86_64 5.1.61-4.ius.el6 @ius/6
python-argparse.noarch 1.2.1-2.1.el6 @base/6
python-iwlib.x86_64 0.1-1.2.el6 @anaconda-CentOS-201303020151.x86_64/6.4
python-prioritized-methods.noarch 0.2.1-5.2.el6 @base/6
python-repoze-what.noarch 1.0.8-6.el6 @anaconda-CentOS-201303020151.x86_64/6.4
python-repoze-what-pylons.noarch 1.0-4.el6 @anaconda-CentOS-201303020151.x86_64/6.4
python36u.x86_64 3.6.8-1.el6.ius @ius/6
python36u-debug.x86_64 3.6.8-1.el6.ius @ius/6
python36u-devel.x86_64 3.6.8-1.el6.ius @ius/6
python36u-gunicorn.noarch 19.8.1-1.ius.el6 @ius/6
python36u-libs.x86_64 3.6.8-1.el6.ius @ius/6
python36u-lxml.x86_64 4.2.0-1.ius.el6 @ius/6
python36u-mod_wsgi.x86_64 4.6.2-1.ius.el6 @ius/6
python36u-pip.noarch 9.0.1-1.ius.el6 @ius/6
python36u-redis.noarch 2.10.6-1.ius.el6 @ius/6
python36u-setproctitle.x86_64 1.1.10-2.ius.el6 @ius/6
python36u-setuptools.noarch 39.0.1-1.ius.el6 @ius/6
python36u-test.x86_64 3.6.8-1.el6.ius @ius/6
python36u-tkinter.x86_64 3.6.8-1.el6.ius @ius/6
python36u-tools.x86_64 3.6.8-1.el6.ius @ius/6
qrencode-libs.x86_64 3.4.2-1.el6 installed

これで一覧が出てきますのでその後出てきたパッケージ名に対して

yum remove [パッケージ名]

yum install [パッケージ名]

 

これを永遠と繰り返します。それでもエラーになってしまうのもありますし、el7にはないパッケージもありますので、その場合はremoveのみで終わらせました。

今現在もかなりのel6パッケージが残っています。 これはまた時間が出来た時にでも整理したいと思います。

 

いったんはこれでCentOS7へのバージョンアップ完了としたいと思います。

 

うまくアップデートできない方はどしどしコメント下さい。出来る限りサポートいたします。

 

 

Cent OS 6 -> 7 バージョンアップの前に

こんにちはー

 

前回の続きでやっとあとはrebootするのみとなったのですが、万が一起動してこなかった場合に戻せなくなる。ということでいったん大事なファイルはバックアップをしておきましょう。

大事なファイルと一言で言ってもわからないので、動かしているアプリケーションベースに整理してみました。 アプリケーションごとにバックアップを取得していけば大丈夫だと思います。

 

・Apatche

MySQL -> バージョン7からはMaria DBに変わるらしい

WordPress

・メール

firewall

もっと入っているかもしれないけど、この辺りが復旧すればなんとかなりそうです。

それぞれのバックアップ方法についてみていきたいと思います。

 

Apatche

・httd.conf

・httd.d フォルダ

・各confファイルに設定されているドキュメント

*今回バージョンアップなのでそのままの構成で使用できていますが、普通に2.4をインストールした場合は/opt/rh/ フォルダ配下にhttpdなどのファイルが格納されるのでかなり環境が変更されてしまいます。

 

Mysql

すべてのDBをバックアップ

# mysqldump --single-transaction -u root -p -x --all-databases > mysql.dump

 

エラー発生 ロックをかけるとエラーになるようです。

 

mysqldump: You can't use --single-transaction and --lock-all-tables at the same time.

 

最終的に--single-transactionのオプションを外してバックアップを取得しました。

# mysqldump -u root -p -x --all-databases > mysql.dump

 

メール(postfix, dovecotで構築)

・cp -pr /etc/postfix/ ./

・cp -pr /etc/dovecot ./

 

メールフォルダバックアップ

・cp -pr /mail ./

 *ちなみにオプションのprですが、属性を出来るだけ保ちながら、ディレクトリごとコピーを実施します。

自分はバーチャル環境のためこのような設定になっています。通常はメールフォルダに格納されていたりspoolフォルダに格納されていますので、確認してみてください。

cat /etc/postfix/main.cf

home_mailbox = Maildir/

virtual_mailbox_base = /mail

mail_spool_directory = /var/spool/mail

 

firewall

自分の場合はシェルを作成して、そのシェルを叩いてファイヤーウォールの適用を実施しているためシェルのバックアップを実施しました。

 

cp -p /root/iptables/iptables_setup.sh ./

 

これだけバックアップを取れたらとりあえず十分です。取得したバックアップファイルをローカルのノートPCなどにダウンロードを実施しましょう。

 

これでやっとリブートが出来ます。リブートするときは必ずコンソールで接続しながら状況を確認しましょう。

sshは基本的に接続できないと考えて下さい。自動起動が削除されています。

 

広告

CentOS 6 -> 7 バージョンアップ

現在CentOS6.10を使用していますが、この度サポートが切れるということでバージョン7へのアップグレードを進めていますが、どうにもこうにも先に進まない状況です。

 

2020/10/4 無事にアップグレード出来ました。

 

【バージョンごとのサポート終了日】

CentOS6 2020-11-30

CentOS7 2024-06-30

CnetOS8 2029-05

 

 

いろいろなサイトを参考にしながら実施していますが、ちょうど一致するものがないんですよね。

 

ぜひこれからアップグレードする人に参考になればと思って現状を残しています。最終的に成功するところまで持っていきたいと思います。

 

バージョンが6.10ではなくて、もう少し低いという人も安心して下さい。同じバージョン6であれば、yum updateをすれば6.10になると思います。

 

 

バージョン確認

cat /etc/redhat-release

CentOS release 6.10 (Final)

yumアップデートと再起動

yum -y update

shutdown -r now

 

アップデートツールインストール

 vi /etc/yum.repos.d/upgradetool.repo

[upg]
name=CentOS-$releasever - Upgrade Tool
baseurl=https://buildlogs.centos.org/centos/6/upg/x86_64/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

 

ツールインストール

yum install redhat-upgrade-tool preupgrade-assistant-contents

 

次にopenscapをダウングレードする必要があります。

rpm -Uhv --oldpackage https://buildlogs.centos.org/centos/6/upg/x86_64/Packages/openscap-1.0.8-1.0.1.el6.centos.x86_64.rpm

 

確認 バージョンが1.0.8-1になっていたらOKです。

yum list installed openscap

インストール済みパッケージ
openscap.x86_64 1.0.8-1.0.1.el6.centos installed

 

アップデートテスト

preupg -s CentOS6_7

インパクトレベルはHighまではなんとかなります。自分の場合デスクトップツールを入れていたためその上のEXTREMEこのレベルまでのエラーが出ると、簡単に次に進めません。自分の場合はX11GNOME を削除したところ、このエラーが消えました。

INPLACERISK: EXTREME: You have GNOME Desktop Environment session as an option in your X11 session manager. GNOME Desktop Environment as a part of the yum group 'Desktop' underwent serious redesign in its user interface as well as underlying technologies in CentOS 7.

アップデート実施

 パターン1

redhat-upgrade-tool-cli --network 7 --cleanup-post --instrepo=https://buildlogs.centos.org/centos/7/os/x86_64-latest/

Continue with the upgrade [Y/N]?y

本当にアップデートするか聞かれるので、yで次に進める。

エラー .treeinfoのchecksumsがおかしいと表示 コマンドを変更して実行

Continue with the upgrade [Y/N]? y
getting boot images...

Downloading failed: invalid data in .treeinfo: No section: 'checksums'

 

パターン2 *sqlite.bz2のファイルが見つからないと出力される。

対象ファイルまではこちらで見つけたのですが、セットしても--addrepoでセットしたけれでも読み込んでもらえませんでした。

http://linorg.usp.br/CentOS/7/os/x86_64/

redhat-upgrade-tool-cli --network 7 --cleanup-post --instrepo=http://vault.centos.org/centos/7.2.1511/os/x86_64/ --addrepo=CentOS7=http://linorg.usp.br/CentOS/7/os/x86_64/

Continue with the upgrade [Y/N]? y
getting boot images...
setting up update...
finding updates 76% [===================================================================================== ]
Downloading failed: failure: repodata/41232548001a78473ae0f2d4b92e1ec28f7a0593e0495056515887fe2a39b416-filelists.sqlite.bz2 from cmdline-instrepo: [Errno 14] PYCURL ERROR 22 - "The requested URL returned error: 404 Not Found"

 

パターン3 成功例

ついに成功することが出来ました。まずポイントとしていくつかまとめます。

 

1. デバックログを出力

redhat-upgrade-tool-cli には-dオプションを付けることによって、ログの詳細を出力することができます。エラーになっている原因の詳細をがわかると思います。

 

2. Yumのレポジトリが影響している

/etc/yum.repos.d/CentOS-Base.repoのファイルを修正すると結果が変わる場合があります。

自分のはこのように修正しました。

[base]

name=CentOS-$releasever - Base

mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra

#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/

gpgcheck=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

 

#released updates

[updates]

name=CentOS-$releasever - Updates

#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$infra

#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/

baseurl=http://vault.centos.org/centos/$releasever/updates/$basearch/

gpgcheck=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

enabled = 0

 

#additional packages that may be useful

[extras]

name=CentOS-$releasever - Extras

mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras&infra=$infra

#mirrorlist=http://mirror.centos.org/centos/7/extras/x86_64/

#baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/

#baseurl=https://buildlogs.centos.org/centos/centos/$releasever/extras/$basearch/

gpgcheck=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

enabled = 0

 

3. 一部のレポジトリを無効にする

 

エラー例

Downloading failed: failure: repodata/3f8a0993e09bacb713c79d070f46307abe476d4c2a59e2c1076d43f920de5a44-filelists.sqlite.bz2 from extras: [Errno 256] No more mirrors to try.

この場合はextrasのレポジトリから見つからないというエラーになっています。そのためextrasのレポジトリを無効にしたら次にすすみました。

 

extrasのレポジトリを無効に設定

yum-config-manager --disable extras

 

成功一部抜粋

rpm install 100% [========================================================================================================================================]
redhat_upgrade_tool.upgrade DEBUG: closing log pipe
redhat_upgrade_tool.rpm INFO: got EOF
redhat_upgrade_tool.rpm INFO: exiting
setting up system for upgrade
redhat_upgrade_tool.sysprep INFO: linking required packages into packagedir
redhat_upgrade_tool.sysprep INFO: packagedir = /var/lib/system-upgrade
redhat_upgrade_tool.sysprep INFO: setting up upgrade symlink: /system-upgrade->/var/lib/system-upgrade
redhat_upgrade_tool.sysprep INFO: creating upgraderoot dir: /system-upgrade-root
redhat_upgrade_tool.sysprep INFO: can't list update img dir /etc/redhat_upgrade_tool/update.img.d: No such file or directory
redhat_upgrade_tool.sysprep INFO: creating module dir /lib/modules/3.10.0-327.el7.x86_64
redhat_upgrade_tool.sysprep INFO: adding new boot entry
Finished. Reboot to start upgrade.

 この後にリブートしたら、完了です。

 リブートしてからもいろいろ実施する必要があるので、別記事でまとめたいと思います。11月でサポートが切れてしまうのでこれからアップデートする人も多いと思います。これからアップデートする方の少しでも役立てばと思っています。

 

参考サイト

CentOS6からCentOS7へアップグレードでdev.centos.orgがリンク切れになっていた - Qiita

CentOS6からCentOS7へのアップグレード手順 | GOISBLOG

CentOS6.9を7.3にアップグレード | Akashic Records

 

広告

【初心者】MongoDB compass接続

Mongo DBの勉強をしようと思ったので、メモを取るつもりでブログを作成していきます。自分がやってみて難しかった点や行き詰ったところを共有して、同じ境遇の人を助けられたらと幸いです。

実際に試した方はうまくいった、いかないなど、コメントもらえるとやる気アップしますのでよろしくお願いします。

環境

OS:CentOS release 6.10
mongo db version: v4.2.6

Compassインストール

mongodbに今まではコンソールより接続していましたが、標準でGUIで接続できるツールを提供しています。mongodbのサイトからダウンロードが可能です。

英語のサイトになりますが、自分の環境に合わせてダウンロードボタンを押したらダウンロードされます。ダウンロードしたらファイルをダブルクリックするとインストールされます。

 

f:id:dokokei:20200524212338p:plain

compass-pic1

設定ファイル修正

sudo vi /etc/mongod.conf

net:
port: 27017
bindIp: 127.0.0.1 # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting

 

こちらが初期設定です。bindIpが127.0.0.1になっていますがこの状態だと外部からの接続ができません。そこでピンポイントで設定を追加しようとしたのですが、どうしても起動時にエラーになって先に進まない状態です。ほかの人のコメントではカンマで区切ればOKということですが、それでもダメでした。そこでIPアドレスの部分を0.0.0.0に設定することによって接続することが出来ました。またこの辺り解明出来たらアップデートします。

2020-05-24T19:06:41.000+0900 I CONTROL [initandlisten] db version v4.2.6
2020-05-24T19:06:41.000+0900 I CONTROL [initandlisten] git version: 20364840b8f1af16917e4c23c1b5f5efd8b352f8
2020-05-24T19:06:41.000+0900 I CONTROL [initandlisten] OpenSSL version: OpenSSL 1.0.1e-fips 11 Feb 2013
2020-05-24T19:06:41.000+0900 I CONTROL [initandlisten] allocator: tcmalloc
2020-05-24T19:06:41.000+0900 I CONTROL [initandlisten] modules: none
2020-05-24T19:06:41.000+0900 I CONTROL [initandlisten] build environment:
2020-05-24T19:06:41.000+0900 I CONTROL [initandlisten] distmod: rhel62
2020-05-24T19:06:41.000+0900 I CONTROL [initandlisten] distarch: x86_64
2020-05-24T19:06:41.000+0900 I CONTROL [initandlisten] target_arch: x86_64
2020-05-24T19:06:41.000+0900 I CONTROL [initandlisten] options: { config: "/etc/mongod.conf", net: { bindIp: "124.211.188.16,127.0.0.1", port: 27019 }, processManagement: { fork: true, pidFilePath: "/var/run/mongodb/mongod.pid", timeZoneInfo: "/usr/share/zoneinfo" }, security: { authorization: "enabled" }, storage: { dbPath: "/var/lib/mongo", journal: { enabled: true } }, systemLog: { destination: "file", logAppend: true, path: "/var/log/mongodb/mongod.log" } }
2020-05-24T19:06:41.001+0900 E STORAGE [initandlisten] Failed to set up listener: SocketException: Cannot assign requested address
2020-05-24T19:06:41.001+0900 I CONTROL [initandlisten] now exiting
2020-05-24T19:06:41.001+0900 I CONTROL [initandlisten] shutting down with code:48
2020-05-24T19:07:44.150+0900 I CONTROL [main] ***** SERVER RESTARTED *****
2020-05-24T19:07:44.156+0900 I CONTROL [main] Automatically disabling TLS 1.0, to force-enable TLS 1.0 specify --sslDisabledProtocols 'none'

エラーになってサーバーが起動出来ない。

以前DBが乗っ取られてしまったので、できるだけセキュリティを高めたいと思っています。ポート番号を変更するのも有効だと思います。

 

 

【初心者】MongoDB データ操作(初級編)

やっと設定が終わったので、ついにデータ操作をやっていこうと思います。

 

挿入(insert)

まずはデータ登録からです。「あれ、先にテーブル作らないとデータはいらないのでは?」と皆さん思うかもしれませんが、MongoDBではテーブルを作成する必要なくデータを入れると、テーブルも作成されます。

まずはデータベースを変更して認証をしましょう。

use [DB name]

db.auth([user name],[password])

 

> db.user.insert( { "name" : "cafe", "display" : "深川のコーヒー屋さん" } )
WriteResult({ "nInserted" : 1 })

データを挿入する場合は、テーブル名を決めます。

今回の例では「user」テーブルにしています。

次に挿入で必要になる情報は列名と値です。この組み合わせでデータを登録していきます。

[列名] : [値] , ・・・ と複数の列を登録することが可能です。

最後にWriteResult({ "nInserted" : 1 })が表示されたらOKです。

MongoDBにはトランザクションという概念がありません。なので毎回SQL分を入力したらcommitされていると考えて下さい。

RDBに慣れていると少し違和感を感じるかもしれないですね。

 

検索(search)

検索はいろんな方法がありますが、ここでは一番標準的な方法を説明します。

> db.user.find()
{ "_id" : ObjectId("5ec110712e8ab128f7593547"), "name" : "metro-kikukawa", "display" : "都営新宿線 菊川駅" }
{ "_id" : ObjectId("5ec11a262e8ab128f7593548"), "name" : "cafe", "display" : "深川のコーヒー屋さん" }

条件を少しつけてみましょう。大カッコをつけて条件を記載します。

> db.user.find({"name":"cafe"})
{ "_id" : ObjectId("5ec11a262e8ab128f7593548"), "name" : "cafe", "display" : "深川のコーヒー屋さん" }

削除(delete)

不要になった行を削除する場合に使用します。

> db.user.remove({ "name" : "cafe" })
WriteResult({ "nRemoved" : 3 })

削除対象を指定することで対象の行のみが削除されます。

もしすべて削除する場合は条件部分をすべて消すと全件のデータが

削除されます。

 

更新(update)

更新方法はたくさんあります、既存のデータを元にさらに追加する方法など様々です。とりあえず今回は一番単純な方法を紹介します。

 

> db.user.update({ "name":"cafe"},{ $set:{"display":"秋葉原のコーヒー屋さん"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

 

今回はデータ操作について説明しました。こちらはまだまださわり部分になりますので今後もう少し高度な部分も紹介できればと思います。

【初心者】MongoDB セキュリティ ユーザー設定

MongoDBは初期設定のままですと、簡単にアクセスされてしまいすぐに乗っ取られてしまいます。 実際に自分も乗っ取られましたww

データはバックアップしてあるので、返して欲しければ、お金を払いなさい的な内容をDBに書き込みされていました。 テストデータしかなかったので、削除して再作成しました。

 

ユーザー作成

まず設定変更が必要で変更前に実施するとauthenticationの設定が必要と記載され エラーになります。

> use admin
switched to db admin
> db.createUser({user:"mongo", pwd:"********", roles:["root"]})
2020-05-08T06:47:08.485+0900 E QUERY [js] uncaught exception: Error: couldn't add user: command createUser requires authentication :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
DB.prototype.createUser@src/mongo/shell/db.js:1370:11
@(shell):1:1
>

 設定ファイルの編集

securityの項目がコメントになっているので#を外して設定を追加します。

その後設定を有効にするために、mongodを再起動します。

sudo vi /etc/mongod.conf

security:
authorization: enabled

 sudo service mongod restart

db.createUser({user:"admin", pwd:"******", roles:["root"]})

2020-05-08T06:47:08.485+0900 E QUERY [js] uncaught exception: Error: couldn' t add user: command createUser requires authentication :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
DB.prototype.createUser@src/mongo/shell/db.js:1370:11
@(shell):1:1

これで完璧と思っていたのですが、うまくユーザー作成ができませんでした。

--authをつけた状態でmongodbを起動するとダメのようで、serviceから起動するとシェルの中で--authが入っていました。そこでコマンドレベルでmongodbを起動します。

sudo mongod

DBファイルがないと怒られます。気を取り直して

sudo mongod --dbpath "/var/lib/mongo/"

無事に起動できたが、プロンプトが戻ってこない汗

この状態でもう一つセッションを別ウインドウで開いて、そこから起動

mongo

use admin

db.createUser({user:"admin", pwd:"******", roles:["root"]})

Successfully added user: { "user" : "admin", "roles" : [ "root" ] }

ついにパスワード設定を入れることが出来ました。

あとは起動させたウインドウの方をCtrl+Dで強制終了させて、通常通りserviceよりmongodbを起動させれば完了!!

と思ったのですが、強制終了させたせいで起動がうまくできなくなってしまいました。sudoコマンドでmongodbを起動したせいで、更新されたファイルの権限がrootに代わってしまったのが原因です。そこで魔法のおまじない

sudo chown -R mongod:mongod /var/lib/mongo/

これで代替回復します。詳しくは起動しなくなった場合の章を参考下さい。

 

認証

それでは早速mongodbに入りなおして認証してみましょう。1と表示されたら成功です。

db.auth("admin","****")

> db.auth("admin","****")
1
>

 

せっかくなので管理用ではなくて、通常ユーザーも作成しましょう。

ユーザー作成するときの注意として、対象のDBに移動してから作成しましょう。adminのまま作成するとadminのDBに作成されてしまいます。

db.createUser({user:"user", pwd:"*****", roles:[{role:"readWrite", db:"new-db"}]})
ユーザーの確認

出来たユーザーを確認してみましょう。

db.system.users.find()

{ "_id" : "admin.admin", "userId" : UUID("cce83463-997b-42f8-8254-695c955add82"), "user" : "admin", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "vFE/ZT4CtjCvRrsfx07Exg==", "storedKey" : "GkRHDZThb0AafrwK/eVhODkkqXA=", "serverKey" : "dMDuAFkBx4KhqHXm9ORSQKv9ecs=" }, "SCRAM-SHA-256" : { "iterationCount" : 15000, "salt" : "NKnIkHUvWctFfwJvbz06TQCTyGSG4g5+l9sIng==", "storedKey" : "1TIzZqKRavlGNBCdSUVffxdy+uMu+NuJZ8SqAR6GSUo=", "serverKey" : "dso3hL8/jyoTBEtlhI9B2HI0e/guy3XsCJsDrt7o4lw=" } }, "roles" : [ { "role" : "root", "db" : "admin" } ] }
{ "_id" : "userdb.user", "userId" : UUID("02eed3e5-fd13-40a5-a033-587e70577fb1"), "user" : "uemori", "db" : "userdb", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "plsoGP1/e6z/p37/3L3z3Q==", "storedKey" : "PMlg5zZrQ2g+VbAHSUFX3nZ91WI=", "serverKey" : "HmKZtD79L8xnriiA9ma8Xov0zvM=" }, "SCRAM-SHA-256" : { "iterationCount" : 15000, "salt" : "42/7CnZM0/bboH87UkxF9D51qTGgxULzHvvm9Q==", "storedKey" : "dtvWj7lmccrsjP1eaZjvdNZTrRkgbkbJBuWxkxOU7/Q=", "serverKey" : "zHgzJyN82zjhBEhtaUjFdt5nPd3RwNmldoVgBTU4ucc=" } }, "roles" : [ { "role" : "readWrite", "db" : "userdb" } ] }

 

ユーザー削除

間違ってユーザーを作成した場合は削除しましょう。

db.system.users.remove({user:"user"})

> db.system.users.remove({user:"user"})
WriteResult({ "nRemoved" : 1 })