Flexible Faith

記憶力を頼りに今までやってきたけどもう限界だ…!
備忘録を書くぞーッ!

linux 競合を無視したインストール とmysqlをphpからアクセスしようとして色々

php-mysql をインストールしようとしたものの、何やらファイルの競合でうまくいかなかったので調査。

[root@*** ***]# yum install php-mysql
↓ 
Transaction check error:
  file /usr/share/mysql/charsets/README from install of mariadb-libs-1:5.5.44-1.
el7_1.x86_64 conflicts with file from package MySQL-server-5.6.20-1.linux_glibc2
.5.x86_64
  file /usr/share/mysql/charsets/Index.xml from install of mariadb-libs-1:5.5.44
-1.el7_1.x86_64 conflicts with file from package MySQL-server-5.6.20-1.linux_gli
bc2.5.x86_64
  file /usr/share/mysql/charsets/armscii8.xml from install of mariadb-libs-1:5.5
.44-1.el7_1.x86_64 conflicts with file from package MySQL-server-5.6.20-1.linux_
glibc2.5.x86_64
  file /usr/share/mysql/charsets/ascii.xml from install of mariadb-libs-1:5.5.44
-1.el7_1.x86_64 conflicts with file from package MySQL-server-5.6.20-1.linux_gli
bc2.5.x86_64
  file /usr/share/mysql/charsets/cp1250.xml from install of mariadb-libs-1:5.5.4
4-1.el7_1.x86_64 conflicts with file from package MySQL-server-5.6.20-1.linux_gl
ibc2.5.x86_64
  file /usr/share/mysql/charsets/cp1251.xml from install of mariadb-libs-1:5.5.4
4-1.el7_1.x86_64 conflicts with file from package MySQL-server-5.6.20-1.linux_gl
ibc2.5.x86_64
  file /usr/share/mysql/charsets/cp1256.xml from install of mariadb-libs-1:5.5.4
4-1.el7_1.x86_64 conflicts with file from package MySQL-server-5.6.20-1.linux_gl
ibc2.5.x86_64
  file /usr/share/mysql/charsets/cp1257.xml from install of mariadb-libs-1:5.5.4
4-1.el7_1.x86_64 conflicts with file from package MySQL-server-5.6.20-1.linux_gl
ibc2.5.x86_64
  file /usr/share/mysql/charsets/cp850.xml from install of mariadb-libs-1:5.5.44
-1.el7_1.x86_64 conflicts with file from package MySQL-server-5.6.20-1.linux_gli
bc2.5.x86_64
  file /usr/share/mysql/charsets/cp852.xml from install of mariadb-libs-1:5.5.44
-1.el7_1.x86_64 conflicts with file from package MySQL-server-5.6.20-1.linux_gli
bc2.5.x86_64
  file /usr/share/mysql/charsets/cp866.xml from install of mariadb-libs-1:5.5.44
-1.el7_1.x86_64 conflicts with file from package MySQL-server-5.6.20-1.linux_gli
bc2.5.x86_64
  file /usr/share/mysql/charsets/dec8.xml from install of mariadb-libs-1:5.5.44-
1.el7_1.x86_64 conflicts with file from package MySQL-server-5.6.20-1.linux_glib
c2.5.x86_64
  file /usr/share/mysql/charsets/geostd8.xml from install of mariadb-libs-1:5.5.
44-1.el7_1.x86_64 conflicts with file from package MySQL-server-5.6.20-1.linux_g
libc2.5.x86_64
  file /usr/share/mysql/charsets/greek.xml from install of mariadb-libs-1:5.5.44
-1.el7_1.x86_64 conflicts with file from package MySQL-server-5.6.20-1.linux_gli
bc2.5.x86_64
  file /usr/share/mysql/charsets/hebrew.xml from install of mariadb-libs-1:5.5.4
4-1.el7_1.x86_64 conflicts with file from package MySQL-server-5.6.20-1.linux_gl
ibc2.5.x86_64
  file /usr/share/mysql/charsets/hp8.xml from install of mariadb-libs-1:5.5.44-1
.el7_1.x86_64 conflicts with file from package MySQL-server-5.6.20-1.linux_glibc
2.5.x86_64
  file /usr/share/mysql/charsets/keybcs2.xml from install of mariadb-libs-1:5.5.
44-1.el7_1.x86_64 conflicts with file from package MySQL-server-5.6.20-1.linux_g
libc2.5.x86_64
  file /usr/share/mysql/charsets/koi8r.xml from install of mariadb-libs-1:5.5.44
-1.el7_1.x86_64 conflicts with file from package MySQL-server-5.6.20-1.linux_gli
bc2.5.x86_64
  file /usr/share/mysql/charsets/koi8u.xml from install of mariadb-libs-1:5.5.44
-1.el7_1.x86_64 conflicts with file from package MySQL-server-5.6.20-1.linux_gli
bc2.5.x86_64
  file /usr/share/mysql/charsets/latin1.xml from install of mariadb-libs-1:5.5.4
4-1.el7_1.x86_64 conflicts with file from package MySQL-server-5.6.20-1.linux_gl
ibc2.5.x86_64
  file /usr/share/mysql/charsets/latin2.xml from install of mariadb-libs-1:5.5.4
4-1.el7_1.x86_64 conflicts with file from package MySQL-server-5.6.20-1.linux_gl
ibc2.5.x86_64
  file /usr/share/mysql/charsets/latin5.xml from install of mariadb-libs-1:5.5.4
4-1.el7_1.x86_64 conflicts with file from package MySQL-server-5.6.20-1.linux_gl
ibc2.5.x86_64
  file /usr/share/mysql/charsets/latin7.xml from install of mariadb-libs-1:5.5.4
4-1.el7_1.x86_64 conflicts with file from package MySQL-server-5.6.20-1.linux_gl
ibc2.5.x86_64
  file /usr/share/mysql/charsets/macce.xml from install of mariadb-libs-1:5.5.44
-1.el7_1.x86_64 conflicts with file from package MySQL-server-5.6.20-1.linux_gli
bc2.5.x86_64
  file /usr/share/mysql/charsets/macroman.xml from install of mariadb-libs-1:5.5
.44-1.el7_1.x86_64 conflicts with file from package MySQL-server-5.6.20-1.linux_
glibc2.5.x86_64
  file /usr/share/mysql/charsets/swe7.xml from install of mariadb-libs-1:5.5.44-
1.el7_1.x86_64 conflicts with file from package MySQL-server-5.6.20-1.linux_glib
c2.5.x86_64
  file /usr/share/mysql/czech/errmsg.sys from install of mariadb-libs-1:5.5.44-1
.el7_1.x86_64 conflicts with file from package MySQL-server-5.6.20-1.linux_glibc
2.5.x86_64
  file /usr/share/mysql/danish/errmsg.sys from install of mariadb-libs-1:5.5.44-
1.el7_1.x86_64 conflicts with file from package MySQL-server-5.6.20-1.linux_glib
c2.5.x86_64
  file /usr/share/mysql/dutch/errmsg.sys from install of mariadb-libs-1:5.5.44-1
.el7_1.x86_64 conflicts with file from package MySQL-server-5.6.20-1.linux_glibc
2.5.x86_64
  file /usr/share/mysql/english/errmsg.sys from install of mariadb-libs-1:5.5.44
-1.el7_1.x86_64 conflicts with file from package MySQL-server-5.6.20-1.linux_gli
bc2.5.x86_64
  file /usr/share/mysql/estonian/errmsg.sys from install of mariadb-libs-1:5.5.4
4-1.el7_1.x86_64 conflicts with file from package MySQL-server-5.6.20-1.linux_gl
ibc2.5.x86_64
  file /usr/share/mysql/french/errmsg.sys from install of mariadb-libs-1:5.5.44-
1.el7_1.x86_64 conflicts with file from package MySQL-server-5.6.20-1.linux_glib
c2.5.x86_64
  file /usr/share/mysql/german/errmsg.sys from install of mariadb-libs-1:5.5.44-
1.el7_1.x86_64 conflicts with file from package MySQL-server-5.6.20-1.linux_glib
c2.5.x86_64
  file /usr/share/mysql/greek/errmsg.sys from install of mariadb-libs-1:5.5.44-1
.el7_1.x86_64 conflicts with file from package MySQL-server-5.6.20-1.linux_glibc
2.5.x86_64
  file /usr/share/mysql/hungarian/errmsg.sys from install of mariadb-libs-1:5.5.
44-1.el7_1.x86_64 conflicts with file from package MySQL-server-5.6.20-1.linux_g
libc2.5.x86_64
  file /usr/share/mysql/italian/errmsg.sys from install of mariadb-libs-1:5.5.44
-1.el7_1.x86_64 conflicts with file from package MySQL-server-5.6.20-1.linux_gli
bc2.5.x86_64
  file /usr/share/mysql/japanese/errmsg.sys from install of mariadb-libs-1:5.5.4
4-1.el7_1.x86_64 conflicts with file from package MySQL-server-5.6.20-1.linux_gl
ibc2.5.x86_64
  file /usr/share/mysql/korean/errmsg.sys from install of mariadb-libs-1:5.5.44-
1.el7_1.x86_64 conflicts with file from package MySQL-server-5.6.20-1.linux_glib
c2.5.x86_64
  file /usr/share/mysql/norwegian-ny/errmsg.sys from install of mariadb-libs-1:5
.5.44-1.el7_1.x86_64 conflicts with file from package MySQL-server-5.6.20-1.linu
x_glibc2.5.x86_64
  file /usr/share/mysql/norwegian/errmsg.sys from install of mariadb-libs-1:5.5.
44-1.el7_1.x86_64 conflicts with file from package MySQL-server-5.6.20-1.linux_g
libc2.5.x86_64
  file /usr/share/mysql/polish/errmsg.sys from install of mariadb-libs-1:5.5.44-
1.el7_1.x86_64 conflicts with file from package MySQL-server-5.6.20-1.linux_glib
c2.5.x86_64
  file /usr/share/mysql/portuguese/errmsg.sys from install of mariadb-libs-1:5.5
.44-1.el7_1.x86_64 conflicts with file from package MySQL-server-5.6.20-1.linux_
glibc2.5.x86_64
  file /usr/share/mysql/romanian/errmsg.sys from install of mariadb-libs-1:5.5.4
4-1.el7_1.x86_64 conflicts with file from package MySQL-server-5.6.20-1.linux_gl
ibc2.5.x86_64
  file /usr/share/mysql/russian/errmsg.sys from install of mariadb-libs-1:5.5.44
-1.el7_1.x86_64 conflicts with file from package MySQL-server-5.6.20-1.linux_gli
bc2.5.x86_64
  file /usr/share/mysql/serbian/errmsg.sys from install of mariadb-libs-1:5.5.44
-1.el7_1.x86_64 conflicts with file from package MySQL-server-5.6.20-1.linux_gli
bc2.5.x86_64
  file /usr/share/mysql/slovak/errmsg.sys from install of mariadb-libs-1:5.5.44-
1.el7_1.x86_64 conflicts with file from package MySQL-server-5.6.20-1.linux_glib
c2.5.x86_64
  file /usr/share/mysql/spanish/errmsg.sys from install of mariadb-libs-1:5.5.44
-1.el7_1.x86_64 conflicts with file from package MySQL-server-5.6.20-1.linux_gli
bc2.5.x86_64
  file /usr/share/mysql/swedish/errmsg.sys from install of mariadb-libs-1:5.5.44
-1.el7_1.x86_64 conflicts with file from package MySQL-server-5.6.20-1.linux_gli
bc2.5.x86_64
  file /usr/share/mysql/ukrainian/errmsg.sys from install of mariadb-libs-1:5.5.
44-1.el7_1.x86_64 conflicts with file from package MySQL-server-5.6.20-1.linux_g
libc2.5.x86_64 


rpmコマンドなら、この競合を無視してインストールできるようです。

[root@*** ***]# yumdownloader php-mysql
[root@*** ***]# rpm -ivh --nodeps php-mysql-5.4.16-36.el7_1.x86_64.rpm

↓こちらを参考 
http://flatworld21.blogspot.jp/2012/04/yum-install-php-mysql-error-mysql.html 



これでインストールは無事完了したものの、phpのmysql関係の関数は未だ動作せず。

Fatal error: Call to undefined function mysql_connect() 

直接phpコマンドをたたいてみると、

PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib64/php/module
s/mysql.so' - libmysqlclient.so.18: cannot open shared object file: No such file
 or directory in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib64/php/module
s/mysqli.so' - libmysqlclient.so.18: cannot open shared object file: No such fil
e or directory in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib64/php/module
s/pdo_mysql.so' - libmysqlclient.so.18: cannot open shared object file: No such
file or directory in Unknown on line 0


うーん。もう少し調べて↓の記事を拝見しました。
http://www.geek.sc/archives/717


centosでMysql5.6とPHP5.4.13を共存させると起こるみたい。
ピンポイント過ぎやん。バージョンを見直すか…。 

centos7 にFTPでファイル転送しようとすると 553 Counld not create file.

centos7にvsftpdをインストールしてみました。
FFFTPでファイル一覧は取得できるものの、アップロードは表題のエラーに阻まれて実行できず。
パーミッションの問題でもなさそうなので、ちょっと突っ込んで調べてみると、
SELinuxとやらが原因らしい…よくわからんが…。

↓こちらの記事を参考に
http://akiucida.blogspot.jp/2010/09/centos-ftp553-could-not-create-file.html

/etc/sysconfig/selinuxを編集して、
SELINUX=enforcing

SELINUX=disabled
 
そしてreboot...

これで解決したッ!!!
かと思いきや、今度はFFFTPで接続すらできなくなり、ついでにWebでもアクセスできなくなる始末。
どうやら安易に変更して良いものではなかったようだ…
再起動した時にfirewalldが復活していただけだったッ!!!
chkconfig firewalld off だ!やれやれだぜ全く…

更に調べてみると、
http://blogs.yahoo.co.jp/akubi_es/30768824.html 
こちらの記事によれば、/boot/grub/grub.conf の末尾に selinux=0 を追記しないと起動しなくなるらしいですが、
探してもなかったので無視。さっき再起動したし…。
centosのバージョンが上がってなくなったのかな?

というわけで改めてFFFTPで接続してファイル転送。
成功確認。


追記。
あとでセキュリティを高めるためにSELinuxを有効にする予定がある場合は、
SELINUX=Permissive
にしておくと便利とのこと。
http://park1.wakwak.com/~ima/centos4_selinux0001.html
 

アライメントについて

セーブデータを構造体のバイナリで保存していて、
その構造体に変数を追加したいが、過去バージョンと互換性は保ちたい…という場合、
アライメントを意識する必要があるそうな。

// 32バイトのセーブデータ ver.1
struct savedata
{
char c; // 1byte
char buffer[31]; // バージョンアップしたら、構造体のサイズを維持するため、ここから引いていく
};


↓ ソフトバージョンアップ

// 32バイトのセーブデータ ver.2
struct savedata
{
char c; // 1byte
double d; // 8byte
char buffer[23]; // 8バイトの変数を追加したから、31-8 = 23でサイズは保たれる。かと思いきや…
};

バイト境界が8バイトの場合、1バイトのcの次に8バイトのdを配置すると、dを8バイトごとの区切りでメモリ上に確保しようとするので、cとdの間に7バイトのパディングが入ります。
さらに、構造体そのもののサイズも区切りよくするため、1バイト分のパディングが入り、
1 + 7 + 8 + 23 + 1 = 40バイトの構造体になり、バージョンアップにより互換性が取れなくなってしまいます。
よくわからなくなったら、sizeofで前のバージョンとサイズ比較するのがよさそうです。

この例の場合は、↓のようにするとうまくいくはず。

// 32バイトのセーブデータ ver.2
struct savedata
{
char c; // 1byte
// 7byteのパディングがここに入る
double d; // 8byte
char buffer[16]; // 32 - (1 + 7(padding) + 8) =  16
};


ただし、バイト境界はOSやら何やらで変わったり、パディングしない設定もあるとかなんとか。



<参考>
構造体のサイズとアライメント
カテゴリー
Amazonライブリンク
  • ライブドアブログ