エンジニアの皆さん、プログラムは好きだけどサーバーやネットワークは苦手と思っている人いませんか?
きっとかなりの数いると思われますが、今どきのWEBエンジニアは、サーバーとプログラムどちらもできるフルスタックでないと意味がありませんよ。
そんな事をいいながらとある東証一部のIT企業でCTOをやりながら、エンジニア育成トレーニングをやってきたのですが、血反吐吐くぐらいの内容にエンジニアはみんなよく弱音を吐いていました。
中には挫折する者、やめていく者、反発するエンジニアもいましたが、今でも繋がっているエンジニアは、非常に優秀な人ばかりなので、安心して仕事をする事ができます。
そんな偉そうなことばかり言っていた僕ですが、ブログ公開しているサーバーのメンテナンスを行っていた時のことです、なんだかいつもとコマンドの感覚が違うな〜と感じていたら、yumコマンドが機能していない事が発覚しました。
これってUbuntuで言うところのapt-getコマンドが機能しなくなるのと同じで新たなモジュールのインストールができないだけでなく、メンテナンスで必要なモジュールアップデートなどもできない状態です。
yumが死ぬってどんな現象?
yumコマンドを実行すると以下のようなメッセージが常に表示されるようになります。
yum update
There was a problem importing one of the Python modules
required to run yum. The error leading to this problem was:
No module named yum
Please install a package which provides this module, or
verify that the module is installed correctly.
It's possible that the above module doesn't match the
current version of Python, which is:
2.7.11 (default, Jul 17 2018, 08:01:33)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-23)]
If you cannot solve this problem yourself, please go to
the yum faq at:
http://yum.baseurl.org/wiki/Faq
なんか、現在のバージョンが2.7.11だけどうまくマッチしないって言ってますね。
表示されているURLに言ってみると、2019/3/19現在、NotFoundになってしまいます。
IT業界の動向、早すぎる・・・
でも諦めてはいけません。
http://yum.baseurl.org/wiki/
上記URLでちゃんと表示されます。
yumはpythonで動いている
上記FAQサイトの「Get Yum」というtgzデータをダウンロードして解凍すると、中身が.py拡張子のファイルがたらふく入っていることが確認できます。
どれをみて分かる通り、yumはpythonで出来ていることが分かります。
そして、この状況は、どうやら、CentOS6でpython2.6からpython2.7にアップデートした時に発生するという事が分かりました。
解決方法
どうやらyumを動かしているbinファイルの書き換えを行う必要があるようです。
とりあえず、以下のコマンドを実行。
$ vi /usr/bin/yum
#!/usr/bin/python
import sys
try:
import yum
except ImportError:
print >> sys.stderr, """\
There was a problem importing one of the Python modules
required to run yum. The error leading to this problem was:
%s
Please install a package which provides this module, or
verify that the module is installed correctly.
It's possible that the above module doesn't match the
current version of Python, which is:
%s
If you cannot solve this problem yourself, please go to
the yum faq at:
http://yum.baseurl.org/wiki/Faq
""" % (sys.exc_value, sys.version)
sys.exit(1)
sys.path.insert(0, '/usr/share/yum-cli')
try:
import yummain
yummain.user_main(sys.argv[1:], exit_code=True)
except KeyboardInterrupt, e:
print >> sys.stderr, "\n\nExiting on user cancel."
sys.exit(1)
yumって結構シンプルな構造で動いている事がわかります。
このファイルの1行目でpythonが定義されていますが、これを以下のように変更します。
#!/usr/bin/python2.6
これで無事にyumコマンドが復活しました。
日進月歩のサーバーメンテナンスですが、こういう事ってやり続けていないと、数年経ってやろうとすると、技術の巻き戻し習得が半端なく大きくなりそうですね。
自分でブログ引用してサーバーメンテナンスをコツコツやる意義、大きいですね。
0 件のコメント:
コメントを投稿