Mac OS上のVirtualBoxでゲストOS(Windows)上にファイルを転送する方法。

Windows OS上からリモートデスクトップでリモートサーバにログインしてコピーアンドペーストでファイルを転送したり、FTPソフトウェアを使用してファイルを転送するといった事はよくやっているんだけど、Mac OS上のVirtualBoxに構築されたWindowsのゲストOS上へのファイル転送をはじめてやってみたのでメモ書きとして共有。例えばisoファイルの場合は、ゲストOSにisoファイルをアタッチしてドライブとして見せればいいけど、あるサイトからダウンロードしたtarやzipファイルをゲストOSのデスクトップ等におけるようにしたい場合などで使用する。FTP等でファイル転送を行うのも可能と思うけど、VirtualBoxの仮想ネットワークの設定を変更する必要があったので、今回は、VirtualBox Guestを使用してファイル転送することにした。自分の場合、VIrtual StudioをゲストOS上にインストールしたかったので、今回の方法が一番楽な方法となった。下の図は、Mac OS上のダウンロードフォルダをゲストOSであるWindowsにもネットワークドライブとして参照させている状態。

f:id:umadanshaku:20181211063148p:plain

 

① Virtual Boxを起動して「設定」→「ストレージ」を選択し、VBoxGuestAdditions.isoをゲストOSにアタッチする。

f:id:umadanshaku:20181211064153p:plain

② VBoxGuestAdditionsをインストール

ゲストOSにログインして何も考えず、認識しているドライブからインストーラを起動しインストールを開始します。インストラクションに純粋に従います。

f:id:umadanshaku:20181211064654p:plain

③次にVirtual Box上の共有フォルダーからMac OS上の共有したいフォルダを選択します。自分の場合は、Mac OS上でダウンロードしたものをゲストOSにファイル転送をしたかったのでダウンロードフォルダを共有フォルダとすることにしました。

f:id:umadanshaku:20181211065126p:plain

ちょっとはしょりましたが、ファイル共有したいディレクトリを選択してフォルダ名をつけてOKを選択。

f:id:umadanshaku:20181211065205p:plain

④設定を完了させた後、ゲストOSに再度ログインしNetwork ->  VBOXSVRを選択すると共有されたフォルダが出てきます。もちろん、Windowsの機能の”Run”から”¥¥VBOXSVR”と指定してもアクセス可能。

f:id:umadanshaku:20181211065947p:plain

こんな感じでファイル共有が完了しました。

 

mysqlclientをインストールしようとするとCommand "python setup.py egg_info" failed with error code 1 iのエラーになる。

Python 3.6の環境を新たに作成しmysqlclientをインストールするために以下のコマンド

-----------------

pip install mysqlclient

-----------------

を実行すると以下のエラーに遭遇しました。

-----------------

Collecting mysqlclient

  Using cached mysqlclient-1.3.12.tar.gz

    Complete output from command python setup.py egg_info:

    Traceback (most recent call last):

      File "<string>", line 1, in <module>

      File "/private/var/folders/4u/gkkn775hhg7_zjzhpjhhgga0000gn/T/pip-build-_1ie9suf/mysqlclient/setup.py", line 17, in <module>

        metadata, options = get_config()

      File "/private/var/folders/4u/gkkn775hhg7_zjzhpjhhgga0000gn/T/pip-build-_1ie9suf/cmysqlclient/setup_posix.py", line 54, in get_config

        libraries = [dequote(i[2:]) for i in libs if i.startswith('-l')]

      File "/private/var/folders/4u/gkkn775hhg7_zjzhpjhhgga0000gn/T/pip-build-_1ie9suf/mysqlclient/setup_posix.py", line 54, in <listcomp>

        libraries = [dequote(i[2:]) for i in libs if i.startswith('-l')]

      File "/private/var/folders/4u/ggkkn775hhg7_zjzhpjhhgga0000gn/T/pip-build-_1ie9suf/mysqlclient/setup_posix.py", line 12, in dequote

        if s[0] in "\"'" and s[0] == s[-1]:

    IndexError: string index out of range

    

    ----------------------------------------

Command "python setup.py egg_info" failed with error code 1 in /private/var/folders/4u/gkkn775hhg7_zjzhpjhhgga0000gn/T/pip-build-_1ie9suf/mysqlclient/

-----------------

このエラーに対して/usr/local/bin/mysql_configを変更し再度コマンドを実行すると成功するようになった。

 

変更前

-----------------

libs="-L$pkglibdir"

libs="$libs -l "

-----------------

 

変更後

-----------------

libs="-L$pkglibdir"

libs="$libs -lmysqlclient -lssl -lcrypto”

-----------------

 

コマンドの再実行

-----------------

$pip install mysqlclient

Collecting mysqlclient

  Using cached mysqlclient-1.3.12.tar.gz

Installing collected packages: mysqlclient

  Running setup.py install for mysqlclient ... done

Successfully installed mysqlclient-1.3.12

-----------------

この変更によりエラーが解消されました。

https://github.com/PyMySQL/mysqlclient-python

 

 

 

When I tried to install mysqlclient, Command error with “ Command python setup.py egg_info" failed with error code 1 i” was shown.

 

A Python3.6 project was created and I tried to install mysqlclient with the following command.

――-

pip install mysqlclient

――-

 

But, I encountered the error.

――-

Collecting mysqlclient

  Using cached mysqlclient-1.3.12.tar.gz

    Complete output from command python setup.py egg_info:

    Traceback (most recent call last):

      File "<string>", line 1, in <module>

      File "/private/var/folders/4u/gkkn775hhg7_zjzhpjhhgga0000gn/T/pip-build-_1ie9suf/mysqlclient/setup.py", line 17, in <module>

        metadata, options = get_config()

      File "/private/var/folders/4u/gkkn775hhg7_zjzhpjhhgga0000gn/T/pip-build-_1ie9suf/cmysqlclient/setup_posix.py", line 54, in get_config

        libraries = [dequote(i[2:]) for i in libs if i.startswith('-l')]

      File "/private/var/folders/4u/gkkn775hhg7_zjzhpjhhgga0000gn/T/pip-build-_1ie9suf/mysqlclient/setup_posix.py", line 54, in <listcomp>

        libraries = [dequote(i[2:]) for i in libs if i.startswith('-l')]

      File "/private/var/folders/4u/ggkkn775hhg7_zjzhpjhhgga0000gn/T/pip-build-_1ie9suf/mysqlclient/setup_posix.py", line 12, in dequote

        if s[0] in "\"'" and s[0] == s[-1]:

    IndexError: string index out of range

    

    ----------------------------------------

Command "python setup.py egg_info" failed with error code 1 in /private/var/folders/4u/gkkn775hhg7_zjzhpjhhgga0000gn/T/pip-build-_1ie9suf/mysqlclient/

――-

 

After that, I reviewed the procedure to implement it at github.

https://github.com/PyMySQL/mysqlclient-python

 

According to the instruction, it is need to revise /usr/local/bin/mysql_config file. Afterward, I tried it again.

 

Before the change:

libs="-L$pkglibdir"

libs="$libs -l "

 

After the change:

libs="-L$pkglibdir"

libs="$libs -lmysqlclient -lssl -lcrypto”

 

Perform the command again:

$pip install mysqlclient

Collecting mysqlclient

  Using cached mysqlclient-1.3.12.tar.gz

Installing collected packages: mysqlclient

  Running setup.py install for mysqlclient ... done

Successfully installed mysqlclient-1.3.12

 

 

 

MecabをインストールしてもEUC,EUCと言われたのでUTF-8に直すと文字化けが治りました。

自分の知識が全くなく(Windowsでしか環境構築した事なかった)、構築に時間がかかってしまったのでメモとして残しておきます。

参考にさせて頂いたサイトは、以下の通りです。

qiita.com

MeCab using UTF-8

 

 

-やろうとしている事

Linux環境にMecabをインストールができ、文字化けすることなく利用出来る事

 

-やった事

Mecabをダウンロード、インストール

② 辞書のダウンロード、インストール →参考にさせて頂いたサイトの通りに実施

が、自分の環境だけなのかmecabを実行しても文字化けしてしまって解析結果がうまく取れない。(mecabコマンドの後に日本語を入力しても解析結果が★★みたいに表示されてしまう。)調べてみるとmecabの辞書がEUC-JPになっており、文字化けしてそうだった。実際に、catコマンドで.def,.csvの中身を見てみると文字化けしているし、.defと.csvのファイルをUTF-8にするとうまく動きそうだったのでトライした。nkfコマンドで各ファイルをUTF-8に変換しようとしたけど、自分のLinux環境にはnkfコマンドが入っていなかった。

以下のサイトからnkfのパッケージをダウンロード

Download File List - nkf Network Kanji Filter - OSDN

ダウンロードしたら

make

make installでインストール

 

③本作業に戻って、

-/usr/local/lib/mecab/dic/ipadic

-/usr/local/lib/mecab/dic/naist-jdic

ディレクトリの.def,.csvファイルの以下の感じで文字コードUTF-8に変更。

cd /usr/local/lib/mecab/dic/ipadic

nkf -e --overwrite ./*.csv

nkf -e --overwrite ./*.def

cd /usr/local/lib/mecab/dic/naist-jdic

nkf -e --overwrite ./*.csv

nkf -e --overwrite ./*.def

 以上で、文字化けが治りmecabも使用する事が出来るようになりました。

Windows環境でGitのログイン、パスワードの入力を省略する方法

git環境の構築についてMacLinux環境の設定方法は、色々と出てくるけどWindows環境での構築についてはあまり資料がなかったのでメモとして記載しておきます。まずは、作成したgit環境の構成についてです。

gitサーバ<------------------------------------------>クライアント

Ubuntu                   Windows

 

Windowsでgitクライアント環境を構築しようとするとTortoiseGitとかGit for Windowsのインストールをするかと思います。自分もこれら2つをインストールしてgitクライアント環境を構築しました。また、自宅の環境では、Jenkinsで自動化テストを行っておりジョブが開始されるとgitリポジトリからソースをクローンしてソースのビルドを行いテストを流すというジョブを作成し、運用しています。TortoiseGitとGit for Windowsをインストールしジョブを作成するのですが、毎回ジョブが失敗してしまいます。次に、Jenkinsに登録していたバッチ(リポジトリからクローンを行う)を単体で実行するとどうもクローンするときにユーザ名とパスワードを求められているようでした。そこで、gitからクローン等行うときに毎回パスワード等を求められると思うのですが自動的にログインするように設定しようと考えました。以下の方法は、Tera Termの自動ログインにも参考になると思います。まずは、gitクライアントの方で公開鍵を作成します。作成方法は、いろいろ参考になるサイトがたくさんあるかと思いますが自分はPuTTYgenで秘密鍵と公開鍵を作成しました。PuTTYgenは、TortoiseGitのフォルダの中にありますのでTortoiseGitをインストールしていれば新たにインストール必要がありません。公開鍵と秘密鍵を作成したら公開鍵をgitサーバの方に配置します。以下、サーバ側の設定手順です。

①.sshフォルダの作成 mkdir ./.ssh

②mv <公開鍵> ./.ssh

③cat <公開鍵> | tee -a ./.ssh/authorized_keys

vim /etc/ssh/sshd_configでファイルに鍵の場所を以下の通り、追記

 RSAAuthentication yes
 PubkeyAuthentication yes
 AuthorizedKeysFile      .ssh/authorized_keys

⑤公開鍵の削除

rm <公開鍵> 

⑥サービスの再起動

sudo /etc/init.d/ssh restart

これで、クライアント側で作成された公開鍵がサーバ側に配置されました。

次にクライアント側の設定です。Windowsでは、Pageantを使用しているのですがOSを再起動のたびに毎回鍵をアプリケーションへ認識しなければならないので非常に面倒です。そこでOSが起動するタイミングで鍵を自動的にPageantへ登録するバッチを作成しWindowsのスタートアップの1つとして登録しておきます。このバッチを動かすためにC:\Users\<ユーザ名>\.ssh\というフォルダも作成しておきます。この中に、先ほど作成した秘密鍵を格納しておきます。加えて、GIT_SSHの設定を行う事で、gitコマンドを直接実行してもユーザ名、パスワードの入力を省略することができます。

①バッチの内容

"C:\Program Files\TortoiseGit\bin\pageant.exe" "C:\Users\<ユーザ名>\.ssh\id_rsa.ppk"

②GIT_SSHの設定

環境変数GIT_SSHにTortoisePlink.exeのパスを指定します。

③git clone ssh://ユーザ名@gitリポジトリのパス

※ユーザ名を指定しないとユーザ名を毎回聞かれてしまいます。

 

 

CakePHP+MySQLのcreatedとmodifiedについて

CakePHP+MySQLでフィールドをcreatedとmodifiedの型指定について勉強になった部分があったのでメモとして残す。まず、CakePHPにおけるcreatedとmodifiedについて

 

 

Saving Your Data — CakePHP Cookbook 2.x documentation

By defining a created and/or modified field in your database table as datetime fields (default null), CakePHP will recognize those fields and populate them automatically whenever a record is created or saved to the database (unless the data being saved already contains a value for these fields).

 

The created and modified fields will be set to the current date and time when the record is initially added. The modified field will be updated with the current date and time whenever the existing record is saved.

 

テーブルのカラムの中でcreatedとmodifiedというフィールドを定義しておくとcreatedについては、最初のデータ挿入段階でmodifiedについては、データの更新時に現在の日時を自動的に挿入してくれる。

この中で、自分がはまってしまったのが"createdとmodifiedのカラムの型をdatetimeに指定し、デフォルトをnullにする事"であった。

createdとmodifiedのカラムをdatetime型にしなければいけないという点に気づくまでは、型をtimestampに指定してカラムを作成していた。

MySQLWorkbenchでは、作成出来たのでそのまま実装していた。しかし、データベースサーバを移行させようとmysqldumpコマンドでdumpを取得し新規に立てたデータベースサーバにインポート使用とした時に

f:id:umadanshaku:20150606185916p:plain

TIMESTAMP型のカラムでCURRENT_TIMESTAMPがデフォルトであるものは、1つしか指定できませんというエラーで怒られる。(ERROR 1293:Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause)MySQLってこんな仕様なんだっけといろいろwebで調べてみたらいっぱい出てきてどうやらそのような感じであった。公式ドキュメントを調べてみると

 

MySQL :: MySQL 5.0 Reference Manual :: 11.3.5 Automatic Initialization and Updating for TIMESTAMP

One TIMESTAMP column in a table can have the current timestamp as the default value for initializing the column, as the auto-update value, or both. It is not possible to have the current timestamp be the default value for one column and the auto-update value for another column.

どうやら複数カラム指定した事が仕様と合っていないらしい。

 

対策として

カラムの型をTIMESTAMPからdatetimeに変更しデフォルトをNULLに設定する事で解決した。

◆変更前

  `created` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  `modified` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,

◆変更後

  `created` datetime DEFAULT NULL,
  `modified` datetime DEFAULT NULL,

 

 

Oracle Database 11.2と11.1の違いについて

開発の時にはまったのでメモ

Oracle Database 11.2では下記のSQLが実行できるが 11.1ではオラクルエラーが出力されてしまう。テーブル構成は、次のとおりとする。


担当者マスタ
--------------------------------
担当者ID 担当者名
--------------------------------
受注データ
--------------------------------
受注番号 受注担当者ID
--------------------------------

受注担当者が入力した受注データの数とその受注担当者の名前を出力したい時SQLは、こんな感じ。

ORACLE 11.2

SELECT

       受注担当者ID,
       (SELECT 担当者名

             FROM 担当者マスタ

             WHERE 受注担当者ID=

           担当者マスタ.担当者ID) 担当者名,
       SUM(1)
FROM 受注データ
GROUP BY 受注担当者ID

Oracle Database 11.2ではこのSQLを実行することができる。しかし、11.1では

上記のSQLが実行できず。ORACLE エラー GROUP BY の式ではありませんというオラクルエラーが帰ってくる。11.1の場合は、次のように書き直す必要がある。

SELECT    T1.受注担当者ID,
    (SELECT 担当者名

     FROM 担当者マスタ

    WHERE 担当者マスタ.担当者ID=

    T1.受注担当者ID) 担当者名,

 T1.合計
FROM(
    SELECT 受注担当者ID,
                  SUM(1) 合計
    FROM 受注データ
    GROUP BY 受注担当者ID
    )T1

 

 

NetBeans 「ターゲット・フォルダを作成できません。」

NetBeansのプロジェクト・プロパティで「ファイルをソース・フォルダから別の場所にコピー」というチェックボックスをオンにした時、「ターゲット・フォルダを作成できません。」というコメントが出るときがある。

 

f:id:umadanshaku:20140106224823p:plain

 

この時は、ターゲットフォルダにアクセス権限を与えてあげれば解消される。デフォルトで管理者権限での変更しか出来ないようになっているかもしれない。

 

「フォルダにコピー」に表示されているフォルダを「ls -l」で権限を調べる。

root権限になっていたら、「 chmod」コマンドで権限を変更する。

そうすると、該当のエラーメッセージは解消される。