Rubyと筋肉とギターとわたし

エンジニア二年目の雑魚です。プログラミング・ギター・筋トレのことをメインにブログを書いていきます。

MySQLでユーザーを作成するとAccess Deniedで弾かれる

f:id:rdwbocungelt5:20180718152643p:plain

はい、出ました。

またMySQLのエラー。

zabbixでDB周りの監視をやるための設定をしている時に詰まりました。

ハマった経緯

blog.apar.jp

いつもこちらのサイトを参考にさせてもらってるんですが、 MySQL監視用ユーザー作成の部分で詰まりました。

$ mysql -u root -p
password:

MariaDB [(none)]> grant process on *.* to zabbixagent@localhost identified by '<password>';
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

はい、エラーです。

対処法

まずはmysqlを止める。

$ service mysqld stop

既にzabbixで監視対象にしているので、調査しているときに障害通知メールが来ました。

zabbix優秀ですね。

次に、 --skip-grant-tablesで立ち上げ直す。

$ mysqld_safe --skip-grant-tables

そして、/etc/my.cnf.d/server.cnfにskip-grant-tablesを追加する。

$ vim /etc/my.cnf.d/server.cnf

・
・
・
[mysqld]
・
・
・
skip-grant-tables #=> 僕は最後の行に入れました

[galera]
・
・
・

ここまで終わったら、mysqlを立ち上げ直す。

$ service mysqld start

ここで、mysqlにログインしてみます。--skip-grant-tablesをやっているのでパスワード無しでいけます。

$ mysql -u root

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 3
Server version: 10.1.34-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

念願のcreate userをやってみると・・・

MariaDB [(none)]> create user zabbixagent identified by 'password';
ERROR 1290 (HY000): The MariaDB server is running with the --skip-grant-tables option so it cannot execute this statement

ん〜、だめっぽい。

データベースを見てみると、mysqlってのができているのでみてみると・・・

MariaDB [(none)]> use mysql;

MariaDB[(mysql)]> show tables;
+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| column_stats              |
| columns_priv              |
| db                        |
| event                     |
| func                      |
| general_log               |
| gtid_slave_pos            |
| help_category             |
| help_keyword              |
| help_relation             |
| help_topic                |
| host                      |
| index_stats               |
| innodb_index_stats        |
| innodb_table_stats        |
| plugin                    |
| proc                      |
| procs_priv                |
| proxies_priv              |
| roles_mapping             |
| servers                   |
| slow_log                  |
| table_stats               |
| tables_priv               |
| time_zone                 |
| time_zone_leap_second     |
| time_zone_name            |
| time_zone_transition      |
| time_zone_transition_type |
| user                      |
+---------------------------+

userってとこにありそう。

いろいろ探して、ここを参考に直接userをINSERTしてみました。

ここ↓を参考

stackoverflow.com

MariaDB [mysql]> INSERT INTO mysql.user SET user = 'zabbixagent', host = 'localhost', password = Password('password'),
    -> Select_priv = 'y',
    ->     Insert_priv = 'y',
    ->     Update_priv = 'y',
    ->     Delete_priv = 'y',
    ->     Create_priv = 'y',
    ->     Drop_priv = 'y',
    ->     Reload_priv = 'y',
    ->     Shutdown_priv = 'y',
    ->     Process_priv = 'y',
    ->     File_priv = 'y',
    ->     Grant_priv = 'y',
    ->     References_priv = 'y',
    ->     Index_priv = 'y',
    ->     Alter_priv = 'y',
    ->     Show_db_priv = 'y',
    ->     Super_priv = 'y',
    ->     Create_tmp_table_priv = 'y',
    ->     Lock_tables_priv = 'y',
    ->     Execute_priv = 'y',
    ->     Repl_slave_priv = 'y',
    ->     Repl_client_priv = 'y',
    ->     Create_view_priv = 'y',
  2 # These groups are read by MariaDB server.
    ->     Show_view_priv = 'y',
    ->     Create_routine_priv = 'y',
    ->     Alter_routine_priv = 'y',
    ->     Create_user_priv = 'y',
    ->     Event_priv = 'y',
    ->     Trigger_priv = 'y',
    ->     Create_tablespace_priv = 'y';
Query OK, 1 row affected, 4 warnings (0.00 sec)

おっ、いけた。

userテーブルを見てみると先ほど入れたユーザーが入ってました。

いとをかし。

あと始末

先ほど追加した/etc/my.cnf.d/server.cnfskip-grant-tablesを削除し、mysqlを起動し直します。

これでおkです。

【備忘録】service nginx restartが失敗し、nginx.pidに苦しめられた

f:id:rdwbocungelt5:20180713105520p:plain

サーバー移行でkusanagiwordpressを使うことになり、もちろんそれに伴ってnginxの修正が必要でした。

nginxは前の会社でも苦しめられた経験があったので、懸念してましたが見事にハマりましたね。

環境

エラー内容

/etc/nginx/nginx.confのuserを変更し、service nginx restartをしました(nginx -s reloadだったかも)。

すると。。。

$ service nginx restart

nginx: [error] open() "/var/run/nginx.pid" failed (2: No such file or directory)

/var/run/nginx.pidがないみたい。

なので、ファイルを作ってもう一度nginxを立ち上げます。

$ touch /var/run/nginx.pid && service nginx restart

nginx: [error] invalid PID number "" in "/var/run/nginx.pid"

invalid PID number

これでぐぐると、nginxのプロセス関係でエラってるっぽい。

解決策

$ service nginx stop

$ ps aux | grep nginx

まず、nginxを止めて、出てくるnginxのプロセスを全てkillしてあげる。

そしてnginxを起動し直すと。。。

$ service nginx start
Redirecting to /bin/systemctl start nginx.service

無事起動できました\(^o^)/


やっぱりタッチクリック機能は便利でした

f:id:rdwbocungelt5:20180709232837p:plain

というのも、ついこの前大阪出張で受けたセミナーでThinkPadを使った時からずっと考えてました。

つーか、そもそもThinkPadを買わなかったことを後悔しているんですが。。。



ThinkPadはご存知の通り、トラックパッドの範囲は小さくて手のひら当たらんし、細かい操作のできる赤乳首がある。

非常に使いやすいです。

前の会社でmacを使っていたけど、ThinkPadの使いやすさは遜色ないです。



OSが窓でなければね。

てなわけで、ThinkPadのタッチクリックに感動したので、自分のspectre x360でも復活させました。

まず一つ目の問題

spectre x360をご存知の方はわかる通り、トラックパッドの範囲が異常に広いです。

何も設定せずに使うと、手のひらでマウスカーソルが動き、イライラの絶頂に達します。

いらいらエクスタシー

まずはトラックパッドの検出範囲を変更してください。

過去記事
smot93516.hatenablog.jp

2つめの問題

感度が良すぎる

敏感すぎです。まじで。

なので、タッチ感度を変更します。

過去記事と同じファイル(/etc/X11/xorg.conf.d/50-synaptics.conf)を変更します。

OptionFingerHighというものを設定。

押下時の強さを変更します。

多分50〜設定していきながら調整していけばいいと思います。

↓僕の設定

Section "InputClass"
        Identifier "touchpad catchall"
        Driver "synaptics"
        MatchIsTouchpad "on"
        MatchDevicePath "/dev/input/event*"

        Option "AreaLeftEdge" "2000"
        Option "AreaRightEdge" "5000"
        Option "FingerHigh" "55"
EndSection

だいたい55くらいでいい感じの感度になりました。

おわり

ちなみにspectre x360にデュアルブートしてubuntuを入れてる状態なんですが、タッチパッドのクリック精度があまりよくないです。

それで最近悩んでたので良い機会でした。

ちなみにHPのサポートページに行くとバグってますね。

バグレットパッカード
support.hp.com

非常に困ってます、HPさん。

しっかりしてください。

Androidでgif動画を流す(Kotlin)

f:id:rdwbocungelt5:20180610170837j:plain

Glideを使えば簡単にgif動画を動かすことが出来ます。

Glideの最新はこちら。

↓謎の設計図共有サイト「ギットハブ」

github.com

導入方法はリンク先に乗ってます。

環境

Glide導入

一応やっておきます。

最新が4.7.1です。常にギットハブを確認して導入するようにしてください。

dependencies {
 ・
 ・
 ・
    implementation 'com.github.bumptech.glide:glide:4.7.1'
 ・
 ・
 ・
}

たったこれだけ。アプリケーション配下のgradleへ記述したらおk。

gifのリソースを準備する

app/res/raw配下に入れます。test.gifファイルがあると仮定して進めます。

ImageViewを準備する

gif動画を流すレイアウトファイルにImageViewを準備します。

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".CongratsActivity">

    <ImageView
        android:id="@+id/gifView"
        android:layout_width="304dp"
        android:layout_height="251dp"
        android:layout_marginBottom="56dp"
        android:layout_marginEnd="8dp"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginStart="8dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.125"
        app:layout_constraintStart_toStartOf="parent" />

</android.support.constraint.ConstraintLayout>

ImageViewのIDはgifViewにしてます。他の設定は適当です。

Activity側でgifをセット

package ~~~~~~~~

import android.content.Intent
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.os.Handler
import com.bumptech.glide.Glide
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val gifMovie: Int = R.raw.test
        // gif画像のセット
        Glide.with(this).load(gifMovie).into(gifView)
    }
}

たったこれだけで動きます。素晴らしいですよね。

おわりに

細かい設定は謎の設計図共有サイトを見てやってみてください。

kotlinでgif動画を流すのがなかなかなかったので記事にしてみましたー。

では。

【備忘録】UbuntuへMuseScore2をインストール

f:id:rdwbocungelt5:20180605153558p:plain

公式を見るのが一番はやいかもしれないです。

musescore.org

ただアイコンの作成とかにほんのちょっとだけつまずいたのでメモとして。

環境

  • ubuntu 16.04.1
  • elementary OS 0.4.1 Loki(64bit)

MuseScoreのAppImageを取得

musescore.org

上記URLからAppImageをダウンロードします。

f:id:rdwbocungelt5:20180610120613p:plain

僕のUbuntuは64bitなのでNew computers (64-bit)を選択。

画面遷移し、少しするとダウンロードされます。

ディレクトリの作成から設定

現時点で特に何も設定してなければDownloadディレクトリに保存されていると思います。

Downloadsディレクトリ整理をしたときに誤ってMuseScoreのAppImageファイルを削除してしまったら大変です。

なので、MuseScore用のディレクトリをhomeディレクトリに作成し、AppImageを移動させます。

$ cd ~ && mkdir MuseScore

$ mv ~/Downloads/MuseScore-2.2.1-x86_64.AppImage ~/MuseScore

$ ls ~/MuseScore
MuseScore-2.2.1-x86_64.AppImage

これでおk

アイコンの作成

毎回ターミナルでAppImageを叩くのは面倒くさいので、デスクトップアイコンを作成します。

まずアイコンをgoogleさんから拝借します。

それをMuseScoreディレクトリに配置。
名前は適当に musescore-icon.pngとかにしときます。

次にデスクトップアイコンの設定です。

Ubuntuのデスクトップアイコンは/usr/share/applications配下に設定ファイルがあります。

ここにmusescore.desktopを作成。

$ sudo touch musescore.desktop

vimで設定を記述。

$ sudo vim musescore.desktop

[Desktop Entry] 
Encoding=UTF-8 
Version=2.2.1
Type=Application
Name=MuseScore
Icon=/home/users/MuseScore/musescore-icon.png
Path=/home/users/MuseScore
Exec=/home/users/MuseScore/MuseScore-2.2.1-x86_64.AppImage
StartupNotify=true

# usersは自分のユーザー名
# Nameはデスクトップでの表示名

これでアプリケーションにMuseScoreが表示され、ドックに追加できるようになりました。

終わりに

f:id:rdwbocungelt5:20180610123133p:plain

他のアプリでデスクトップにアイコンを作りたい場合はこれで応用できるかと。

とりあえずLinuxでもMuseScoreが使えるのはいろいろとはかどりますね。

【備忘録】ubuntuでbundle installするとmysqlでこける

なんかrails環境を作ると毎回mysqlに苦しめられる気がします。

環境

  • ubuntu 16.04.1
  • elementary OS 0.4.1 Loki

問題

自分のgithubにある既存のリポジトリをcloneしてからbundle installすると

An error occurred while installing mysql2 (0.4.10), and Bundler cannot continue.
Make sure that `gem install mysql2 -v '0.4.10'` succeeds before bundling.

が出てきたので、ああ、mysqlが入ってなかったんだなとおもったけど、この現象は以前(前の会社の時?)にもあったので

$ gem install mysql2 -v '0.4.10'
Building native extensions. This could take a while...
ERROR:  Error installing mysql2:
    ERROR: Failed to build gem native extension.

    current directory: /home/user/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/mysql2-0.4.10/ext/mysql2
/home/user/.rbenv/versions/2.5.0/bin/ruby -r ./siteconf20180528-25364-imjoq2.rb extconf.rb
checking for rb_absint_size()... yes
checking for rb_absint_singlebit_p()... yes
checking for ruby/thread.h... yes
checking for rb_thread_call_without_gvl() in ruby/thread.h... yes
checking for rb_thread_blocking_region()... no
checking for rb_wait_for_single_fd()... yes
checking for rb_hash_dup()... yes
checking for rb_intern3()... yes
checking for rb_big_cmp()... yes
checking for mysql_query() in -lmysqlclient... no
-----
mysql client is missing. You may need to 'apt-get install libmysqlclient-dev' or 'yum install mysql-devel', and try again.
-----
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers.  Check the mkmf.log file for more details.  You may
need configuration options.

Provided configuration options:
    --with-opt-dir
    --without-opt-dir
    --with-opt-include
    --without-opt-include=${opt-dir}/include
    --with-opt-lib
    --without-opt-lib=${opt-dir}/lib
    --with-make-prog
    --without-make-prog
    --srcdir=.
    --curdir
    --ruby=/home/user/.rbenv/versions/2.5.0/bin/$(RUBY_BASE_NAME)
    --with-mysql-dir
    --without-mysql-dir
    --with-mysql-include
    --without-mysql-include=${mysql-dir}/include
    --with-mysql-lib
    --without-mysql-lib=${mysql-dir}/lib
    --with-mysql-config
    --without-mysql-config
    --with-mysql-dir
    --without-mysql-dir
    --with-mysql-include
    --without-mysql-include=${mysql-dir}/include
    --with-mysql-lib
    --without-mysql-lib=${mysql-dir}/lib
    --with-mysqlclientlib
    --without-mysqlclientlib

To see why this extension failed to compile, please check the mkmf.log which can be found here:

  /home/user/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/extensions/x86_64-linux/2.5.0-static/mysql2-0.4.10/mkmf.log

extconf failed, exit code 1

Gem files will remain installed in /home/user/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/mysql2-0.4.10 for inspection.
Results logged to /home/user/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/extensions/x86_64-linux/2.5.0-static/mysql2-0.4.10/gem_make.out

やっぱ一筋縄では行かない。

えらーめっせ見たら

必要なパッケージが入ってないっぽい。

$ sudo apt install libmysqlclient-dev
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
以下のパッケージが新たにインストールされます:
  libmysqlclient-dev
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 0 個。
1,159 kB のアーカイブを取得する必要があります。
この操作後に追加で 7,021 kB のディスク容量が消費されます。
取得:1 http://jp.archive.ubuntu.com/ubuntu xenial-updates/main amd64 libmysqlclient-dev amd64 5.7.22-0ubuntu0.16.04.1 [1,159 kB]
1,159 kB を 2秒 で取得しました (445 kB/s)     
以前に未選択のパッケージ libmysqlclient-dev を選択しています。
(データベースを読み込んでいます ... 現在 286554 個のファイルとディレクトリがインストールされています。)
.../libmysqlclient-dev_5.7.22-0ubuntu0.16.04.1_amd64.deb を展開する準備をしています ...
libmysqlclient-dev (5.7.22-0ubuntu0.16.04.1) を展開しています...
man-db (2.7.5-1) のトリガを処理しています ...
libmysqlclient-dev (5.7.22-0ubuntu0.16.04.1) を設定しています ...

$ gem install mysql2 -v '0.4.10'
Building native extensions. This could take a while...
Successfully installed mysql2-0.4.10
Parsing documentation for mysql2-0.4.10
Installing ri documentation for mysql2-0.4.10
Done installing documentation for mysql2 after 0 seconds
1 gem installed

行けた〜。

終わり

Welcome to WebsocketRails v0.7.0!

ということでうまく行きましたとさ。

【備忘録】Something went wrongでAndroidのReact Nativeが動かない

npmスタートしてAndroid端末に入れてたexpoを動かそうとしたけど、なんかうまくつながらんかった。

仮想デバイスは遅いので、実機を繋いでやってます。

環境

  • npm 5.6.0
  • node v10.2.1

something went wrong ...

とりあえずsomething went wrongで調べてみたらstackoverflowが出てきた。

以下。

stackoverflow.com

結論

wifiが同じになっていないだけだった。

実機とPCのwifiが別になっていたので上手くExpoが動いてないだけみたい。

こんだけでうまくいくとは思わなんだ。