CentOS7.8にオラクルデータベース 19cをインストールしてみる

事前準備

Oracle Preinstallation RPM をインストール
[root@localhost ~]# curl -OL https://yum.oracle.com/repo/OracleLinux/OL7/latest/x86_64/getPackage/oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm
[root@localhost ~]#  yum -y localinstall oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm

Oracle本体のインストール

下記サイトよりオラクル19cのrpmをダウンロードし、インストールします。
rpmのダウンロードにはオラクルアカウントと利用規約がありますのでご留意ください。
www.oracle.com

[root@localhost ~]# yum -y localinstall oracle-database-ee-19c-1.0-1.x86_64.rpm

Databaseの作成とconfigure実行

※メモリ1Gだとエラーで失敗する可能性あり

[root@localhost ~]# export ORACLE_BASE=/opt/oracle
[root@localhost ~]# export ORACLE_HOME=$ORACLE_BASE/product/19c/dbhome_1
[root@localhost ~]# export ORACLE_SID=ORCLCDB
[root@localhost ~]# /etc/init.d/oracledb_ORCLCDB-19c configure
ポート開放
[root@localhost ~]# firewall-cmd --permanent --add-port=1521/tcp
success
[root@localhost ~]# firewall-cmd --permanent --add-port=5500/tcp
success
[root@localhost ~]# firewall-cmd --reload
success
[root@localhost ~]#

sqlplusで接続するための事前準備と接続確認

[root@localhost ~]# su - oracle
最終ログイン: 2020/12/18 (金) 10:21:17 JST日時 pts/0
[oracle@localhost ~]$ export ORACLE_SID=ORCLCDB
[oracle@localhost ~]$ export ORACLE_BASE=/opt/oracle
[oracle@localhost ~]$ export ORACLE_HOME=$ORACLE_BASE/product/19c/dbhome_1
[oracle@localhost ~]$ export PATH=$PATH:$ORACLE_HOME/bin
[oracle@localhost ~]$ source ~/.bash_profile
[oracle@localhost ~]$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Fri Dec 18 10:40:10 2020
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle.  All rights reserved.



Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
?????????
SQL> show pdbs;

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 ORCLPDB1                       READ WRITE NO
SQL>

sys, system のパスワードを設定

文字化けしてる・・・

SQL> alter user sys identified by password1;

?????????????

SQL> alter user system identified by password2;

?????????????

SQL>

接続先DBの変更

今はCDBに接続している

SQL> show con_name

CON_NAME
------------------------------
CDB$ROOT

PDBに変更する

SQL> alter session set container = ORCLPDB1;

確認してみる

SQL> show con_name;

CON_NAME
------------------------------
ORCLPDB1

OK

TableSpaceとUser作成

SQL> CREATE TABLESPACE tbs_01 DATAFILE '/opt/oracle/oradata/ORCLCDB/ORCLPDB1/tbs_01.dbf' SIZE 10M AUTOEXTEND ON NEXT 500K MAXSIZE 100M;
SQL> CREATE TEMPORARY TABLESPACE tbs_temp_01 TEMPFILE '/opt/oracle/oradata/ORCLCDB/ORCLPDB1/tbs_temp_01.dbf' SIZE 5M AUTOEXTEND ON TABLESPACE GROUP tbs_grp01;
SQL> CREATE USER user01 IDENTIFIED BY password3 DEFAULT TABLESPACE tbs_01;
SQL> GRANT CONNECT TO user01;
SQL> GRANT RESOURCE TO user01;

sqlplusでログインしてみる

[oracle@localhost ~]$ sqlplus user01/password3@//localhost/ORCLPDB1

SQL*Plus: Release 19.0.0.0.0 - Production on Fri Dec 18 10:48:26 2020
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle.  All rights reserved.



Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
?????????
SQL>

Django練習

はじめに

Djangoの勉強をはじめました。最初はソースコードの写経をしていましたが原理を知らないまま写経をしても意味がないと思いとりあえず今日やった下記の操作を説明できるようになる事をまずは目標とします。
後日下記操作の意味を追記するようにしたいと思います。

プロジェクトの作成

$ django-admin startproject project2 

アプリケーションの作成

$ python3.7 manage.py  startup employee

Djangoの管理画面を利用する為マイグレートの実行

$ python3.7 manage.py migrate

スーパーユーザの作成

$ python3.7 manage.py createsuperuser

setting.pyの編集

project2ディレクトリ配下の「settings.py」を編集する。
編集箇所は2箇所

INSTALLED_APPS

INSTALLED_APPS = [
    'employee.apps.EmployeeConfig',  #この行を追加
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

その他言語、タイムゾーン

言語を日本語「ja」、タイムゾーンを「Asia/Tokyo」に変更

LANGUAGE_CODE = 'ja'

TIME_ZONE = 'Asia/Tokyo'

urls.pyの編集

path関数の追加

from django.urls import path

pathnの追加

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('employee.urls'))
]

employeeディレクトリ配下に「urls.py」を作成

from django.urls import path,include
from . import views

app_name = 'employee'

urlpatterns = [
    path('',views.IndexViews.as_view(), name='index')
]

views.pyの編集

from django.views import generic

class IndexView(generic.TemplateView):
    template_name = 'employee/employee_list.html'

base.htmlの作成

プロジェクトディレクトリ「employee」配下に「templates」というディクトりを作成し、その配下に「employee」を作成します。
その後、下記内容で「base.html」を作成します。

<!doctype html>
<html lang="ja">
  <head>
    <title>社員管理システム</title>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

    <!-- Bootstrap CSS -->
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/css/bootstrap.min.css" integrity="sha384-PsH8R72JQ3SOdhVi3uxftmaW6Vc51MKb0q5P2rRUpPvrszuE4W1povHYgTpBfshb" crossorigin="anonymous">
  </head>
  <body>
      {% block content %}
      {% endblock %}
    </div>

    <!-- Optional JavaScript -->
    <!-- jQuery first, then Popper.js, then Bootstrap JS -->
    <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.3/umd/popper.min.js" integrity="sha384-vFJXuSJphROIrBnz7yo7oB41mKfc8JzQZiCq4NCceLEaO4IHwicKwpJf9c9IpFgh" crossorigin="anonymous"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/js/bootstrap.min.js" integrity="sha384-alpBpkh1PFOepccYVYDB4do5UnbKysX5WZXm3XxPqe5iKTfUKjNkCk9SaVuEZflJ" crossorigin="anonymous"></script>
  </body>
</html>

employee_list.htmlの作成

base.htmlと同階層に「employee_list.html」を下記内容で作成します。

{% extends 'employee/base.html' %}

{% block content %}
トップページ
{% endblock %}

Djangoの起動

$  python3.7 manage.py runserver 0.0.0.0:8000

エラーが・・

「Invalid HTTP_HOST header: '132.***.***.60:8000'. You may need to add '132.***.***.60' to ALLOWED_HOSTS.」

解決策

「settings.py」の「ALLOWED_HOSTS」に設定追加する。

ALLOWED_HOSTS = ['132.***.***.60']

問題なくアクセスできました。

[opc@django project2]$ curl http://132.145.122.60:8000/
<!doctype html>
<html lang="ja">
  <head>
    <title>社員管理システム</title>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

    <!-- Bootstrap CSS -->
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/css/bootstrap.min.css" integrity="sha384-PsH8R72JQ3SOdhVi3uxftmaW6Vc51MKb0q5P2rRUpPvrszuE4W1povHYgTpBfshb" crossorigin="anonymous">
  </head>
  <body>
      
トップページ

    </div>

    <!-- Optional JavaScript -->
    <!-- jQuery first, then Popper.js, then Bootstrap JS -->
    <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.3/umd/popper.min.js" integrity="sha384-vFJXuSJphROIrBnz7yo7oB41mKfc8JzQZiCq4NCceLEaO4IHwicKwpJf9c9IpFgh" crossorigin="anonymous"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/js/bootstrap.min.js" integrity="sha384-alpBpkh1PFOepccYVYDB4do5UnbKysX5WZXm3XxPqe5iKTfUKjNkCk9SaVuEZflJ" crossorigin="anonymous"></script>
  </body>
</html>[opc@django project2]$ 

drawthe.netをインストールしてみる

インフラエンジニアをやっているとネットワーク構成図の1つや2つを書くことがあると思います。
他にも社内SEをやっている方だと社内のNW構成図を作成する場面もあるでしょう。
そんな時に綺麗に作成したいとか、だれが書いても同じ構成図にしたい(枠のサイズとか文字のサイズがバラバラ)と思いますよね。
そんな悩みを解決してくれるのが「drawthe.net」の出番ということです。
前振りが長くなりましたがdrawthe.netをインストールして使ってみたいと思います。
※Dockerインストール済みで進めます。

インストール

gitクローンからビルドまでやります。

# git clone https://github.com/oresama-lab/drawthenet-personal.git
# cd drawthenet-personal
# git clone https://github.com/cidrblock/drawthe.net.git
# docker build --no-cache -t drawthenet:debian-nginx-node6.17.1 .
# docker run --rm -d -p 4000:80 drawthenet:debian-nginx-node6.17.1

ブラウザでアクセスするのでファイアウォールを開けるもしくは停止させましょう

# firewall-cmd --add-service=http --zone=public --permanent
#  firewall-cmd --zone=public --add-port=4000/tcp --permanent
#  firewall-cmd --reload

ブラウザでアクセス

http://localhost:4000/ でアクセスし下記のように表示されればOK
使い方については別記事で紹介したいと思います。
f:id:kyamisama:20201204144840j:plain

Django SQliteエラー

2020年10月4日現在DjangoをインストールするとSQlite3のアップデートが必要でエラーが出ちゃいます。
↓こんな感じ

django.core.exceptions.ImproperlyConfigured: SQLite 3.8.3 or later is required (found 3.7.17).

バージョンを確認すると・・・・

# sqlite3 --version
3.7.17 2013-05-20 00:56:22 118a3b35693b134d56ebd780123b7fd6f1497668
#

なのでSQlite3のアップデートやってみます
今回も参考にさせて頂いた記事を紹介します。
ありがとうございます。
developers-trash.com

SQlite3のバージョン3.8.3以上のインストール

$ wget https://www.sqlite.org/2020/sqlite-autoconf-3310100.tar.gz
$ tar xvfz sqlite-autoconf-3310100.tar.gz 
$ cd sqlite-autoconf-3310100 
$ ./configure --prefix=/usr/local 
$ make 
$ sudo make install 
$ /usr/local/bin/sqlite3 --version 
3.31.1 2020-01-27 19:55:54 3bfa9cc97da10598521b342961df8f5f68c7388fa117345eeb516eaa837bb4d6 
$ /usr/bin/sqlite3 --version 
3.7.17 2013-05-20 00:56:22 118a3b35693b134d56ebd780123b7fd6f1497668 
$ sqlite3 --version 
3.31.1 2020-01-27 19:55:54 3bfa9cc97da10598521b342961df8f5f68c7388fa117345eeb516eaa837bb4d6 
$ sudo mv /usr/bin/sqlite3 /usr/bin/sqlite3_old 
$ sudo ln -s /usr/local/bin/sqlite3 /usr/bin/sqlite3 
$ vi ~/.bashrc 
# 以下を追記する 
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib

アップデート後の確認

# sqlite3 --version
3.31.1 2020-01-27 19:55:54 3bfa9cc97da10598521b342961df8f5f68c7388fa117345eeb516eaa837bb4d6
#

except KeyboardInterrupt, e:エラー

Djangoインストール記事を書いたインスタンスyumコマンドが使えなくなってしまった。。。
yum updateすると下記のエラーが。。。

# yum update
  File "/bin/yum", line 30
    except KeyboardInterrupt, e:
                            ^
SyntaxError: invalid syntax
#

原因

おそらくデフォルトのPythonを2系から3系に変更したためです。
なのでシンボリックリンクを書き直せばいいんですが、yumを修正することにします。

yumの修正

viで/bin/yumを編集します。
1行目の「#!/usr/bin/python」を「#!/usr/bin/python2」に変更します

#!/usr/bin/python2

しかし、試しにyum updateを行うと途中と下記エラーとなります。

Is this ok [y/d/N]: y
Downloading packages:
Delta RPMs disabled because /usr/bin/applydeltarpm not installed.
  File "/usr/libexec/urlgrabber-ext-down", line 28
    except OSError, e:
                  ^
SyntaxError: invalid syntax
  File "/usr/libexec/urlgrabber-ext-down", line 28
    except OSError, e:
                  ^
SyntaxError: invalid syntax


Exiting on user cancel
#
/usr/libexec/urlgrabber-ext-downの編集

yumと同様1行目をpython2に変更します。

#! /usr/bin/python2

これで再度yumを実行すると上手くいきました。

OCI インスタンスにDjangoインストールしてみた

Python3をインストール

# yum install -y python36u python36u-libs python36u-devel python36u-pip

Djangoのインストール

# pip3.6 install django
プロジェクトを作成してみる

無事にDjangoがインストールされたかどうかはプロジェクトを作成し確認してみる。
下記コマンドを打鍵しエラーが返らなければOK

# django-admin startproject test1

以上でDjangoインストールの完了です。

Object Storage curl実行方法

オブジェクトストレージにファイルアップロードする方法はいくつかありますが、今回はcurlコマンドで実行する方法をご紹介します。
英語の記事ですが、こちらを参考にさせて頂きました。
ありがとうございます。
blogs.perficient.com

PAR(事前承認リクエスト)の作成

適当にオブジェクトストレージを作成します。
①の事前承認リクエストをクリックし、②の事前承認リクエストの作成へ進みます。
f:id:kyamisama:20201130155614p:plain
適当に名前を決め「事前承認リクエストの作成」をクリックする。
f:id:kyamisama:20201130160023j:plain
作成するとURLが表示されますので忘れずにどこかにコピーしておきましょう。
f:id:kyamisama:20201130160116p:plain

フィンガープリントの作成

ユーザ画面の画面左下の「APIキー」から「公開キーの追加」をクリックする。
f:id:kyamisama:20201130160549p:plain
公開キーを選択し「追加」をクリックする。
f:id:kyamisama:20201130160805j:plain
フィンガープリントの欄に新たに追加される。

curlの実行

コマンド例:curl -v -X PUT -u '{user_mail_address}:{fingerprint}' --upload-file {upload file} PAR

curl -v -X PUT -u 'xxxxx@gmail.com:xx:0d:xx:b5:xx:1f:xx:60:xx:98:xx:4d:xx:8c:xx:ca' --upload-file test.txt https://objectstorage.ap-tokyo-1.oraclecloud.com/p/3ChT****************

これでcurlを使ったアップロードが行えます。
まぁ使う機会があるかと言われると微妙ですが。。。