Symfoware

Symfowareについての考察blog

Snipe-IT を Ubuntu Server 18.04にインストール

IT資産管理ツールの「Snipe-IT」
Ubuntu Server 18.04にインストールしてみます。

Ubuntu Server 18.04
Nginx
MySQL 5.7
php-fpm 7.2

という環境です。


必要なソフト



事前にnginxやphp、MySQLをインストールしておきます。
nginxはextrasじゃなくてもOKです。


$ sudo apt install nginx-extras
$ sudo apt install mysql-server
$ sudo apt install php7.2-fpm php-gd php-mbstring php-curl php-dom php-mysql





ダウンロード



インストール手順はこちらを参考にしました。
https://snipe-it.readme.io/docs/downloading#section-3-download-the-installer

Git Cloneでの資産取得が推奨されているので従います。


$ cd /var/www
$ sudo git clone https://github.com/snipe/snipe-it



ユーザーを変更しておきます。


$ sudo chown -R `whoami`:`whoami` ./snipe-it






設定



続いてConfigurationです。
https://snipe-it.readme.io/docs/configuration

チェックアウトしたディレクトリに移動。
サンプルの設定ファイルをコピーします。


$ cd snipe-it/
$ cp .env.example .env



コピーした設定ファイルを編集。


$ vi .env



最低限変更が必要な箇所はタイムゾーンとデータベースの接続設定です。
環境に合わせて変更します。


# --------------------------------------------
# REQUIRED: BASIC APP SETTINGS
# --------------------------------------------
APP_ENV=production
APP_DEBUG=false
APP_KEY=ChangeMe
APP_URL=null
APP_TIMEZONE='Asia/Tokyo'
APP_LOCALE=ja


# --------------------------------------------
# REQUIRED: DATABASE SETTINGS
# --------------------------------------------
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_DATABASE=snipeit
DB_USERNAME=admin
DB_PASSWORD=P@ssw0rd
DB_PREFIX=null
DB_DUMP_PATH='/usr/bin'
DB_CHARSET=utf8mb4
DB_COLLATION=utf8mb4_unicode_ci







依存しているライブラリのインストール



依存しているライブラリのインストールを行います。
https://snipe-it.readme.io/docs/install-dependencies


$ curl -sS https://getcomposer.org/installer | php
$ php composer.phar install --no-dev --prefer-source



エラーが発生しました。

Loading composer repositories with package information
Installing dependencies from lock file
Warning: The lock file is not up to date with the latest changes in composer.json. You may be getting outdated dependencies. Run update to update them.
Your requirements could not be resolved to an installable set of packages.



ロックファイルを削除してリトライ。


$ rm -f composer.lock
$ php composer.phar install --no-dev --prefer-source



またエラーが発生しました。

Loading composer repositories with package information
Updating dependencies
Your requirements could not be resolved to an installable set of packages.

Problem 1
    - Installation request for laravel/framework 5.4.35 -> satisfiable by laravel/framework[v5.4.35].
    - roave/security-advisories dev-master conflicts with laravel/framework[v5.4.35].
    - Installation request for roave/security-advisories dev-master -> satisfiable by roave/security-advisories[dev-master].




解決はこちらが参考になります。
Composer Security Conflict security-advisories with laravel 5.4.35

composer.jsonからroave/security-advisoriesを削除します。


$ vi composer.json



44行目の指定を削除。


- "roave/security-advisories": "dev-master",



リトライ


$ php composer.phar install --no-dev --prefer-source



これでインストールできました。




初期設定とパーミッション



API Keyを作成します。


$ php artisan key:generate
**************************************
*     Application In Production!     *
**************************************

Do you really wish to run this command? (yes/no) [no]:
> yes




ディレクトリのパーミッションを変更しておきます。


$ chmod -R 777 storage
$ chmod -R 777 public/uploads





データベースの準備



データベースにユーザーとデータベースを作成しておきます。


$ sudo mysql -uroot
mysql> CREATE USER 'admin'@'%' IDENTIFIED BY 'P@ssw0rd';
mysql> GRANT ALL ON *.* TO 'admin'@'%';
mysql> quit



作成したユーザーで接続できるかテストし、データベースを作成します。


$ mysql -uadmin -p
Enter password:

mysql> CREATE DATABASE snipeit CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;





nginxの設定



nginxの設定を変更します。


$ sudo vi /etc/nginx/sites-enabled/default



変更箇所の抜粋です。


server {

        listen 80 default_server;
        listen [::]:80 default_server;

        root /var/www/snipe-it/public;

        # Add index.php to the list if you are using PHP
        index index.php index.html index.htm index.nginx-debian.html;

        server_name 192.168.1.102;

        location / {
                try_files $uri $uri/ /index.php;

                location = /index.php {
                        fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
                        fastcgi_param SCRIPT_FILENAME /var/www/snipe-it/public$fastcgi_script_name;
                        include fastcgi_params;
                }
        }
        location ~ \.php$ {
                return 444;
        }

}



nginxを再起動。


$ sudo service nginx restart



これで設置作業は完了です。




Pre-Flight



ブラウザで表示するとセットアップ画面が表示されます。

917_01.png

「Next: Create Database Tables」をクリックするとテーブルの作成が行われます。
結構時間がかかるようで通信がタイムアウトしました。

作成は途中まで進むようで、何回かこの画面でデータベース作成をクリックすると次に進めます。

917_02.png

初期ユーザーを作成。

917_03.png

これで画面が表示されました。

917_04.png


【参考URL】
https://snipe-it.readme.io/docs/installation
CentOS7 に Snipe-IT を導入
Snipe-IT を Ubuntu 16.04 LTS(AMI) に導入する
https://www.nginx.com/resources/wiki/start/topics/recipes/codeigniter/
Composer Security Conflict security-advisories with laravel 5.4.35

テーマ:サーバ - ジャンル:コンピュータ

  1. 2018/08/25(土) 17:16:50|
  2. 備忘録
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集

Ubuntu Server 18.04.1 sources.listの変更点

nginx-extras
Ubuntu 18.04ではインストールできたのに、
Ubuntu 18.04.1ではインストールできなくて気が付きました。

sources.list



こちらが参考になりました。
Ubuntu 18.04.1を新規インストールするときはapt lineに注意しよう

/etc/apt/sources.listを比較してみます。

・Ubuntu Server 18.04


## Note, this file is written by cloud-init on first boot of an instance
## modifications made here will not survive a re-bundle.
## if you wish to make changes you can:
## a.) add 'apt_preserve_sources_list: true' to /etc/cloud/cloud.cfg
##     or do the same in user-data
## b.) add sources in /etc/apt/sources.list.d
## c.) make changes to template file /etc/cloud/templates/sources.list.tmpl

# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
# newer versions of the distribution.
deb http://archive.ubuntu.com/ubuntu bionic main restricted
deb-src http://archive.ubuntu.com/ubuntu bionic main restricted

## Major bug fix updates produced after the final release of the
## distribution.
deb http://archive.ubuntu.com/ubuntu bionic-updates main restricted
deb-src http://archive.ubuntu.com/ubuntu bionic-updates main restricted

## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team. Also, please note that software in universe WILL NOT receive any
## review or updates from the Ubuntu security team.
deb http://archive.ubuntu.com/ubuntu bionic universe
deb-src http://archive.ubuntu.com/ubuntu bionic universe
deb http://archive.ubuntu.com/ubuntu bionic-updates universe
deb-src http://archive.ubuntu.com/ubuntu bionic-updates universe

## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team, and may not be under a free licence. Please satisfy yourself as to
## your rights to use the software. Also, please note that software in
## multiverse WILL NOT receive any review or updates from the Ubuntu
## security team.
deb http://archive.ubuntu.com/ubuntu bionic multiverse
deb-src http://archive.ubuntu.com/ubuntu bionic multiverse
deb http://archive.ubuntu.com/ubuntu bionic-updates multiverse
deb-src http://archive.ubuntu.com/ubuntu bionic-updates multiverse

## N.B. software from this repository may not have been tested as
## extensively as that contained in the main release, although it includes
## newer versions of some applications which may provide useful features.
## Also, please note that software in backports WILL NOT receive any review
## or updates from the Ubuntu security team.
deb http://archive.ubuntu.com/ubuntu bionic-backports main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu bionic-backports main restricted universe multiverse

deb http://security.ubuntu.com/ubuntu bionic-security main restricted
deb-src http://security.ubuntu.com/ubuntu bionic-security main restricted
deb http://security.ubuntu.com/ubuntu bionic-security universe
deb-src http://security.ubuntu.com/ubuntu bionic-security universe
deb http://security.ubuntu.com/ubuntu bionic-security multiverse
deb-src http://security.ubuntu.com/ubuntu bionic-security multiverse

## Uncomment the following two lines to add software from Canonical's
## 'partner' repository.
## This software is not part of Ubuntu, but is offered by Canonical and the
## respective vendors as a service to Ubuntu users.
# deb http://archive.canonical.com/ubuntu bionic partner
# deb-src http://archive.canonical.com/ubuntu bionic partner




・Ubuntu Server 18.04.1


deb http://archive.ubuntu.com/ubuntu bionic main
deb http://archive.ubuntu.com/ubuntu bionic-security main
deb http://archive.ubuntu.com/ubuntu bionic-updates main



めちゃくちゃあっさりになっていますね。


不足分



今回、nginx-extrasをインストールしたかったので、
以下の3行を/etc/apt/sources.listに追記しました。


deb http://archive.ubuntu.com/ubuntu bionic restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu bionic-security restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu bionic-updates restricted universe multiverse



これでapt searchで発見できるようになりました。


$ sudo apt update
$ apt search nginx-extras
ソート中... 完了
全文検索... 完了
lua-nginx-memcached/bionic 0.10-1 all
Pure Lua memcached client driver for the nginx embedded Lua language

lua-nginx-redis/bionic 0.26-1 all
Pure Lua redis client driver for the nginx embedded Lua language

lua-nginx-websocket/bionic 0.06-1 all
Lua websocket client driver for the nginx embedded Lua language

nginx/bionic 1.14.0-0ubuntu1 all
small, powerful, scalable web/proxy server

nginx-extras/bionic 1.14.0-0ubuntu1 amd64
nginx web/proxy server (extended version)



テーマ:プログラミング - ジャンル:コンピュータ

  1. 2018/08/25(土) 15:41:50|
  2. 備忘録
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集

nginx + php-fpmでfuelphp 1.8.1を動作させる

Ubuntu Server 18.04
nginx
php-fpm

この環境で、fuelphpを動かしてみます。


下準備



こちらを参考に設定します。
URL のリライト - nginx

php-fpmはソケットで待ち受けるよう構成しています。


$ vi /etc/php/7.2/fpm/pool.d/www.conf



listenの設定。


listen = /run/php/php7.2-fpm.sock




fuelphpはzipファイルをダウンロードし、「/var/www/fuelphp」に配置しました。

913_01.png

「oil efine install」で、書き込み権限が必要なディレクトリの設定を変更します。


$ cd /var/www/fuelphp/
$ oil refine install
    Made writable: /var/www/fuelphp/fuel/app/cache
    Made writable: /var/www/fuelphp/fuel/app/logs
    Made writable: /var/www/fuelphp/fuel/app/tmp
    Made writable: /var/www/fuelphp/fuel/app/config





nginxの設定ファイル



nginxの設定ファイルを編集します。


$ sudo vi /etc/nginx/sites-enabled/default



内容は以下のようになりました。


server {
        listen 80 default_server;
        listen [::]:80 default_server;

        root /var/www/fuelphp/public;
        index index.html index.htm index.nginx-debian.html;

        server_name _;

        location / {
                index index.php;
                try_files try_files $uri $uri/ /index.php$is_args$args;
        }

        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
                fastcgi_param FUEL_ENV "development";
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        }

}




設定ファイルを読み込み。


$ sudo service nginx reload



ブラウザで、http://[サーバーIP]を表示すると、こんな画面になるはずです。

913_02.png

テーマ:サーバ - ジャンル:コンピュータ

  1. 2018/07/29(日) 21:13:25|
  2. 備忘録
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集

C言語でMQTTクライアントを動作させる(paho.mqtt.embedded-c)

MQTTブローカー「mosquitto」をインストール。
Pythonクライアントからイベントの送受信を行ってみました。
MQTTブローカー mosquittoをUbuntu 18.04へインストールする
MQTTクライアントpahoでmosquittoに接続する(Python使用)

MQTTクライアントは各種用意されていますが、
今回はC言語にトライしてみようと思います。
Embedded MQTT C/C++ Client Libraries


ソースの取得



gitリポジトリはこちら。
https://github.com/eclipse/paho.mqtt.embedded-c

ソースを取得します。


$ git clone https://github.com/eclipse/paho.mqtt.embedded-c





クライアントプログラム



プログラムの作成はこちらが非常に参考になりました。
ESP8266にMQTTを実装する (その1)

ダウンロードしたソースの中で必要なのは
MQTTPacket/src
の中身一式です。

912_01.png

「src」を「packet」にリネームして、これから作成するプログラムを配置する
ディレクトリにコピーしました。

912_02.png

もう一箇所
「samples」にある
・pub0sub1.c
・transport.c
・transport.h

をコピーしておきます。

912_03.png

最終的なフォルダ階層はこうなりました。

912_04.png


ここから、「pub0sub1.c」を一箇所編集します。
59行目、「char *host」の指定をMQTTサーバーのIPアドレスに変更。


  1. /*******************************************************************************
  2. * Copyright (c) 2014 IBM Corp.
  3. *
  4. * All rights reserved. This program and the accompanying materials
  5. * are made available under the terms of the Eclipse Public License v1.0
  6. * and Eclipse Distribution License v1.0 which accompany this distribution.
  7. *
  8. * The Eclipse Public License is available at
  9. *    http://www.eclipse.org/legal/epl-v10.html
  10. * and the Eclipse Distribution License is available at
  11. * http://www.eclipse.org/org/documents/edl-v10.php.
  12. *
  13. * Contributors:
  14. *    Ian Craggs - initial API and implementation and/or initial documentation
  15. *    Sergio R. Caprile - clarifications and/or documentation extension
  16. *******************************************************************************/
  17. #include <stdio.h>
  18. #include <string.h>
  19. #include <stdlib.h>
  20. #include "MQTTPacket.h"
  21. #include "transport.h"
  22. /* This is in order to get an asynchronous signal to stop the sample,
  23. as the code loops waiting for msgs on the subscribed topic.
  24. Your actual code will depend on your hw and approach*/
  25. #include <signal.h>
  26. int toStop = 0;
  27. void cfinish(int sig)
  28. {
  29.     signal(SIGINT, NULL);
  30.     toStop = 1;
  31. }
  32. void stop_init(void)
  33. {
  34.     signal(SIGINT, cfinish);
  35.     signal(SIGTERM, cfinish);
  36. }
  37. /* */
  38. int main(int argc, char *argv[])
  39. {
  40.     MQTTPacket_connectData data = MQTTPacket_connectData_initializer;
  41.     int rc = 0;
  42.     int mysock = 0;
  43.     unsigned char buf[200];
  44.     int buflen = sizeof(buf);
  45.     int msgid = 1;
  46.     MQTTString topicString = MQTTString_initializer;
  47.     int req_qos = 0;
  48.     char* payload = "mypayload";
  49.     int payloadlen = strlen(payload);
  50.     int len = 0;
  51.     // MQTTサーバーのIPに変更
  52.     char *host = "192.168.1.102";
  53.     int port = 1883;
  54.     stop_init();
  55.     if (argc > 1)
  56.         host = argv[1];
  57.     if (argc > 2)
  58.         port = atoi(argv[2]);
  59.     mysock = transport_open(host, port);
  60.     if(mysock < 0)
  61.         return mysock;
  62.     printf("Sending to hostname %s port %d\n", host, port);
  63.     data.clientID.cstring = "me";
  64.     data.keepAliveInterval = 20;
  65.     data.cleansession = 1;
  66.     data.username.cstring = "testuser";
  67.     data.password.cstring = "testpassword";
  68.     len = MQTTSerialize_connect(buf, buflen, &data);
  69.     rc = transport_sendPacketBuffer(mysock, buf, len);
  70.     /* wait for connack */
  71.     if (MQTTPacket_read(buf, buflen, transport_getdata) == CONNACK)
  72.     {
  73.         unsigned char sessionPresent, connack_rc;
  74.         if (MQTTDeserialize_connack(&sessionPresent, &connack_rc, buf, buflen) != 1 || connack_rc != 0)
  75.         {
  76.             printf("Unable to connect, return code %d\n", connack_rc);
  77.             goto exit;
  78.         }
  79.     }
  80.     else
  81.         goto exit;
  82.     /* subscribe */
  83.     topicString.cstring = "substopic";
  84.     len = MQTTSerialize_subscribe(buf, buflen, 0, msgid, 1, &topicString, &req_qos);
  85.     rc = transport_sendPacketBuffer(mysock, buf, len);
  86.     if (MQTTPacket_read(buf, buflen, transport_getdata) == SUBACK)     /* wait for suback */
  87.     {
  88.         unsigned short submsgid;
  89.         int subcount;
  90.         int granted_qos;
  91.         rc = MQTTDeserialize_suback(&submsgid, 1, &subcount, &granted_qos, buf, buflen);
  92.         if (granted_qos != 0)
  93.         {
  94.             printf("granted qos != 0, %d\n", granted_qos);
  95.             goto exit;
  96.         }
  97.     }
  98.     else
  99.         goto exit;
  100.     /* loop getting msgs on subscribed topic */
  101.     topicString.cstring = "pubtopic";
  102.     while (!toStop)
  103.     {
  104.         /* transport_getdata() has a built-in 1 second timeout,
  105.         your mileage will vary */
  106.         if (MQTTPacket_read(buf, buflen, transport_getdata) == PUBLISH)
  107.         {
  108.             unsigned char dup;
  109.             int qos;
  110.             unsigned char retained;
  111.             unsigned short msgid;
  112.             int payloadlen_in;
  113.             unsigned char* payload_in;
  114.             int rc;
  115.             MQTTString receivedTopic;
  116.             rc = MQTTDeserialize_publish(&dup, &qos, &retained, &msgid, &receivedTopic,
  117.                     &payload_in, &payloadlen_in, buf, buflen);
  118.             printf("message arrived %.*s\n", payloadlen_in, payload_in);
  119.         }
  120.         printf("publishing reading\n");
  121.         len = MQTTSerialize_publish(buf, buflen, 0, 0, 0, 0, topicString, (unsigned char*)payload, payloadlen);
  122.         rc = transport_sendPacketBuffer(mysock, buf, len);
  123.     }
  124.     printf("disconnecting\n");
  125.     len = MQTTSerialize_disconnect(buf, buflen);
  126.     rc = transport_sendPacketBuffer(mysock, buf, len);
  127. exit:
  128.     transport_close(mysock);
  129.     return 0;
  130. }



samples/buildを参考にコンパイル。


$ gcc -Wall -c transport.c -Os -s
$ gcc pub0sub1.c transport.o -I ./packet ./packet/MQTTConnectClient.c ./packet/MQTTSerializePublish.c \
./packet/MQTTPacket.c ./packet/MQTTSubscribeClient.c -o pub0sub1 ./packet/MQTTDeserializePublish.c -Os -s \
./packet/MQTTConnectServer.c ./packet/MQTTSubscribeServer.c ./packet/MQTTUnsubscribeServer.c \
./packet/MQTTUnsubscribeClient.c -ggdb



「pub0sub1」が生成されるので実行します。


$ ./pub0sub1



「substopic」にメッセージを送信するとプログラムで受信。
「pubtopic」を監視すると、プログラムからメッセージが送信されていることが確認できます。

912_05.gif




【参考URL】

ESP8266にMQTTを実装する (その1)

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2018/07/12(木) 22:36:23|
  2. 備忘録
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集

Ubuntu 18.04にArduino IDEをインストールして、プログラムをArduinoに書き込む

部屋を掃除したら、昔購入したArduinoが出てきました。
Arduinoの開発キットをダウンロードし、サンプルを実行する

懐かしい。久しぶりに触ってみようと思います。
Ubuntu 18.04に開発用のエディタ「Arduino IDE」をインストールしてみます。


Arduino IDE



こちらからダウンロードしました。
https://www.arduino.cc/en/Main/Software

911_01.png

「Linux 64 bits」のリンクをクリックすると、
「arduino-1.8.5-linux64.tar.xz」がダウンロードできました。


インストールはこちらを参考に行います。
https://www.arduino.cc/en/Guide/Linux


xzファイルの解凍はこちらを参考に以下のコマンドを実行。
Linux で tar.xz 形式のファイルを解凍する


$ tar Jxfv arduino-1.8.5-linux64.tar.xz



解凍したディレクトリに移動し、インストールを実行します。


$ cd arduino-1.8.5
$ ./install.sh
Adding desktop shortcut, menu item and file associations for Arduino IDE... done!



インストールと言っても、デスクトップにショートカットを作成するだけのようです。
こんなショートカットがデスクトップに作成されました。

911_02.png

内容は、ファイルを解答したディレクトリの「arduino」へのショートカットです。


[Desktop Entry]
Type=Application
Name=Arduino IDE
GenericName=Arduino IDE
Comment=Open-source electronics prototyping platform
Exec=/home/baranche/dev/arduino-1.8.5/arduino
Icon=arduino-arduinoide
Terminal=false
Categories=Development;IDE;Electronics;
MimeType=text/x-arduino;
Keywords=embedded electronics;electronics;avr;microcontroller;
StartupWMClass=processing-app-Base



デスクトップに作成されたショートカットをダブルクリックすると、初回は警告が表示されます。

911_03.png

「信頼して起動」を選択すると、デスクトップのショートカットにちゃんとアイコンが表示されます。

911_04.png

こんな感じで起動してくれました。

911_05.png



シリアルポートへのアクセス許可



引き続き、こちらを参考に動作環境を整えていきます。
https://www.arduino.cc/en/Guide/Linux

現在のユーザーがシリアルポートにアクセスできるように変更します。
ArduinoをUSBでパソコンに接続した状態でデバイスの情報を表示。

サイトでは、ttyACM*となっていますが旧式のArduinoだからか、
/dev/ttyUSB0で認識されています。


$ ls -l /dev/ttyUSB0
crw-rw---- 1 root dialout 188, 0 7月 11 23:00 /dev/ttyUSB0



これで現在のユーザーを「dialout」というグループに所属させれば
アクセス権が得られることがわかります。

以下のコマンドで、現在のユーザーをdialoutグループに追加。


$ sudo usermod -a -G dialout `whoami`



この設定、

You will need to log out and log in again for this change to take effect.


とのことなので、一回ログアウト(もしくは再起動)して、設定を反映させます。




サンプルプログラムの書き込み



IDEを解凍したディレクトリの「examples/01.Basics/Blink」に「Blink.ino」という
サンプルがあるので開いてみます。

サンプルをコンパイルして書き込む前に、
[ツール] - [ボード]から接続しているボードの名称を選択。

911_06.png

[ツール] - [シリアルポート]から、「/dev/ttyUSB0」を選択。
※最近のボードだと「/dev/ttyACM0」かも。

911_07.png

エディタのボタンをクリックして書き込みます。

911_08.png

これでLEDがチカチカしてくれました。

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2018/07/12(木) 00:41:26|
  2. 備忘録
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
次のページ