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

筋トレが仕事です

【gloudコマンド】ファイアーウォール ルールへ複数IPを設定する

f:id:rdwbocungelt5:20180727094804j:plain

いろんなサイトをサーバー移行しています。

その中で、とあるサイトがかなり攻撃を受けるらしく、ストレージをS3に持って行き、サクラVPSで運用しているといったことを聞き、それならいっそのこと攻撃元の海外を全て遮断してしまえばいいんじゃないかと思いやってみました。

gloudコマンドのインストール

まずcurlでとってくる。

$ curl https://sdk.cloud.google.com | bash

Y/nと何回か聞かれるけど、基本的に全部Enterでおk。

最後に

Enter a path to an rc file to update, or leave blank to use [/home/User/.bashrc]:

と聞かれるので、bashrcで管理してる人は特に意識せずそのままEnter。僕はこのまま行きました。

zshだとめんどくさいみたいですけど。

.bashrcを読み込みなおしてwhichでパスが表示されればおk。

$ source ~/.bashrc

$ which gloud
~/google-cloud-sdk/bin/gcloud

gloud initで認証

自分のアカウントにログインします。

$ gcloud init
Welcome! This command will take you through the configuration of gcloud.

Your current configuration has been set to: [default]

You can skip diagnostics next time by using the following flag:
  gcloud init --skip-diagnostics

Network diagnostic detects and fixes local network connection issues.
Checking network connection...done.                                                                                                                                                            
Reachability Check passed.
Network diagnostic (1/1 checks) passed.

You must log in to continue. Would you like to log in (Y/n)?  y

yもしくはEnterを押すと、ブラウザが開いて、googleのアカウントログイン画面に飛びます。

ログインがうまく行けば認証完了。 ターミナルに戻ると、

既存のブラウザ セッションに新しいウィンドウが作成されました。
You are logged in as: [example@test.com].

Pick cloud project to use: 
 [1] test-project
 [2] testtest-project
Please enter numeric choice or text value (must exactly match list item):

と、プロジェクトを既に作成していれば、候補が出てくるので適当に選択します。

次に、リージョンを選択すれば終わりです。僕は面倒だったのでデフォルトのままにしてます。

中国、韓国、北朝鮮のIPを遮断

する前に、リストを作成します。

以下にアクセス。

https://ipv4.fetus.jp/krfilter

cn,kr,kpのnginx用の雛形を開きます。

全てコピーして、vim42.156.0.0/19,の形に総置換、総整形します。

これでおk。

実際には250行ごとに改行をなくす置換したものを使っていきます。

firewallルールの作成

ブラウザ上で作成したものに対してupdateかければ簡単です。

雛形こんな感じ。

f:id:rdwbocungelt5:20180806144637p:plain

ソースIPの範囲は適当で大丈夫です。あとからupdateかけるので。

ちなみに、この一つのルールに255個しか設定できないみたいなので、何個も作る形になります。

根気、大事。

gloudコマンドでfirewallをアップデート

gcloudコマンドはTAB補完が優秀ですね。

それはおいておいて、今回の対象ルールはchina-block-01です。

前に準備しておいた、中国IPを250個くらいコピーして--source-rangesオプションの後にくっつけます。

$ gloud compute firewall-rules update chine-block-01 \
--source-ranges 1.0.1.0/24,1.0.2.0/23,1.0.8.0/21,1.0.32.0/19,1.1.0.0/24,1.1.2.0/23,1.1.4.0/22,1.1.8.0/21,1.1.16.0/20,1.1.32.0/19,1.2.0.0/23,1.2.2.0/24,1.2.4.0/22,1.2.8.0/21,1.2.16.0/20,1.2.32.0/19,1.2.64.0/18,1.3.0.0/16,1.4.1.0/24,1.4.2.0/23,1.4.4.0/22,1.4.8.0/21,1.4.16.0/20,1.4.32.0/19,1.4.64.0/18,1.8.0.0/16,1.10.0.0/21,1.10.8.0/23,1.10.11.0/24,1.10.12.0/22,1.10.16.0/20,1.10.32.0/19,1.10.64.0/18,1.11.0.0/16,1.12.0.0/14,1.16.0.0/14,1.24.0.0/13,1.45.0.0/16,1.48.0.0/14,1.56.0.0/13,1.68.0.0/14,1.80.0.0/12,1.96.0.0/12,1.116.0.0/14,1.176.0.0/15,1.180.0.0/14,1.184.0.0/15,1.188.0.0/14,1.192.0.0/13,1.201.0.0/16,1.202.0.0/15,1.204.0.0/14,1.208.0.0/12,1.224.0.0/11,14.0.0.0/21,14.0.12.0/22,14.0.32.0/19,14.0.64.0/18,14.1.0.0/22,14.1.24.0/22,14.1.96.0/22,14.1.108.0/22,14.4.0.0/14,14.16.0.0/12,14.32.0.0/11,14.64.0.0/11,14.102.128.0/22,14.102.156.0/22,14.102.180.0/22,14.103.0.0/16,14.104.0.0/13,14.112.0.0/12,14.128.128.0/17,14.129.0.0/16,14.130.0.0/15,14.134.0.0/15,14.138.0.0/16,14.144.0.0/12,14.192.60.0/22,14.192.76.0/22,14.192.80.0/20,14.196.0.0/15,14.204.0.0/15,14.206.0.0/16,14.208.0.0/12,27.0.128.0/21,27.0.160.0/21,27.0.188.0/22,27.0.204.0/22,27.0.208.0/21,27.0.236.0/22,27.1.0.0/16,27.8.0.0/13,27.16.0.0/12,27.34.232.0/21,27.35.0.0/16,27.36.0.0/14,27.40.0.0/13,27.50.40.0/21,27.50.128.0/17,27.54.72.0/21,27.54.152.0/21,27.54.192.0/18,27.96.128.0/18,27.98.208.0/20,27.98.224.0/19,27.99.128.0/17,27.100.128.0/17,27.101.0.0/16,27.102.0.0/15,27.106.128.0/18,27.106.204.0/22,27.109.32.0/19,27.109.124.0/22,27.111.96.0/19,27.112.0.0/18,27.112.80.0/20,27.112.112.0/21,27.112.128.0/17,27.113.0.0/17,27.113.128.0/18,27.115.0.0/16,27.116.44.0/22,27.116.64.0/18,27.116.128.0/17,27.117.0.0/16,27.118.64.0/18,27.118.128.0/17,27.119.0.0/16,27.120.0.0/18,27.121.72.0/21,27.121.120.0/21,27.122.128.0/17,27.123.232.0/22,27.124.128.0/17,27.125.0.0/17,27.126.0.0/18,27.128.0.0/15,27.131.220.0/22,27.144.0.0/16,27.148.0.0/14,27.152.0.0/13,27.160.0.0/11,27.192.0.0/11,27.224.0.0/14,27.232.0.0/13,27.255.64.0/18,36.0.0.0/22,36.0.8.0/21,36.0.16.0/20,36.0.32.0/19,36.0.64.0/18,36.0.128.0/17,36.1.0.0/16,36.4.0.0/14,36.16.0.0/12,36.32.0.0/14,36.36.0.0/16,36.37.0.0/19,36.37.36.0/23,36.37.39.0/24,36.37.40.0/21,36.37.48.0/20,36.38.0.0/15,36.40.0.0/13,36.48.0.0/15,36.51.0.0/16,36.56.0.0/13,36.96.0.0/11,36.128.0.0/10,36.192.0.0/11,36.248.0.0/14,36.254.0.0/16,36.255.116.0/22,36.255.128.0/22,36.255.164.0/22,36.255.172.0/22,36.255.176.0/22,36.255.220.0/22,39.0.0.0/24,39.0.2.0/23,39.0.4.0/22,39.0.8.0/21,39.0.16.0/20,39.0.32.0/19,39.0.64.0/18,39.0.128.0/17,39.4.0.0/14,39.16.0.0/12,39.64.0.0/11,39.96.0.0/13,39.104.0.0/14,39.108.0.0/16,39.112.0.0/12,39.128.0.0/10,40.72.0.0/15,40.125.128.0/17,40.126.64.0/18,42.0.0.0/22,42.0.8.0/21,42.0.16.0/21,42.0.24.0/22,42.0.32.0/19,42.0.128.0/17,42.1.0.0/19,42.1.32.0/20,42.1.48.0/21,42.1.56.0/22,42.1.128.0/17,42.4.0.0/14,42.8.0.0/13,42.16.0.0/12,42.32.0.0/12,42.48.0.0/13,42.56.0.0/14,42.62.0.0/17,42.62.128.0/19,42.62.160.0/20,42.62.180.0/22,42.62.184.0/21,42.63.0.0/16,42.80.0.0/15,42.82.0.0/16,42.83.64.0/20,42.83.80.0/22,42.83.88.0/21,42.83.96.0/19,42.83.128.0/17,42.84.0.0/14,42.88.0.0/13,42.96.64.0/19,42.96.96.0/21,42.96.108.0/22,42.96.112.0/20,42.96.128.0/17,42.97.0.0/16,42.99.0.0/18,42.99.64.0/19,42.99.96.0/20,42.99.112.0/22,42.99.120.0/21,42.100.0.0/14,42.120.0.0/15,42.122.0.0/16,42.123.0.0/19,42.123.36.0/22,42.123.40.0/21,42.123.48.0/20,42.123.64.0/18,42.123.128.0/17,42.128.0.0/12

Updated [https://www.googleapis.com/compute/v1/projects/あなたのプロジェクト名/global/firewalls/china-block-01].

問題なければupdatedと出てきます

GCPのファイアーウォールルールを確認すると。。。

f:id:rdwbocungelt5:20180806145520p:plain

(入りきれてないですが)ちゃんと更新されてるのが確認できました\(^o^)/

おわりに

https://cloud.google.com/compute/docs/reference/rest/v1/firewalls/update

ここのTry this APIが固まって使えなかったので、gcloudコマンド入れてやる次第になったのですが、複数一気に追加できるのは凄い便利です。

updateではなくcreateで作った方がいいなと思ったり思わなかったり。

追記

最終的にファイアーウォールルールを24個も作成しました。

同じ作業の繰り返しでうつになるかとおもった。

Google Compute Engineのsshが突然接続できなくなった

f:id:rdwbocungelt5:20180727094804j:plain

いろんなサーバーをGCPに移行していっているんですが、突然ブラウザ上のSSHコンソールが接続できなくなったので対処法を書こうと思います。

環境

原因不明

文字通り突然接続できなくなりました。

他プロジェクトのVMインスタンスでは接続できるのにどうしてこんなことが起こったのか謎。

ちなみにSSHはカスタムポートで動くように設定してます。

ファイアーウォールルールも設定済みで、sshd_configにも記述済みの状態です。

マジ謎。

エラーメッセージ

プロジェクト メタデータへの鍵転送に異常に長い時間がかかっています。インスタンス メタデータに転送する方が所要時間は短くなる可能性がありますが、鍵が転送されるのはこの VM のみになります。この仮想マシンから他の仮想マシンSSH 接続する場合は、鍵を適切に転送する必要があります。 鍵をインスタンス メタデータに転送する場合は、こちらをクリックしてください。この設定は後で変更できず、有効にした後に、[インスタンスの詳細] ページで無効にする必要があります。

日本語でおk

その後に一瞬ですがシリアルコンソール云々という文言が出てきたので、とりあえずVMインスタンスからシリアルコンソールを開きました。

開けない(disabledになっている)方はインスタンスの編集からシリアルポート接続を許可にチェックを入れてください。

やったこと

VMインスタンスから該当のインスタンス名をクリック、その後「シリアルコンソールに接続」で接続できます。

接続するとえげつない量のエラーが。。。

vm google-accounts: ERROR Exception calling the response handler. [Errno 28] No space left on device.#012Traceback (most recent call last):#012  File "/usr/lib/python2.7/site-packages/google_compute_engine/metadata_watcher.py", line 196, in WatchMetadata#012    handler(response)#012  File "/usr/lib/python2.7/site-packages/google_compute_engine/accounts/accounts_daemon.py", line 263, in HandleAccounts#012    self.utils.SetConfiguredUsers(desired_users.keys())#012  File "/usr/lib/python2.7/site-packages/google_compute_engine/accounts/accounts_utils.py", line 288, in SetConfiguredUsers#012    updated_users.flush()#012IOError: [Errno 28] No space left on device

なんか容量っぽい・・・。

# df
ファイルシス   1K-ブロック     使用          使用可     使用%   マウント位置
/dev/sda1       15716368   15716348      20           100%         /
devtmpfs        3481172          0            3481172       0%          /dev
tmpfs              3488804          0            3488804      0%          /dev/shm
tmpfs              3488804      17828        3470976      1%          /run
tmpfs              3488804          0            3488804      0%          /sys/fs/cgroup
tmpfs               697764           0            697764        0%          /run/user/1000
tmpfs               697764           0            697764        0%          /run/user/0

100%

ということで少しファイル数を減らして、容量をあけることにします。

シリアルコンソール接続中も継続的にエラーが出てきてたのですが、容量を開けたら出なくなりました。

SSHコンソールに接続

f:id:rdwbocungelt5:20180727103524p:plain

だめですねぇ :)

もう一回シリアルコンソールに接続して、firewallとselinuxがdisableになっているか確認します。

$ sudo systemctl is-enabled firewalld
disabled

$ getenforce
disabled

どっちもdisabledになってるね。

とりあえずよくわからんからsudo yum updateすると、固まりました\(^o^)/

ctrl + cしてもダメ、ウィンドウ閉じて開き直してもダメ。

いまのところ打つ手なし。

諦めてローカルからSSH

正直ブラウザのコンソールだと感度悪いし、起動速度もそんなに速くないです。

これを機に大人しくローカルから接続する方法に切り替えました。

$ cd ~/.ssh & ssh-keygen -t rsa -b 4096 -C "rdwbocungelt5@gmail.com"
#=> あとは順をおって作成するだけ。

出来上がったrsa.pubをコピーして、GCEのメタデータに貼っつけます。

Compute Engine -> メタデータ -> SSH認証鍵 -> 編集で鍵を貼り付けるだけです。

おわりに

ブラウザからSSHコンソールに接続する方法は解決できませんでしたが、暫定的にローカルからSSHすることで解決させました。

解決策が見つかれば後日追記等したいと思います。





アリーヴェデルチ

後日追記(7 / 31)

久しぶりにブラウザからSSHコンソール開いてみたら何の問題もなく開きました。

時間が解決してくれるってことですかね。

失恋じゃねえんだから。

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してあげる。

※ 該当プロセス全削除は、以下の記事を参照

smot93516.hatenablog.jp

そして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が使えるのはいろいろとはかどりますね。