<file_sep>FROM centos:7.6.1810

ARG OS_VERSION
ARG REPO

ARG DBEAVER_VERSION
ARG GIT_VERSION
ARG JAVA_VERSION
ARG MAVEN_VERSION
ARG PYTHON_VERSION

ENV LANG=ja_JP.UTF-8
ENV DISPLAY=:0.0

RUN yum install -y git
RUN cd /usr/local/src && git clone https://github.com/ukijumotahaneniarukenia/$REPO.git

RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-install-docker-host-user.sh | bash

RUN cd /usr/local/src/$REPO && echo './$OS_VERSION-install-default-user.sh 1000 oracle 1000 oracle' | bash

RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-install-repository-pkg.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-install-dev-pkg.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-install-tool-pkg.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-install-network-pkg.sh | bash

RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-install-vim-system.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-install-vim-user.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-install-vim_plug.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-install-python-$PYTHON_VERSION.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-install-git-$GIT_VERSION.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-config-dotfile.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-config-locale.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-config-env.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-config-ld.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-config-font-RictyDiminished.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-install-ibus_mozc.sh | bash
#RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-install-fcitx_anthy.sh | bash

COPY subrun.sh /root/subrun.sh
#RUN bash /root/subrun.sh

ENV ORACLE_DOCKER_INSTALL=true
ENV ORACLE_SID=ORCLCDB
ENV ORACLE_HOME=/opt/oracle/product/19c/dbhome_1
ENV PATH=$PATH:$ORACLE_HOME/bin

RUN cd /usr/local/src && curl -sSLO https://yum.oracle.com/repo/OracleLinux/OL7/latest/x86_64/getPackage/oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm
RUN cd /usr/local/src && yum -y localinstall oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm && rm oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm

COPY oracle-database-ee-19c-1.0-1.x86_64.rpm /root/oracle-database-ee-19c-1.0-1.x86_64.rpm
RUN yum -y localinstall /root/oracle-database-ee-19c-1.0-1.x86_64.rpm

#起動スクリプトの微修正
RUN sed -i '34i export PASSWORD=<PASSWORD>' /etc/init.d/oracledb_ORCLCDB-19c
RUN sed -i '165s;^;#;' /etc/init.d/oracledb_ORCLCDB-19c
RUN sed -i '166i $SU -s /bin/bash  $ORACLE_OWNER -c "$DBCA -silent -createDatabase -gdbName $ORACLE_SID -templateName $TEMPLATE_NAME -characterSet $CHARSET -createAsContainerDatabase $CREATE_AS_CDB -createListener $LISTENER_NAME:$LISTENER_PORT -datafileDestination $ORACLE_DATA_LOCATION -sid $ORACLE_SID -sysPassword $PASSWORD -systemPassword $PASSWORD -emConfiguration DBEXPRESS -emExpressPort $EM_EXPRESS_PORT"' /etc/init.d/oracledb_ORCLCDB-19c

#パスワード変更
RUN echo 'oracle:oracle_pwd' | chpasswd

#準備が大変だな
COPY create_user.sql /home/oracle/create_user.sql
COPY glogin.sql /opt/oracle/product/19c/dbhome_1/sqlplus/admin/glogin.sql
COPY init_db.sh /home/oracle/init_db.sh
COPY launch_and_open_db.sql /home/oracle/launch_and_open_db.sql
RUN chown oracle:oinstall /home/oracle/* && chmod +x /home/oracle/*

RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-install-dbeaver-$DBEAVER_VERSION.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-install-jdk-$JAVA_VERSION.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-install-maven-$MAVEN_VERSION.sh | bash

USER oracle
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-install-vim-user.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-install-vim_plug.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-config-dotfile.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-config-env.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-config-font-RictyDiminished.sh | bash

WORKDIR /home/oracle

EXPOSE 1521
COPY run.sh /etc/init/run.sh
ENTRYPOINT ["/etc/init/run.sh","centos"]
<file_sep>|ユーザーＩＤ|ユーザー名|グループＩＤ|グループ名|パスワード|
|:-:|:-:|:-:|:-:|:-:|
<file_sep>- https://developer.android.com/studio/workflow

- https://developer.android.com/studio/run/managing-avds#createavd

- https://developer.android.com/training/basics/firstapp/running-app
<file_sep>#!/bin/bash

usage(){
cat <<EOS
Usage:
  $0 script-env
EOS
exit 0
}

ENV_REPO=$1;shift

[ -z $ENV_REPO ] && usage

while read tgt;do
  while read nnn;do
    echo $tgt/$nnn
  done < <(find $HOME/$ENV_REPO/ubuntu-16-04-vim -name "env-*" | perl -pe 's;.*/;;g') #環境ディレクトリの中から代表１つチョイス
done < <(find $HOME/$ENV_REPO -mindepth 1 -type d | grep -vP '\.git|docker-log') | perl -pe 's;.*/;;g' | sort | uniq -c
<file_sep># 参考文献 
https://www.itmedia.co.jp/enterprise/articles/1604/27/news001.html

# keyboard
https://wiki.archlinux.jp/index.php/%E3%82%B3%E3%83%B3%E3%82%BD%E3%83%BC%E3%83%AB%E3%81%A7%E3%81%AE%E3%82%AD%E3%83%BC%E3%83%9C%E3%83%BC%E3%83%89%E8%A8%AD%E5%AE%9A
```
[aine💜centos (土 10月 05 10:58:34) ~]$cat /etc/vconsole.conf 
KEYMAP=/usr/share/ibus/keymaps/jp
FONT=latarcyrheb-sun16

[aine💜centos (土 10月 05 10:36:30) ~]$cat /usr/share/ibus/keymaps/jp
include common
    shift keycode 2 = exclam
    shift keycode 3 = quotedbl
    shift keycode 4 = numbersign
    shift keycode 5 = dollar
    shift keycode 6 = percent
    shift keycode 7 = ampersand
    shift keycode 8 = apostrophe
    shift keycode 9 = parenleft
    shift keycode 10 = parenright
    shift keycode 11 = asciitilde
keycode 12 = minus
    shift keycode 12 = equal
keycode 13 = asciicircum
    shift keycode 13 = asciitilde
keycode 26 = at
    shift keycode 26 = grave
keycode 27 = bracketleft
    shift keycode 27 = braceleft
keycode 39 = semicolon
    shift keycode 39 = plus
keycode 40 = colon
    shift keycode 40 = asterisk
keycode 41 = Zenkaku_Hankaku
keycode 43 = bracketright
    shift keycode 43 = braceright
keycode 51 = comma
    shift keycode 51 = less
keycode 52 = period
    shift keycode 52 = greater
keycode 53 = slash
    shift keycode 53 = question
    shift keycode 58 = Eisu_toggle
keycode 89 = backslash
    shift keycode 89 = underscore
keycode 92 = Henkan_Mode
keycode 93 = Hiragana_Katakana
keycode 94 = Muhenkan
keycode 124 = yen
    shift keycode 124 = bar
keycode 122 = Hangul
keycode 123 = Hangul_Hanja
    shift keycode 84 = Execute
keycode 112 = Katakana
```

# startxコマンド
起動手順記載あり
https://www.ibm.com/support/knowledgecenter/ja/ssw_aix_72/s_commands/startx.html

http://x68000.q-e-d.net/~68user/unix/pickup?startx


読み込むファイル
startx コマンド内の xinit コマンドは、.Xdefaults ファイルをロードしようとします。

# x環境でじゃんはい表示するヒント
https://unix.stackexchange.com/questions/196152/xterm-not-displaying-unicode

# xterm build手順
http://lfsbookja.osdn.jp/BLFS/svn-ja/x/xterm.html

xtermで起動フォント確認やっとできた

Rictyフォントは全角スペースが可視化される
https://github.com/metalefty/Ricty/blob/master/README.md
![](./5.png)

```
[root♥12f7ecdc2a7e (火 10月 01 09:43:30) /]$fc-list | grep Ri
/usr/share/fonts/RictyDiminished/RictyDiminished-Oblique.ttf: Ricty Diminished:style=Oblique
/usr/share/fonts/RictyDiminished/RictyDiminished-Regular.ttf: Ricty Diminished:style=Regular
/usr/share/fonts/RictyDiminished/RictyDiminished-Bold.ttf: Ricty Diminished:style=Bold
/usr/share/fonts/RictyDiminished/RictyDiminishedDiscord-Bold.ttf: Ricty Diminished Discord:style=Bold
/usr/share/fonts/RictyDiminished/RictyDiminishedDiscord-BoldOblique.ttf: Ricty Diminished Discord:style=Bold Oblique
/usr/share/fonts/RictyDiminished/RictyDiminishedDiscord-Regular.ttf: Ricty Diminished Discord:style=Regular
/usr/share/fonts/RictyDiminished/RictyDiminishedDiscord-Oblique.ttf: Ricty Diminished Discord:style=Oblique
/usr/share/fonts/RictyDiminished/RictyDiminished-BoldOblique.ttf: Ricty Diminished:style=Bold Oblique
[root♥12f7ecdc2a7e (火 10月 01 09:44:38) /]$xterm -fa 'Ricty Diminished:style=Regular'
```

xtermをソースコードからビルド
https://gist.github.com/dichotomies/6b41496e23bbb89d461e23f8b9b0c262

UnicodeとXterm
https://linuxjf.osdn.jp/JFdocs/Unicode-HOWTO-3.html

xフォント関連コマンド
http://www.yam-web.net/c-programing/font/index.html
https://orebibou.com/2017/01/centosubuntu%E3%81%A7%E3%83%95%E3%82%A9%E3%83%B3%E3%83%88%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/

Xアプリでのフォントの設定
http://www.momonga-linux.org/docs/TTF-HOWTO/ja/fontpath.html

貴重なXtermの参考文献
https://invisible-island.net/xterm/xterm.html

Xのデフォルトの設定ファイル
http://watermans-linuxtips.blogspot.com/2009/02/centosx.html?m=1

Xフォント
ArchLinuxは偉大
https://bbs.archlinux.org/viewtopic.php?id=167204
https://l-w-i.net/t/x/font_101.txt
```
[rstudio💓2de5d80db52a (月  9月 30 09:40:49) /]$cd /usr/share/fonts/vlgothic/
[rstudio💓2de5d80db52a (月  9月 30 09:42:04) /usr/share/fonts/vlgothic]$ll
total 8092
-rw-r--r--. 1 root root 4111416  6月  7  2013 VL-Gothic-Regular.ttf
-rw-r--r--. 1 root root 4171796  6月  7  2013 VL-PGothic-Regular.ttf
[rstudio💓2de5d80db52a (月  9月 30 09:42:06) /usr/share/fonts/vlgothic]$which mkfontscale
/usr/bin/mkfontscale
[rstudio💓2de5d80db52a (月  9月 30 09:42:43) /usr/share/fonts/vlgothic]$which mkfontdir
/usr/bin/mkfontdir
[rstudio💓2de5d80db52a (月  9月 30 09:42:52) /usr/share/fonts/vlgothic]$sudo mkfontscale
[rstudio💓2de5d80db52a (月  9月 30 09:42:59) /usr/share/fonts/vlgothic]$ll
total 8096
-rw-r--r--. 1 root root 4111416  6月  7  2013 VL-Gothic-Regular.ttf
-rw-r--r--. 1 root root 4171796  6月  7  2013 VL-PGothic-Regular.ttf
-rw-r--r--. 1 root root    2404  9月 30 09:42 fonts.scale
[rstudio💓2de5d80db52a (月  9月 30 09:43:02) /usr/share/fonts/vlgothic]$sudo mkfontdir
[rstudio💓2de5d80db52a (月  9月 30 09:43:08) /usr/share/fonts/vlgothic]$ll
total 8100
-rw-r--r--. 1 root root 4111416  6月  7  2013 VL-Gothic-Regular.ttf
-rw-r--r--. 1 root root 4171796  6月  7  2013 VL-PGothic-Regular.ttf
-rw-r--r--. 1 root root    2404  9月 30 09:43 fonts.dir
-rw-r--r--. 1 root root    2404  9月 30 09:42 fonts.scale
```


このコマンドでフォント遊べる
```
[root💛2de5d80db52a (月  9月 30 09:12:56) /]$/usr/bin/xfontsel
```

おためしようフォント
https://github.com/tomokuni/Myrica

Xtermの設定ファイル漁るgit
https://github.com/jfoscarini/.Xresources/blob/master/.Xresources

絵文字の表示幅
https://github.com/hamano/locale-eaw

ibusやりとり
https://github.com/ibus/ibus/issues/2005
https://github.com/ibus/ibus/issues/385

coredump味方
http://rabbitfoot141.hatenablog.com/entry/2016/11/14/153101

iBus最新
https://www.clear-code.com/blog/2018/7/25.html

iBus
https://wiki.archlinux.jp/index.php/IBus#.E5.88.9D.E6.9C.9F.E8.A8.AD.E5.AE.9A

日本語入力
https://sites.google.com/site/voidlinuxmemo/ri-ben-yu-huan-jing-1#TOC-mozc-

フォントキャッシュ作成する際に参照しているフォルダ見つける
```
[rstudio💗7c2d3e78e156 (土  9月 28 17:54:36) ~/IdeaProjects/untitled]$fc-cache -f -v
/usr/share/fonts: caching, new cache contents: 0 fonts, 3 dirs
/usr/share/fonts/dejavu: caching, new cache contents: 9 fonts, 0 dirs
/usr/share/fonts/liberation: caching, new cache contents: 4 fonts, 0 dirs
/usr/share/fonts/vlgothic: caching, new cache contents: 2 fonts, 0 dirs
/usr/share/X11/fonts/Type1: caching, new cache contents: 13 fonts, 0 dirs
/usr/share/X11/fonts/TTF: skipping, no such directory
/usr/local/share/fonts: skipping, no such directory
/home/rstudio/.local/share/fonts: skipping, no such directory
/home/rstudio/.fonts: skipping, no such directory
/usr/share/fonts/dejavu: skipping, looped directory detected
/usr/share/fonts/liberation: skipping, looped directory detected
/usr/share/fonts/vlgothic: skipping, looped directory detected
/usr/lib/fontconfig/cache: not cleaning unwritable cache directory
/home/rstudio/.cache/fontconfig: cleaning cache directory
/home/rstudio/.fontconfig: not cleaning non-existent cache directory
/usr/bin/fc-cache-64: succeeded
[rstudio💗7c2d3e78e156 (土  9月 28 17:54:41) ~/IdeaProjects/untitled]$fc-list>post
[rstudio💗7c2d3e78e156 (土  9月 28 17:54:47) ~/IdeaProjects/untitled]$ll
total 12
-rwxrwxr-x. 1 rstudio rstudio   35  9月 28 17:50 a.sh
-rw-rw-r--. 1 rstudio rstudio 2243  9月 28 17:54 post
-rw-rw-r--. 1 rstudio rstudio 2243  9月 28 17:54 pre
[rstudio💗7c2d3e78e156 (土  9月 28 17:54:49) ~/IdeaProjects/untitled]$diff post pre
```
展開したフォントファイルを参照しているフォルダにmvする。
```
[rstudio💗7c2d3e78e156 (土  9月 28 17:54:58) ~/IdeaProjects/untitled]$ll /usr/share/X11/fonts/TTF
ls: cannot access /usr/share/X11/fonts/TTF: No such file or directory
```

pam越え
https://blfs-support.linuxfromscratch.narkive.com/22HPbg3d/normal-user-cannot-start-x
```
[rstudio💞4931eb893dee (土  9月 28 17:25:28) /root]$find / -name "*pam_*so" 2>/dev/null
/usr/lib64/security/pam_namespace.so
/usr/lib64/security/pam_filter.so
/usr/lib64/security/pam_motd.so
/usr/lib64/security/pam_tty_audit.so
/usr/lib64/security/pam_limits.so
/usr/lib64/security/pam_succeed_if.so
/usr/lib64/security/pam_echo.so
/usr/lib64/security/pam_exec.so
/usr/lib64/security/pam_lastlog.so
/usr/lib64/security/pam_unix.so
/usr/lib64/security/pam_faildelay.so
/usr/lib64/security/pam_permit.so
/usr/lib64/security/pam_unix_acct.so
/usr/lib64/security/pam_selinux_permit.so
/usr/lib64/security/pam_group.so
/usr/lib64/security/pam_timestamp.so
/usr/lib64/security/pam_access.so
/usr/lib64/security/pam_umask.so
/usr/lib64/security/pam_warn.so
/usr/lib64/security/pam_debug.so
/usr/lib64/security/pam_issue.so
/usr/lib64/security/pam_sepermit.so
/usr/lib64/security/pam_rootok.so
/usr/lib64/security/pam_xauth.so
/usr/lib64/security/pam_chroot.so
/usr/lib64/security/pam_pwhistory.so
/usr/lib64/security/pam_systemd.so
/usr/lib64/security/pam_postgresok.so
/usr/lib64/security/pam_time.so
/usr/lib64/security/pam_tally2.so
/usr/lib64/security/pam_selinux.so
/usr/lib64/security/pam_loginuid.so
/usr/lib64/security/pam_shells.so
/usr/lib64/security/pam_console.so
/usr/lib64/security/pam_pwquality.so
/usr/lib64/security/pam_env.so
/usr/lib64/security/pam_unix_auth.so
/usr/lib64/security/pam_securetty.so
/usr/lib64/security/pam_faillock.so
/usr/lib64/security/pam_nologin.so
/usr/lib64/security/pam_listfile.so
/usr/lib64/security/pam_keyinit.so
/usr/lib64/security/pam_cap.so
/usr/lib64/security/pam_unix_passwd.so
/usr/lib64/security/pam_rhosts.so
/usr/lib64/security/pam_ftp.so
/usr/lib64/security/pam_localuser.so
/usr/lib64/security/pam_cracklib.so
/usr/lib64/security/pam_mkhomedir.so
/usr/lib64/security/pam_deny.so
/usr/lib64/security/pam_userdb.so
/usr/lib64/security/pam_unix_session.so
/usr/lib64/security/pam_stress.so
/usr/lib64/security/pam_mail.so
/usr/lib64/security/pam_wheel.so
/usr/lib64/security/pam_fprintd.so
/usr/lib64/security/pam_sss.so
/usr/lib64/security/pam_oddjob_mkhomedir.so
```

rootユーザー以外でもXアプリ起動できるか
http://www.turbolinux.com/support/document/knowledge/98.html
http://www.ep.sci.hokudai.ac.jp/~inex/y2006/1222/Debian_install/after_install.html

X.orgのWiki
https://www.x.org/wiki/


一般ユーザでstartxしたらFatal server errorと出る時の対策

PAM authentication failed, cannot start X server

http://blogcdn.rutake.com/blog/techmemo/2007/08/startxfatal_server_error.html
回避するために/etc/pam.d/xserverを編集

修正前
```
[root💟4931eb893dee (土  9月 28 17:02:42) /]$cat /etc/pam.d/xserver
#%PAM-1.0
auth       sufficient   pam_rootok.so
auth       required     pam_console.so
account    required     pam_permit.so
session    optional     pam_keyinit.so force revoke
```

修正後
pam_console.soをpam_permit.soに変更
```
#%PAM-1.0
auth       sufficient   pam_rootok.so
auth       required     pam_permit.so
account    required     pam_permit.so
session    optional     pam_keyinit.so force revoke
```

ファイルの場所
/etc/pam.d/xserver
```
[root❤4931eb893dee (土  9月 28 17:01:01) /]$ll /etc/pam.d/*
-rw-r--r--. 1 root root 272 10月 31  2018 /etc/pam.d/atd
-rw-r--r--. 1 root root 192  8月  9 12:09 /etc/pam.d/chfn
-rw-r--r--. 1 root root 192  8月  9 12:09 /etc/pam.d/chsh
-rw-r--r--. 1 root root 232  4月 11  2018 /etc/pam.d/config-util
-rw-r--r--. 1 root root 287  8月  9 08:07 /etc/pam.d/crond
-rw-r--r--. 1 root root 701  4月 11  2018 /etc/pam.d/fingerprint-auth
-rw-r--r--. 1 root root  97  8月  9 23:07 /etc/pam.d/liveinst
-rw-r--r--. 1 root root 796  8月  9 12:09 /etc/pam.d/login
-rw-r--r--. 1 root root 154  4月 11  2018 /etc/pam.d/other
-rw-r--r--. 1 root root 188  6月 10  2014 /etc/pam.d/passwd
-rw-r--r--. 1 root root 760  4月 11  2018 /etc/pam.d/password-auth
-rw-r--r--. 1 root root 155  9月 14 03:09 /etc/pam.d/polkit-1
-rw-r--r--. 1 root root 329  4月 11  2018 /etc/pam.d/postlogin
-rw-r--r--. 1 root root 681  8月  9 12:09 /etc/pam.d/remote
-rw-r--r--. 1 root root 143  8月  9 12:09 /etc/pam.d/runuser
-rw-r--r--. 1 root root 138  8月  9 12:09 /etc/pam.d/runuser-l
-rw-r--r--. 1 root root 145  6月 10  2014 /etc/pam.d/setup
-rw-r--r--. 1 root root 743  4月 11  2018 /etc/pam.d/smartcard-auth
lrwxrwxrwx. 1 root root  25  9月 28 13:15 /etc/pam.d/smtp -> /etc/alternatives/mta-pam
-rw-r--r--. 1 root root  76 10月 31  2018 /etc/pam.d/smtp.postfix
-rw-r--r--. 1 root root 904  8月  9 10:40 /etc/pam.d/sshd
-rw-r--r--. 1 root root 540  8月  9 12:09 /etc/pam.d/su
-rw-r--r--. 1 root root 137  8月  9 12:09 /etc/pam.d/su-l
-rw-r--r--. 1 root root 238  8月  9 11:57 /etc/pam.d/sudo
-rw-r--r--. 1 root root 216  8月  9 11:57 /etc/pam.d/sudo-i
-rw-r--r--. 1 root root 760  4月 11  2018 /etc/pam.d/system-auth
-rw-r--r--. 1 root root 129  9月 14 03:19 /etc/pam.d/systemd-user
-rw-r--r--. 1 root root  84 10月 31  2018 /etc/pam.d/vlock
-rw-r--r--. 1 root root 163  8月  9 12:28 /etc/pam.d/xserver
```

ブラウザで日本語入力
http://www.ep.sci.hokudai.ac.jp/~inex/y2006/1222/Debian_install/after_install.html

~/.xinitrcに記載
```
export LC_ALL=ja_JP.utf8
export LANGUAGE=ja_JP.utf8
export LANG=ja_JP.utf8
export GTK_IM_MODULE=ibus
export XMODIFIERS=@im=ibus
export QT_IM_MODULE=ibus
export DefalutIMModule=ibus
export NO_AT_BRIDGE=1
```

リナックスディレクトリ構成
https://oxynotes.com/?p=5987

https://satoru739.hatenadiary.com/entry/20111007/1318086532

xtermの色指定
https://heruwakame.hatenablog.com/entry/2017/10/21/232112
http://xjman.dsl.gr.jp/man/man1/xterm.1x.html

Xの日本語対応化
http://www.rcc.ritsumei.ac.jp/?p=6403

Xの日本語入力対応
https://qiita.com/ai56go/items/63abe54f2504ecc940cd
https://tkng.org/unixuser/200405/part1.html
https://tkng.org/unixuser/200405/part2.html
https://tkng.org/unixuser/200405/part3.html

http://note.kurodigi.com/xterm-customize/#id304
https://solist.work/blog/posts/mozc/

日本語のロケール問題

https://www.linux.ambitious-engineer.com/?p=984

http://slavartemp.blogspot.com/2013/06/xming-teraterm-ssh-lubuntu-x.html

X11とはみたいな
http://nmaruichi.la.coocan.jp/XawDoc/Xaw02.html

X11における日本語フォントファイル
http://vega.pgw.jp/~kabe/vsd/k14/

Xtermにおける日本語の表示に関して
http://vega.pgw.jp/~kabe/vsd/k14/xterm-fontsel.html
http://bogytech.blogspot.com/2019/

Xの仕組み
http://luozengbin.github.io/blog/2014-06-21-%5B%E3%83%A1%E3%83%A2%5D%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%88x%E3%81%AE%E6%8E%A5%E7%B6%9A%E6%96%B9%E6%B3%95.html

iBusのしくみ
https://ja.opensuse.org/IBus

Xフォント
https://medium.com/source-words/how-to-manually-install-update-and-uninstall-fonts-on-linux-a8d09a3853b0
https://running-dog.net/2011/10/post_303.html
https://incompleteness-theorems.at.webry.info/201009/article_6.html
https://linuxjf.osdn.jp/JFdocs/XWindow-User-HOWTO-7.html
http://hajimete-program.com/blog/2017/04/15/debian8ubuntu%E3%81%A7xterm%E3%81%AE%E3%83%95%E3%82%A9%E3%83%B3%E3%83%88%E3%82%92%E5%A4%A7%E3%81%8D%E3%81%8F%E3%81%97%E3%81%A6%E3%80%81molokai%E3%83%86%E3%83%BC%E3%83%9E%E3%81%AB%E3%81%99%E3%82%8B/

すげぇ
https://running-dog.net/category/cat_kdeandqt

これじゃないか???

https://blog.goo.ne.jp/tabitom2002/e/a18ccc75ec1ff1bbc5909ee95e5f9408

ぶらうざ
https://www.hiroom2.com/centos/centos-7-ja/

dockerにmanいれる
https://okisanjp.hatenablog.jp/entry/2017/01/06/214353

日本語入力苦しい
http://pc.casey.jp/archives/153902376

Xアプリでのキー入力
https://wiki.archlinux.jp/index.php/Xorg_%E3%81%A7%E3%81%AE%E3%82%AD%E3%83%BC%E3%83%9C%E3%83%BC%E3%83%89%E8%A8%AD%E5%AE%9A?rdfrom=https%3A%2F%2Fwiki.archlinux.org%2Findex.php%3Ftitle%3DKeyboard_Configuration_in_Xorg_%28%25E6%2597%25A5%25E6%259C%25AC%25E8%25AA%259E%29%26redirect%3Dno

SuperはWindowsキー
https://linux.keicode.com/linux/japanese.php

Xtermコマンド
https://www.ibm.com/support/knowledgecenter/ja/ssw_aix_72/x_commands/xterm.html
http://x68000.q-e-d.net/~68user/unix/pickup?xterm
http://x68000.q-e-d.net/~68user/unix/pickup?kterm
https://www.ibm.com/support/knowledgecenter/ja/ssw_aix_72/a_commands/aixterm.html
https://www.ibm.com/support/knowledgecenter/ja/ssw_aix_71/d_commands/dtterm.html


キーボード入力
全角半角キー入力の設定
https://github.com/uim/uim-doc-ja/wiki/CustomizeUim

たぶんこれじゃないか2回目
https://slackware.jp/configuration/x_window_configuration.html
149行目コメントインして150行目をコメントアウトする
```
[root💝0f0a00fd19e2 (木  9月 26 20:23:49) /etc/X11]$vi /usr/share/X11/xkb/keycodes/evdev
[root💙0f0a00fd19e2 (木  9月 26 20:31:03) /]$grep -A15 -n Japan /usr/share/X11/xkb/keycodes/evdev
147:	// Keys that are generated on Japanese keyboards
148-
149-	//<HZTG> =  93;	// Hankaku/Zenkakau toggle - not actually used
150-	alias <HZTG> = <TLDE>;
151-	<HKTG> = 101;	// Hiragana/Katakana toggle
152-	<AB11> = 97;	// backslash/underscore
153-	<HENK> = 100;	// Henkan
154-	<MUHE> = 102;	// Muhenkan
155-	<AE13> = 132;	// Yen
156-	<KATA> =  98;	// Katakana
157-	<HIRA> =  99;	// Hiragana
158-	<JPCM> = 103;	// KPJPComma
159-	//<RO>   =  97;	// Romaji
160-
161-	// Keys that are generated on Korean keyboards
162-

```

docker側のキーボード入力設定
keyboard.confのデフォルト
```
[root💜0f0a00fd19e2 (木  9月 26 21:51:43) /]$cat /etc/X11/xorg.conf.d/00-keyboard.conf
# Read and parsed by systemd-localed. It's probably wise not to edit this file
# manually too freely.
Section "InputClass"
        Identifier "system-keyboard"
        MatchIsKeyboard "on"
        Option "XkbLayout" "us"
EndSection
```

dockerコンテナ側のキーボード入力設定
```
[rstudio❤centos (木  9月 26 21:53:49) ~/unko/script_scratch/x]$find / -name "*keyboard*" 2>/dev/null |& grep X11
/etc/X11/xorg.conf.d/00-keyboard.conf
/usr/include/X11/bitmaps/keyboard16
[rstudio❤centos (木  9月 26 21:54:05) ~/unko/script_scratch/x]$vi /etc/X11/xorg.conf.d/00-keyboard.conf
[rstudio❤centos (木  9月 26 21:54:20) ~/unko/script_scratch/x]$cat /etc/X11/xorg.conf.d/00-keyboard.conf
# Read and parsed by systemd-localed. It's probably wise not to edit this file
# manually too freely.
Section "InputClass"
        Identifier "system-keyboard"
        MatchIsKeyboard "on"
        Option "XkbLayout" "jp,jp"
        Option "XkbVariant" "kana,"
EndSection

```

==================================================================================

# X11の設定
X11でぐぐる
```
[root💘25d0f3ff0af4 (土  9月 28 14:01:36) /]$find / -name "*X11*" 2>/dev/null
/etc/X11
/usr/include/X11
/usr/lib64/X11
/usr/lib64/girepository-1.0/GdkX11-2.0.typelib
/usr/lib64/girepository-1.0/GdkX11-3.0.typelib
/usr/lib64/libX11.so
/usr/lib64/libX11-xcb.so
/usr/lib64/libX11-xcb.so.1.0.0
/usr/lib64/libX11.so.6.3.0
/usr/lib64/libX11-xcb.so.1
/usr/lib64/libX11.so.6
/usr/share/X11
/usr/share/gir-1.0/GdkX11-2.0.gir
/var/lib/yum/yumdb/l/4972906b4016cfe97055d73c789653847a916870-libX11-devel-1.6.7-2.el7-x86_64
/var/lib/yum/yumdb/l/db7e8655fc08c81313cd45ca17452adfafc45a60-libX11-1.6.7-2.el7-x86_64
/var/lib/yum/yumdb/l/fe8f43ef082c3f982a0f4bd7025416ae627fdeac-libX11-common-1.6.7-2.el7-noarch
/tmp/.X11-unix

```

# /etc/X11の場所
```
[root💘25d0f3ff0af4 (土  9月 28 14:02:26) /]$ll /etc/X11
total 24
-rw-r--r--. 1 root root  547  4月 11  2018 Xmodmap
-rw-r--r--. 1 root root  493  4月 11  2018 Xresources
drwxr-xr-x. 2 root root 4096  4月 11  2018 applnk
drwxr-xr-x. 1 root root 4096  9月 28 13:09 fontpath.d
drwxr-xr-x. 1 root root 4096  9月 28 13:26 xinit
drwxr-xr-x. 1 root root 4096  9月 14 03:19 xorg.conf.d
```

# /etc/X11/xorg.conf.dにキーボード設定ファイル
```
[root💘25d0f3ff0af4 (土  9月 28 14:35:30) /]$ll /etc/X11/xorg.conf.d/
total 4
-rw-r--r--. 1 root root 232 12月  4  2018 00-keyboard.conf

```

```
[root💘25d0f3ff0af4 (土  9月 28 14:36:50) /]$ll /etc/X11/xorg.conf.d/*
-rw-r--r--. 1 root root 232 12月  4  2018 /etc/X11/xorg.conf.d/00-keyboard.conf
[root💘25d0f3ff0af4 (土  9月 28 14:36:51) /]$cat /etc/X11/xorg.conf.d/00-keyboard.conf
# Read and parsed by systemd-localed. It's probably wise not to edit this file
# manually too freely.
Section "InputClass"
        Identifier "system-keyboard"
        MatchIsKeyboard "on"
        Option "XkbLayout" "us"
EndSection

```

# inputメソッド
50-xinput.sh
```
[root💘25d0f3ff0af4 (土  9月 28 14:06:42) /]$ll /etc/X11/xinit/xinitrc.d/*
-rwxr-xr-x. 1 root root  621  3月 14  2019 /etc/X11/xinit/xinitrc.d/00-start-message-bus.sh
-rwxr-xr-x. 1 root root 4228  8月  9 08:53 /etc/X11/xinit/xinitrc.d/50-xinput.sh
-rwxr-xr-x. 1 root root  543  4月 11  2018 /etc/X11/xinit/xinitrc.d/localuser.sh
-rwxr-xr-x. 1 root root  842  8月  9 23:07 /etc/X11/xinit/xinitrc.d/zz-liveinst.sh

```

# /usr/share/X11の場所
ここ！
```
[root💘25d0f3ff0af4 (土  9月 28 14:15:38) /]$ll /usr/share/X11
total 112
-rw-r--r--.  1 root root 42077 10月  9  2018 XErrorDB
drwxr-xr-x.  2 root root  4096  9月 28 13:07 app-defaults
drwxr-xr-x.  5 root root  4096  9月 28 13:09 fonts
drwxr-xr-x. 64 root root  4096  9月 28 13:07 locale
-rw-r--r--.  1 root root 17975  8月 12  2017 rgb.txt
drwxr-xr-x.  2 root root  4096  9月 28 13:07 x11perfcomp
drwxr-xr-x.  8 root root  4096  9月 28 13:09 xkb
drwxr-xr-x.  2 root root  4096  9月 28 13:18 xorg.conf.d

```

# /usr/share/X11/app-defaults/
Xアプリのデフォルト設定ファイルはここにあるXtermとかも


# X11のロケーる設定

```
[root💘25d0f3ff0af4 (土  9月 28 14:21:58) /]$ll /usr/share/X11/locale/ja_JP.UTF-8/*
-rw-r--r--. 1 root root   77  8月  9 09:39 /usr/share/X11/locale/ja_JP.UTF-8/Compose
-rw-r--r--. 1 root root  347 10月  9  2018 /usr/share/X11/locale/ja_JP.UTF-8/XI18N_OBJS
-rw-r--r--. 1 root root 2205  8月  9 09:39 /usr/share/X11/locale/ja_JP.UTF-8/XLC_LOCALE
```

# よくわからんがシェルスクリプトの勉強になる
awkよくつかわれているな
```
[root💘25d0f3ff0af4 (土  9月 28 14:23:44) /]$ll /usr/share/X11/x11perfcomp/*
-rwxr-xr-x. 1 root root 27271  8月 12  2017 /usr/share/X11/x11perfcomp/Xmark
-rwxr-xr-x. 1 root root   424  8月 12  2017 /usr/share/X11/x11perfcomp/fillblnk
-rwxr-xr-x. 1 root root   669  8月 12  2017 /usr/share/X11/x11perfcomp/perfboth
-rwxr-xr-x. 1 root root   624  8月 12  2017 /usr/share/X11/x11perfcomp/perfratio

```

# Xアプリで使用するキー配列を定義している設定ファイル
```
[root💘25d0f3ff0af4 (土  9月 28 14:27:04) /]$ll /usr/share/X11/xkb/compat/*
-rw-r--r--. 1 root root 1712  6月  5  2018 /usr/share/X11/xkb/compat/README
-rw-r--r--. 1 root root 1121  6月  5  2018 /usr/share/X11/xkb/compat/accessx
-rw-r--r--. 1 root root 1054  6月  5  2018 /usr/share/X11/xkb/compat/basic
-rw-r--r--. 1 root root  507  6月  5  2018 /usr/share/X11/xkb/compat/caps
-rw-r--r--. 1 root root  228  6月  5  2018 /usr/share/X11/xkb/compat/complete
-rw-r--r--. 1 root root 1644  6月  5  2018 /usr/share/X11/xkb/compat/iso9995
-rw-r--r--. 1 root root  986  6月  5  2018 /usr/share/X11/xkb/compat/japan
-rw-r--r--. 1 root root  469  6月  5  2018 /usr/share/X11/xkb/compat/ledcaps
-rw-r--r--. 1 root root  466  6月  5  2018 /usr/share/X11/xkb/compat/lednum
-rw-r--r--. 1 root root  486  6月  5  2018 /usr/share/X11/xkb/compat/ledscroll
-rw-r--r--. 1 root root 1396  6月  5  2018 /usr/share/X11/xkb/compat/level5
-rw-r--r--. 1 root root 2724  6月  5  2018 /usr/share/X11/xkb/compat/misc
-rw-r--r--. 1 root root 4604  6月  5  2018 /usr/share/X11/xkb/compat/mousekeys
-rw-r--r--. 1 root root 1133  6月  5  2018 /usr/share/X11/xkb/compat/olpc
-rw-r--r--. 1 root root  340  6月  5  2018 /usr/share/X11/xkb/compat/pc
-rw-r--r--. 1 root root 1226  6月  5  2018 /usr/share/X11/xkb/compat/pc98
-rw-r--r--. 1 root root 1842  6月  5  2018 /usr/share/X11/xkb/compat/xfree86
-rw-r--r--. 1 root root 1457  6月  5  2018 /usr/share/X11/xkb/compat/xtest

```

# ユーザーの入力イベントを定義している設定ファイル
```
[root💘25d0f3ff0af4 (土  9月 28 14:31:09) /]$ll /usr/share/X11/xorg.conf.d/*
-rw-r--r--. 1 root root 1099 11月  9  2018 /usr/share/X11/xorg.conf.d/10-evdev.conf
-rw-r--r--. 1 root root 1867  8月  9 12:28 /usr/share/X11/xorg.conf.d/10-quirks.conf
-rw-r--r--. 1 root root   92  8月  9 12:23 /usr/share/X11/xorg.conf.d/10-radeon.conf
-rw-r--r--. 1 root root  789 11月  9  2018 /usr/share/X11/xorg.conf.d/40-libinput.conf
-rw-r--r--. 1 root root 1706 11月  9  2018 /usr/share/X11/xorg.conf.d/50-synaptics.conf
-rw-r--r--. 1 root root  115 11月  9  2018 /usr/share/X11/xorg.conf.d/50-vmmouse.conf
-rw-r--r--. 1 root root 3025  8月  9 12:23 /usr/share/X11/xorg.conf.d/50-wacom.conf

```

# Xtermで絵文字表示
https://tmtms.hatenablog.com/entry/201811/windows-terminal


# dockerコンテナ削除
```
docker ps -qa | xargs -I@ bash -c 'docker stop @ && docker rm @'
```



# dockerイメージ作成
```
time docker build -t centos_xxx . | tee log

```

# dockerコンテナ作成
DISPLAYはDISPLAY=IP or ホスト名:ディスプレイ番号.ウィンドウ番号
```
docker run --privileged --shm-size=8gb --name xxx -itd -v /run/udev:/run/udev -v /run/systemd:/run/systemd -v /tmp/.X11-unix:/tmp/.X11-unix -v /var/lib/dbus:/var/lib/dbus -v /var/run/dbus:/var/run/dbus -v /etc/machine-id:/etc/machine-id -p 28787:8787 centos_xxx
```

# dockerコンテナ潜入
```
docker exec -it xxx /bin/bash
```
<file_sep>GIT_VERSION=2-24-1
PYTHON_VERSION=3-7-4
RSTUDIO_VERSION=1-2-X
R_VERSION=X-X-X
SHINY_VERSION=1-5-9
<file_sep>GIT_VERSION=2-24-1
JAVA_VERSION=11
MYSQL_VERSION=8-X-X
PYTHON_VERSION=3-7-4
<file_sep>GIT_VERSION=2-24-1
MYSQL_VERSION=8-X-X
PYTHON_VERSION=3-7-4
<file_sep>GIT_VERSION=2-24-1
PYTHON_VERSION=3-7-4
SQLITE3_VERSION=3-30-0
<file_sep># docker自動ビルド対象リストに追加

- 当該環境ディレクトリを追加

```
pwd | sed 's;.*/;;' >HHH/ENV_REPO/docker-build-wanted-list
```

# dockerイメージ作成

- キャッシュ有効-バッググラウンド実行

```
time docker build --no-cache -t XXX BUILD_ARG --build-arg REPO=INSTALLER_REPO --build-arg OS_VERSION=$(echo XXX | grep -Po '[a-z]{1,}(?:-[0-9]{1,}){1,}') . UNKO
```

- キャッシュ有効-フォアグラウンド実行

```
time docker build -t XXX BUILD_ARG --build-arg REPO=INSTALLER_REPO --build-arg OS_VERSION=$(echo XXX | grep -Po '[a-z]{1,}(?:-[0-9]{1,}){1,}') . | tee log
```

- キャッシュ無効

```
time docker build --no-cache -t XXX BUILD_ARG --build-arg REPO=INSTALLER_REPO --build-arg OS_VERSION=$(echo XXX | grep -Po '[a-z]{1,}(?:-[0-9]{1,}){1,}') . | tee log
```

# dockerコンテナ起動
```
docker run --privileged --shm-size=SHM_SIZE --hostname=doc-XXX -v HHH/ENV_REPO/XXX/mnt:HHH/mnt -v HHH/Downloads-for-docker-container/XXX:HHH/media -v /sys/fs/cgroup:/sys/fs/cgroup:ro -v /etc/localtime:/etc/localtime -v /run/udev:/run/udev -v /run/systemd:/run/systemd -v /tmp/.X11-unix:/tmp/.X11-unix -v /var/lib/dbus:/var/lib/dbus -v /var/run/dbus:/var/run/dbus -v /etc/machine-id:/etc/machine-id EXPOSE --name XXX -itd XXX
```

# dockerコンテナ潜入
```
docker exec -it XXX /bin/bash
```

# dockerコンテナ削除

- ALL削除

```
docker ps -qa | xargs -I@ bash -c 'docker stop @ && docker rm @'
```

- Exit削除

```
docker ps -a | grep Exit | awk '{print $1}' | xargs -I@ bash -c 'docker stop @ && docker rm @'
```

- 単一削除

```
docker ps -a | grep -P $(pwd | sed 's;.*/;;') | awk '{print $1}' | xargs -I@ bash -c 'docker stop @ && docker rm @'
```

- 自身以外削除

```
docker ps -a | grep -vP $(pwd | sed 's;.*/;;') | awk '{print $1}' | grep -v CONTAINER | xargs -I@ bash -c 'docker stop @ && docker rm @'
```

# dockerイメージ削除

- none削除

```
docker images | awk '$1=="<none>"{print $3}' | xargs -I@ docker rmi @
```

- 単一削除

```
docker ps -a | grep -P $(pwd | sed 's;.*/;;') | awk '{print $1}' | xargs -I@ docker rmi @
```
<file_sep>|ユーザーＩＤ|ユーザー名|グループＩＤ|グループ名|パスワード|
|:-:|:-:|:-:|:-:|:-:|
|1001|nginx|1001|nginx|nginx_pwd|
|1002|jenkins|1002|jenkins|jenkins_pwd|
<file_sep>codeblocksエディタの起動
```
codeblocks 1>launch-codeblocks.log 2>&1 &
```
<file_sep># トラシュー

- 事象

```
ERROR 1026 (HY000) at line 100 in file: 'centos-7-6-18-10-healthcheck-mysql-8-X-X-mroonga-X-X-X.sql': [plugin][register] cannot find plugin file: </usr/lib64/groonga/plugins/token_filters/stem.so>
```

- 原因
  stem.soダイナミックリンクファイルがない たしかにない

```
$find /usr/lib64/groonga/plugins
/usr/lib64/groonga/plugins
/usr/lib64/groonga/plugins/sharding.rb
/usr/lib64/groonga/plugins/sharding
/usr/lib64/groonga/plugins/sharding/logical_enumerator.rb
/usr/lib64/groonga/plugins/sharding/logical_parameters.rb
/usr/lib64/groonga/plugins/sharding/keys_parsable.rb
/usr/lib64/groonga/plugins/sharding/range_expression_builder.rb
/usr/lib64/groonga/plugins/sharding/logical_shard_list.rb
/usr/lib64/groonga/plugins/sharding/logical_table_remove.rb
/usr/lib64/groonga/plugins/sharding/parameters.rb
/usr/lib64/groonga/plugins/sharding/dynamic_columns.rb
/usr/lib64/groonga/plugins/sharding/logical_count.rb
/usr/lib64/groonga/plugins/sharding/logical_select.rb
/usr/lib64/groonga/plugins/sharding/logical_range_filter.rb
/usr/lib64/groonga/plugins/tokenizers
/usr/lib64/groonga/plugins/normalizers
/usr/lib64/groonga/plugins/normalizers/mysql.so
/usr/lib64/groonga/plugins/token_filters
/usr/lib64/groonga/plugins/token_filters/stop_word.so
/usr/lib64/groonga/plugins/ruby
/usr/lib64/groonga/plugins/ruby/eval.rb
/usr/lib64/groonga/plugins/query_expanders
/usr/lib64/groonga/plugins/query_expanders/tsv.so
/usr/lib64/groonga/plugins/functions
/usr/lib64/groonga/plugins/functions/number.so
/usr/lib64/groonga/plugins/functions/string.so
/usr/lib64/groonga/plugins/functions/time.so
/usr/lib64/groonga/plugins/functions/math.so
/usr/lib64/groonga/plugins/functions/vector.so
/usr/lib64/groonga/plugins/functions/index_column.so
```

- 対応

  - 

- 予防

  - 
<file_sep>- 起動
```
$KDevelop.AppImage 1>launch-kdevelop.log 2>&1 & </dev/null
```

[kdevelopホームページ](https://www.kdevelop.org/download)
[cppチュートリアル](https://www.learncpp.com/cpp-tutorial/a3-using-libraries-with-codeblocks/)
[fuseグループ作成方法](https://github.com/AppImage/AppImageKit/wiki/FUSE)
<file_sep>DBEAVER_VERSION=X-X-X
GIT_VERSION=2-24-1
JAVA_VERSION=11
MYSQL_VERSION=8-X-X
MAVEN_VERSION=3-6-3
PYTHON_VERSION=3-7-4
<file_sep>#!/usr/bin/env bash

usage(){
cat <<EOS
Usage:
  $0 $ENV_REPO
EOS
exit 0
}

ENV_REPO=$1;shift

[ -z $ENV_REPO ] && usage

MD_FILE_NAME=.gitignore

while read tgt;do

  echo cp $HOME/$ENV_REPO/$MD_FILE_NAME $HOME/$ENV_REPO/$tgt/$MD_FILE_NAME | sh

done < <(ls -l $HOME/$ENV_REPO | grep -P '^d' | awk '{print $9}' | grep -v docker-build-log)
<file_sep>#!/usr/bin/env bash

#ユーザーがrootを除いて複数に存在する場合のパッチ

usage(){
cat <<EOS
Usage:
  $0 script-env
  or
  $0 script-env --debug
EOS
exit 0
}

execute(){

  OS_VERSION=$1;shift

  while read tgt;do
    #最後に見つかったWORKDIR以外を削除
    cmd=$(grep -n -P  'WORKDIR' $tgt/Dockerfile.auto |cut -d' ' -f1|xargs|sed '/^$/d'|awk -v FS=' ' '{$NF="";print $0}' | xargs -I@ echo @ | perl -pe "s;:.*;;;s;^;sed -i ;;s;$;d $tgt/Dockerfile.auto;")
    if [ "$SHELL" = 'bash' ];then
      echo $cmd | $SHELL
    else
      echo $cmd
    fi

  done < <(find $HOME/$ENV_REPO -type d | grep -v docker-log | grep $OS_VERSION | grep -vP mnt)
}

main(){
  ENV_REPO=$1;shift
  DEBUG=$1;shift

  if [ "$DEBUG" = '--debug' ];then
    SHELL=: #なんもしない
  else
    SHELL=bash #じっこうする
  fi

  [ -z $ENV_REPO ] && usage

  export -f execute
  find $HOME/$ENV_REPO -mindepth 1 -type d | grep -vP '\.git|docker-log|mnt' | grep -Po '[a-z]+(-[0-9]{1,}){1,}' | sort | uniq | while read tgt;do execute $tgt ;done
}

main "$@"
<file_sep>- singularityコンテナ環境を使ったGPU込みの検証環境
  - 自宅マシンはGPUないや。。
  - https://qiita.com/mkt3/items/b9f86f5ddf9eb0f43608

- gpuをつかったハンディそうな検証環境構築
  - https://qiita.com/exthnet/items/91e8a9f4e620de3c28de


- java
  - https://speakerdeck.com/shintanimoto/introduction-to-reactive-programming-using-spring-webflux?slide=21

- lisp
  - https://masatoi.hateblo.jp/entry/20151210/1449948614

- vpnの設定くちょー簡単
  - https://gihyo.jp/admin/serial/01/ubuntu-recipe/0614


- 表記正規化が大変そう
  - https://www.slideshare.net/mobile/WorksApplications/java-82794239

- Kuromori
  - http://www.mwsoft.jp/programming/lucene/kuromoji.html

- Wire shark ネットワーク監視ツール


- ruby ファイル書き込み　読み込みと同じで、引数のオプションを変える
  - https://uxmilk.jp/22615

- ruby ファイル拡張子以外を切り出すときにslice使う。
  - https://uxmilk.jp/24040

- pytorch bi gram
  - https://buildersbox.corp-sansan.com/entry/2019/09/26/110000

- 文章ごとに処理する。文章idふる。
  - 形態素解析するかしないか
    - する
      - mecabかそれ以外か
    - しない
      - 何文字単位で文章を区切るか

- 区切る際、各文書グラム単位に連番付与

- 連番付与後、グラムごとに出現位置をサマル


- 区切り方で特色が出で面白い！

- Rでバイグラム 分析関数leadなど使うとハンディにできるっぽい
  - https://iwsktky.wixsite.com/home/post/r%E4%B8%8A%E3%81%A7-%E7%B0%A1%E5%8D%98%E3%81%AB-n-gram%E3%82%92%E4%BD%9C%E3%81%A3%E3%81%A6%EF%BC%8C%E5%85%B1%E8%B5%B7%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%92%E4%BD%9C%E3%82%8B%E6%96%B9%E6%B3%95

- 学習済みってのは分散表現を終えた後のって意味やな。ハンディなモデルがWiki以外で欲しい。
  - https://qiita.com/Hironsan/items/513b9f93752ecee9e670


- 分散表現はシェルゲイでできる。メカブかました後、unnestしてtranspose
  - https://blog.aidemy.net/entry/2017/07/01/184421


- .net可変長戻り読みができる online で試してみる。
  - https://oraclesqlpuzzle.ninja-web.net/regex/regex-9-1.html

- csharp開発環境
  - https://www.casleyconsulting.co.jp/blog/engineer/181/


- ruby アスタ配列展開
  - http://yamakichi.hatenablog.com/entry/2016/10/18/232253

- Jupiter lab notebookの進化系
  - https://qiita.com/canonrock16/items/d166c93087a4aafd2db4


- wsl2インスコ
  - https://qiita.com/TsuyoshiUshio@github/items/947301bd9317610572fc

- クロス集計
  - https://kunst1080.hatenablog.com/entry/2013/06/02/234025

- jenkinsfileの書き方
  - https://qiita.com/lufia/items/18cdb01f86a6d5040c60

- データセンターの光景
  - https://jp.quora.com/YouTube%E3%81%AF%E4%BD%95%E6%95%85%E3%81%82%E3%82%93%E3%81%AA%E3%81%AB%E4%B8%96%E7%95%8C%E4%B8%AD%E3%81%AE%E5%A4%A7%E9%87%8F%E3%81%AE%E5%8B%95%E7%94%BB%E3%82%92%E4%BF%9D%E5%AD%98%E3%81%97%E3%81%A6%E3%81%84%E3%82%89

- kube概念
  - https://qiita.com/Kta-M/items/ce475c0063d3d3f36d5d

- goでsqliteするやつ
  - https://github.com/Johniel/go-quadtree/blob/master/src/main.go

- git操作-まちがいそうなやつ
  - https://qiita.com/terry_6518/items/44ce2419a78d4121569a#comments

- python マルチスレッド
  - https://qiita.com/kenmaro/items/69fdd84e18e793a21790

- マルチスレッドプログラミング
  - http://yamatyuu.net/computer/program/vc2013/thread3/index.html

- このノートパソコンかっこいいな
  - https://www.itmedia.co.jp/news/spv/2003/06/news003.html

- マルチスレッドのグルーピングに関して
  - https://www.isus.jp/hpc/mtp-windows-64core/

- python 小技
  - https://qiita.com/_akiyama_/items/b24acf53470a885c70db

- データ前処理フロー      https://qiita.com/takashige/items/4882555f4a99a0d96220#%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E3%82%92%E6%B4%BB%E7%94%A8%E3%81%99%E3%82%8B%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%81%AE%E8%A8%AD%E8%A8%88%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9

- 正規表現のビューワー
  - https://qiita.com/yucatio/items/e980550814f66b3450dd

- pythonスクレイピング説明丁寧
  - https://qiita.com/HIRO960/items/467ce27bca7c353e3624

- GraphQLのクエリ使い方説明
  - https://qiita.com/shunp/items/d85fc47b33e1b3a88167

- n-gramを利用したsqlの自動生成。調べたいことを言語された文章として受け取って、適切なsqlを生成する際の精度についての話
  - https://qiita.com/Inowe2457/items/562ef5312cc598711a6c

- 1975好き
  - https://note.com/2020willblessus/n/n593ea331e584

- 機械学習
  - 概念からの説明　https://ledge.ai/reinforcement-learning/

- kube 運用知見
  - https://tech.smartcamp.co.jp/entry/use-kubernetes-one-year?amp=1

- 機械学習 データセットやアプローチについて
  - https://github.com/allenai/acl2018-semantic-parsing-tutorial

- csvハンドリング操作の3言語での比較
  - https://employment.en-japan.com/engineerhub/entry/2020/02/27/103000?amp=1

- nim エントリポイントの実装例
  - https://qiita.com/6in/items/c735cb2ffbe79f3f9d94

- nimのサンプルはこの方の記事あたりを参考に
  - https://qiita.com/6in/items/cbb161c401afe054314f

- ruby の標準入力
  - https://qiita.com/mogulla3/items/fbc2a46478872bebbc47

- ruby の標準入力
  - https://docs.ruby-lang.org/ja/latest/class/IO.html

- api curl きれいにまとまっている。参考になる。
  - https://qiita.com/gorilla0513/items/9306d4165637c29370eb

- go標準入力
  - https://qiita.com/tnoda_/items/b503a72eac82862d30c6

- go エラーハンドリング
  - https://qiita.com/nayuneko/items/3c0b3c0de9e8b27c9548

- uiの部品名とかは参考になるかなー
  - https://nablarch.github.io/docs/LATEST/doc/index.html
  - https://nablarch.github.io/docs/LATEST/doc/development_tools/ui_dev/doc/reference_jsp_widgets/index.html

- python便利ライブラリ
  - IBM 機械学習力入れてんだよな
  - https://qiita.com/ishida330/items/53f1b0df2247fab5c6dd

- kube環境構築
  - https://qiita.com/ishida330/items/dfff18362ea16aa92f88

- was websphere IBM qiitaでぐぐる
  - https://qiita.com/ishida330/items/78d7e19510c141201d69

- was実行環境とかdockerであるぽい
  - https://qiita.com/triple4649/items/727eb3358a9fa5414bed

- gcとかの設定いじる手順
  - https://qiita.com/ch7821/items/0cecc5909715dc4bf0b6

- jmeter多重度いじるサンプル手順
  - https://qiita.com/ch7821/items/50ee9f667016ac9e45af

- cicleciデプロイ手順
  - https://qiita.com/gakinchoy7/items/ae31107ef56efb16fe7e

- bash テンプーレト作成
  - https://www.m3tech.blog/entry/2018/08/21/bash-scripting

- pytoch インデクシングにも関わってくるぽい cpuだけでなくgpuの力も合わせて計算高速化させようとしているのかな
  - https://qiita.com/miyamotok0105/items/1fd1d5c3532b174720cd

- pythoch環境構築 gpuが重要そう
  - https://qiita.com/riversun/items/9f8ecbae2645c22853b6

- httperfとabの使い方
  - https://hostingstock.net/article/notes/benchmark-tools/

- ngunxとapacheの性能比較
  - https://qiita.com/kamihork/items/49e2a363da7d840a4149

- Apache bench 一定時間内に起動する総プロセス数と同時起動プロセス数を指定。多重度がユーザー数で総起動プロセス数を割れば一ユーザーあたりのプロセス数。
  - https://qiita.com/flexfirm/items/ac5a2f53cfa933a37192

- Apache jmeter負荷テスト多重度(プロセス同時起動数)をある時間内で制御できてテストするツール
  - https://qiita.com/PlanetMeron/items/a604645d6f89b6ce3a14

- このイメージに近いマイリーダー
  - https://yoshinorin.net/2019/07/20/nuxt-js-photo-gallery-by-vue-magic-grid/

- この方の環境づくりが参考になる
  - https://github.com/YoshinoriN/docker-gitbucket-orchestration

- 検索エンジン用語まとめ
  - https://qiita.com/mogulla3/items/23aaffbe29c4e600876
- nodejs groonga接続方式
  - https://memo.appri.me/programming/groonga-nroonga-nodejs

- フォルダ構成関連
  - https://upura.hatenablog.com/entry/2018/12/28/225234


- ソケットエラー関連
  - https://rcmdnk.com/blog/2015/07/03/computer-linux/


- データベースクライアントツール
ベンダー問わないのが対応範囲が広いのがすごい。
  - https://qiita.com/Ryooota/items/755e249f5241d2c964e6
  - https://qiita.com/12345/items/48f6856e32fd618ea307

- 言語別トークナイズ管理マスタgroonga

- apache spark環境似てる。フローが参考になる。
  - http://www.intellilink.co.jp/article/column/bigdata-kk04.html

- 分かち書きpythonによる使用例
  - http://testpy.hatenablog.com/entry/2016/10/04/010000

- グリッドレイアウトこれがいいかなー。簡単そう。
  - https://coliss.com/articles/build-websites/operation/javascript/magic-grid-for-dynamic-grid.html

- nuxt.jsでできるそう。グリッドレイアウト。
  - https://yoshinorin.net/2019/07/20/nuxt-js-photo-gallery-by-vue-magic-grid/

- nuxt.jsインストール
  - https://ja.nuxtjs.org/guide/installinglation

- magic-gridは単一ファイルに収まりそう
  - https://on-ze.com/archives/7644

- ブログテンプーレトあった
  - https://ulab.hatenablog.com/entry/20191006/1570336147

- axiosの使い方。mvc的な機能分割を提供してくれるプラグイン。
  - https://public-constructor.com/nuxtjs-with-axios/

- nuxtフレームワークでのaxiosライブラリを使用したコンパクトなアプリ
  - https://qiita.com/mgr/items/f2193fd21765be1d34c2

- nuxt.jsでのpost実装例 nuxt.js axios apiでぐぐる
  - https://qiita.com/cortyuming/items/3257ccc7936acf1a7989

- nuxt.jsでのmvc感出てる
  - https://noumenon-th.net/programming/2019/07/15/axios-module/

- pdfファイルからテキスト抽出できるjar
  - https://qiita.com/arc279/items/5b6cf2d0b24ce5a50cae

- elasticsearchのテーブル定義変更に伴うview側のkibanaの横テン串チェックの事例
  - https://qiita.com/NAO_MK2/items/2d03d9db1cd7b0ceae04

- elasticsearchのcrud処理の事例とともに概念の説明あり
  - https://qiita.com/kiyokiyo_kzsby/items/344fb2e9aead158a5545

- pythonグルーピング事例　単一キーに対する複数バリュー listagg
  - https://qiita.com/tag1216/items/b2765e9e87025c01e57f

- pythonのzip関数。egisonにもある。変数展開アスタの使いかた。しらかみゅさんのコメントいつも参考になる。
  - https://qiita.com/shibasab/items/836ebfbf496a757c09e2

- perlのオプションまとめがいい。nleとanleとEオプションが使い勝手いいかな。
  - https://qiita.com/ohtsuka1317/items/92c339a65533e1e6c6fc

- jqの日付型　環境変数の使い方のサンプル
  - https://qiita.com/arc279/items/436d8e7b8653848406e3

- dockerコンテナを複数立ち上げたとき各コンテナで動いているプロセスのログを一元化する事例。
  - https://qiita.com/skjune12/items/d88a8eb32794865afcd3

- jqで日付変換 読みやすい形式に変換
  - https://qiita.com/sutoh/items/350bb96a06cb237f54af

- mroonga mysqlとのコラボいい。
  - https://qiita.com/nayuneko/items/e1d4cad31b9ec23fd12c

- jqフラット化　一度退避してから、直積するイメージ
  - https://qiita.com/arc279/items/00b353428120f48a9e06

- perlのexistsぽくてとても重宝するコマンド
  - https://qiita.com/mumian1014/items/bb71b0520e457f3b2466
<file_sep>|ユーザーＩＤ|ユーザー名|グループＩＤ|グループ名|パスワード|
|:-:|:-:|:-:|:-:|:-:|
|1000|oracle|1000|oracle|oracle_pwd|
<file_sep>GIT_VERSION=2-24-1
JAVA_VERSION=11
MAVEN_VERSION=3-6-3
PYTHON_VERSION=3-7-4
<file_sep>GIT_VERSION=2-24-1
PYTHON_VERSION=3-7-4
RSTUDIO_VERSION=1-2-X
R_VERSION=X-X-X
<file_sep>MECAB_IPADIC_VERSION=2-7-0
MECAB_VERSION=0-9-9-6
GIT_VERSION=2-24-1
PYTHON_VERSION=3-7-4
<file_sep># 動作確認

- https://github.com/ukijumotahaneniarukenia/Hatena-Textbook

- https://qiita.com/naokits/items/8f09ffc8bbc78ade366c


```
$cat a.swift
#!/usr/bin/env swift

let hello = "こんにちは"
print(hello)

// 遊び心で。。
let 挨拶 = "お世話になります"
print(挨拶)
$chmod 700 a.swift
$./a.swift
こんにちは
お世話になります
```
<file_sep># 参考文献

- https://qiita.com/taka4sato/items/2c3397ff34c440044978</br>
- https://qiita.com/tand826/items/0c478bf63ead75427782</br>
- https://code-graffiti.com/how-to-use-jupyter-notebook/#toc6</br>


# バージョン確認

```
$python3 --version
Python 3.7.4
$ pip3 -V
pip 19.3.1 from /usr/local/lib/python3.7/site-packages/pip (python 3.7)
```

# ライブラリインストール

pipコマンド経由で各ライブラリをいんすこ

ライブラリのインストールはrootユーザーで実行

```
$pip3 install numpy pandas matplotlib seaborn scikit-learn plotly ipython[notebook]
```

# jupyterコマンド確認

```
$ jupyter --version
jupyter core     : 4.6.1
jupyter-notebook : 6.0.2
qtconsole        : not installed
ipython          : 7.11.1
ipykernel        : 5.1.3
jupyter client   : 5.3.4
jupyter lab      : not installed
nbconvert        : 5.6.1
ipywidgets       : 7.5.1
nbformat         : 4.4.0
traitlets        : 4.3.3
```

# jupyter notebook起動

rootユーザー以外で実行

```
$ jupyter notebook --port 8888 --ip=0.0.0.0 1>launch-jupyter.log 2>&1 &
[1] 278
```


ちょっとあつかいづらくなった。

これで起動しておくのがよさげ。。入力れむしたい。

```
$ jupyter notebook --port 8888 --ip=0.0.0.0
```


ブラウザが立ち上がる。

ログの一部
```
[I 17:09:23.749 NotebookApp] Writing notebook server cookie secret to /home/kuraine/.local/share/jupyter/runtime/notebook_cookie_secret
[I 17:09:23.882 NotebookApp] Serving notebooks from local directory: /home/kuraine
[I 17:09:23.882 NotebookApp] The Jupyter Notebook is running at:
[I 17:09:23.882 NotebookApp] http://eb796c05a8c5:8888/?token=<PASSWORD>
[I 17:09:23.882 NotebookApp]  or http://127.0.0.1:8888/?token=<PASSWORD>
[I 17:09:23.882 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[C 17:09:23.907 NotebookApp]

    To access the notebook, open this file in a browser:
        file:///home/kuraine/.local/share/jupyter/runtime/nbserver-278-open.html
    Or copy and paste one of these URLs:
        http://eb796c05a8c5:8888/?token=<PASSWORD>
     or http://127.0.0.1:8888/?token=<PASSWORD>
START /usr/bin/firefox "/home/kuraine/.local/share/jupyter/runtime/nbserver-278-open.html"
Running without a11y support!
```

ブラウザ経由で作業する場合はサーバーから発行されたトークンを元に実施

# 作業ブック保存


ブラウザでの作業結果を保存すると、ローカルホストのサーバーでは以下のようにファイルが保存される。

Untitled.ipynbがあると前回の作業分から実施できる。

```
$ pwd
/home/kuraine
$ ll
total 8
-rw-rw-r--. 1 kuraine kuraine  848  1月  4 17:17 Untitled.ipynb
-rw-rw-r--. 1 kuraine kuraine 1443  1月  4 17:17 launch_jupyter.log
```


ログにはこんな感じででる。

```
[I 17:17:20.501 NotebookApp] Creating new notebook in
[I 17:17:20.535 NotebookApp] Writing notebook-signing key to /home/kuraine/.local/share/jupyter/notebook_secret
[I 17:17:21.102 NotebookApp] Kernel started: 0143cd50-aea8-43df-b248-1ff41696e018
[I 17:17:34.441 NotebookApp] Saving file at /Untitled.ipynb
```

ブラウザ閉じるとログにはこんな感じででる。

```
[Parent 402, Gecko_IOThread] WARNING: pipe error (77): Connection reset by peer: file /builddir/build/BUILD/firefox-68.3.0/ipc/chromium/src/chrome/common/ipc_channel_posix.cc, line 358
[Parent 402, Gecko_IOThread] WARNING: pipe error (108): Connection reset by peer: file /builddir/build/BUILD/firefox-68.3.0/ipc/chromium/src/chrome/common/ipc_channel_posix.cc, line 358
[Parent 402, Gecko_IOThread] WARNING: pipe error (95): Connection reset by peer: file /builddir/build/BUILD/firefox-68.3.0/ipc/chromium/src/chrome/common/ipc_channel_posix.cc, line 358
```
<file_sep>|ユーザーＩＤ|ユーザー名|グループＩＤ|グループ名|パスワード|
|:-:|:-:|:-:|:-:|:-:|
|1001|mysql|1001|mysql|mysql_pwd|
<file_sep>#!/usr/bin/env bash

usage(){
cat <<EOS
Usage:
  $0 script-env
  or
  $0 script-env --debug
EOS
exit 0
}

execute(){

  OS_VERSION=$1;shift

  [ -z $OS_VERSION ] && usage

  OS_NAME=$(echo $OS_VERSION | perl -pe 's/^([a-z]+)-(.*)$/\1/g')

  TEMPLATE_FILE=$(find $HOME/$ENV_REPO -name "docker-template-Dockerfile-$OS_NAME")

  while read tgt;do
    #テンプレートファイルのMAIN_USERの置換
    {
      echo $tgt
      grep -c -vP  'ユーザーＩＤ|aine|kuraine|nahato|mujiku|:-:|root' $tgt/env-user.md
      grep -vP  'ユーザーＩＤ|aine|kuraine|nahato|mujiku|:-:|root' $tgt/env-user.md | awk -v FS='|' -v ORS='' '{print ","$3}'
    } | xargs -n3 | \
    while read file cnt usr;do
      if [ 0 -eq $cnt ];then
        cmd=$(echo "sed -n '/^USER/,/^EXPOSE/p' $TEMPLATE_FILE | head -n-1 | perl -pe "s/MAIN_USER/kuraine/g" >>$file/Dockerfile.auto")
        if [ "$SHELL" = 'bash' ];then
          echo $cmd | $SHELL
        else
          echo $cmd
        fi
      fi
      for (( i=0;i<$cnt;i++));do
        cmd=$(echo "sed -n '/^USER/,/^EXPOSE/p' $TEMPLATE_FILE | head -n-1 | perl -pe "s/MAIN_USER/$(echo $usr | cut -d',' -f$(($i+2)))/g" >>$file/Dockerfile.auto")
        if [ "$SHELL" = 'bash' ];then
          echo $cmd | $SHELL
        else
          echo $cmd
        fi
      done
    done

  done < <(find $HOME/$ENV_REPO -type d | grep -v docker-log | grep $OS_VERSION | grep -vP mnt)

}

main(){
  ENV_REPO=$1;shift
  DEBUG=$1;shift

  if [ "$DEBUG" = '--debug' ];then
    SHELL=: #なんもしない
  else
    SHELL=bash #じっこうする
  fi

  [ -z $ENV_REPO ] && usage

  export -f execute
  find $HOME/$ENV_REPO -mindepth 1 -type d | grep -vP '\.git|docker-log|mnt' | grep -Po '[a-z]+(-[0-9]{1,}){1,}' | sort | uniq | while read tgt;do execute $tgt ;done
}

main "$@"
<file_sep>GIT_VERSION=2-24-1
PYTHON_VERSION=3-7-4
MONODEVELOP_VERSION=X-X-X
<file_sep>- 公式マニュアル
  - http://archive.apache.org/dist/lucene/solr/ref-guide/apache-solr-ref-guide-8.1.pdf

- https://kshigeru.blogspot.com/2012/01/solr-wikipedia-data-import.html
- http://www.mwsoft.jp/programming/munou/wikipedia_solr.html
- https://gist.github.com/satom9to5/7902551

- wikiデータ
  - https://dumps.wikimedia.org/jawiki/latest/

- データインポート
  - http://lucene.apache.org/solr/guide/8_4/uploading-structured-data-store-data-with-the-data-import-handler.html#uploading-structured-data-store-data-with-the-data-import-handler



デモで練習

- https://lucene.apache.org/solr/guide/8_4/uploading-structured-data-store-data-with-the-data-import-handler.html#uploading-structured-data-store-data-with-the-data-import-handler

```
solr@9d28f1194bed ~$solr -e dih

Starting up Solr on port 8983 using command:
"/usr/local/src/solr-8.4.1/bin/solr" start -p 8983 -s "/usr/local/src/solr-8.4.1/example/example-DIH/solr"

NOTE: Please install lsof as this script needs it to determine if Solr is listening on port 8983.

Started Solr server on port 8983 (pid=163). Happy searching!


Solr dih example launched successfully. Direct your Web browser to http://localhost:8983/solr to visit the Solr Admin UI

```
- プロセス起動

```
solr@95adbde9b31c /usr/local/src/script-repo$solr start -p 8983
Waiting up to 180 seconds to see Solr running on port 8983 [/]
Started Solr server on port 8983 (pid=828). Happy searching!
```


- 待受ポート確認

```
solr@95adbde9b31c /usr/local/src/script-repo$lsof -P -i:8983
COMMAND PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
java    828 solr  152u  IPv4 1432559      0t0  TCP *:8983 (LISTEN)
```

- プロセス確認

```
solr@95adbde9b31c /usr/local/src/script-repo$ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
solr         1  0.0  0.0   5372  2192 pts/0    Ss+  19:27   0:00 /bin/bash
solr         7  0.0  0.0   5372  2416 pts/1    Ss   19:28   0:00 /bin/bash
solr       828 17.3  0.7 5423016 239112 pts/1  Sl   19:39   0:05 /usr/local/src/jdk-11/bin/java -server -Xms512m -Xmx512m -XX:+UseG1GC -XX:+PerfDisableSharedMem -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=2
solr       926  0.0  0.0   7008  1560 pts/1    R+   19:39   0:00 ps aux
```

- ブラウザアクセス

  - http://localhost:8983/solr

```
solr@7b86fab03d5e ~$ls -lh
total 12G
drwxr-xr-x. 3 solr solr 4.0K  2月 11 13:56 dotfile
-rw-rw-r--. 1 solr solr  12G  2月 11 17:34 jawiki-latest-pages-articles.xml
```

- コア作成

```
solr@95adbde9b31c /usr/local/src/script-repo$solr create -c wiki
WARNING: Using _default configset with data driven schema functionality. NOT RECOMMENDED for production use.
         To turn off: bin/solr config -c wiki -p 8983 -action set-user-property -property update.autoCreateFields -value false

Created new core 'wiki'
```


- 設定ファイル編集

以下の3ファイルを修正。レポからコピってくる。

  - /usr/local/src/solr-8.4.1/server/solr/wiki/conf/managed-schema

  - /usr/local/src/solr-8.4.1/server/solr/wiki/conf/solrconfig.xml

  - /usr/local/src/solr-8.4.1/server/solr/wiki/jawiki-latest-pages-articles.xml

```
$grep -Po '<.*>' jawiki-latest-pages-articles.xml | head -n100 | awk '/<page>/,/<\/page>/{if($0=="<page>"){print 1,$0}else{print 0,$0}}' | nl
```


- 設定ファイル変更後は一度インスタンスをポート単位で落として、再起動

```
solr@95adbde9b31c /usr/local/src/solr-8.4.1/server/solr/wiki/conf$solr stop -p 8983
Sending stop command to Solr running on port 8983 ... waiting up to 180 seconds to allow Jetty process 828 to stop gracefully.
solr@95adbde9b31c /usr/local/src/solr-8.4.1/server/solr/wiki/conf$solr start -p 8983 -s "/usr/local/src/solr-8.4.1/server/solr"
Waiting up to 180 seconds to see Solr running on port 8983 [/]
Started Solr server on port 8983 (pid=1404). Happy searching!
```

- コマンドラインからデータ取得

```
curl -s http://localhost:8983/solr/wiki/select?q=*%3A* | jq

curl -s "http://localhost:8983/solr/wiki/select?q=*%3A*&rows=100&wt=json" | jq
```

- xpath式をjqから逆算などしたい

<file_sep># dockerイメージ作成
```
time docker build -t centos-7-6-18-10-racket . | tee log
```

# dockerコンテナ作成
```
docker run --privileged --shm-size=4gb --name centos-7-6-18-10-racket -itd -v /sys/fs/cgroup:/sys/fs/cgroup:ro -v /run/udev:/run/udev -v /run/systemd:/run/systemd -v /tmp/.X11-unix:/tmp/.X11-unix -v /var/lib/dbus:/var/lib/dbus -v /var/run/dbus:/var/run/dbus -v /etc/machine-id:/etc/machine-id centos-7-6-18-10-racket
```

# Xアプリ転送許可設定

dockerコンテナ内のXアプリをdockerホストに転送許可する。 ローカルネットワーク内で存在する全てのマシンからのX転送を許可している。マシン単位で設定もできる。

```
xhost +local:
```

# dockerコンテナ潜入

```
docker exec --user kuraine -it centos-7-6-18-10-racket /bin/bash
```

# drracket起動

```
$drracket 1>~/launch_drracket.log 2>&1 &
[1] 122
$ll
total 0
-rw-rw-r--. 1 kuraine kuraine 0  1月  5 09:17 launch_drracket.log
```
<file_sep>DBEAVER_VERSION=X-X-X
GIT_VERSION=2-24-1
JAVA_VERSION=11
MAVEN_VERSION=3-6-3
MYSQL_VERSION=8-X-X
PYTHON_VERSION=3-7-4
<file_sep>DBEAVER_VERSION=X-X-X
GIT_VERSION=2-24-1
JAVA_VERSION=11
MAVEN_VERSION=3-6-3
PYTHON_VERSION=3-7-4
SQLITE3_VERSION=3-30-0
<file_sep>dbeaverの接続以外はOK

16-04のパッケージ状態とdbeaverとの相性のもんだいか
<file_sep>DBEAVER_VERSION=X-X-X
GIT_VERSION=2-24-1
JAVA_VERSION=11
MARIADB_VERSION=X-X-X
MAVEN_VERSION=3-6-3
PYTHON_VERSION=3-7-4
<file_sep>DBEAVER_VERSION=X-X-X
GIT_VERSION=2-24-1
JAVA_VERSION=11
MAVEN_VERSION=3-6-3
POSTGRES_VERSION=12-X
PYTHON_VERSION=3-7-4
<file_sep>|ユーザーＩＤ|ユーザー名|グループＩＤ|グループ名|パスワード|
|:-:|:-:|:-:|:-:|:-:|
|1002|td|agent_pwd|1003|nginx|
<file_sep>|ユーザーＩＤ|ユーザー名|グループＩＤ|グループ名|パスワード|
|:-:|:-:|:-:|:-:|:-:|
|1001|db2fenc1|1001|db2fenc1|db2fenc1_pwd|
|1002|db2inst1|1002|db2inst1|db2inst1_pwd|
<file_sep>CHROMIUM_VERSION=X-X-X
GIT_VERSION=2-24-1
JAVA_VERSION=11
PYTHON_VERSION=3-7-4
<file_sep>rootユーザーで以下のスクリプトを実行

```
$cd /usr/local/src/script-repo
$bash ubuntu-19-10-healthcheck-mysql-8-X-X.sh
```

標準出力に以下のログが出力されればOK


```
mysqld will log errors to /var/log/mysql/error.log
mysqld is running as pid 1411
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
mysql        1  0.0  0.0   5108  1440 pts/0    Ss   21:53   0:00 bash /etc/init/run.sh
mysql        8  0.0  0.1  96080 37864 ?        S    21:53   0:00 fcitx
mysql        9  0.0  0.0   5372  2192 pts/0    S+   21:53   0:00 bash
mysql       14  0.0  0.0   6964   796 ?        S    21:53   0:00 dbus-launch --autolaunch bc74deaa9e044c079ed6fc963d084157 --binary-syntax --close-stderr
mysql       15  0.0  0.0   7064  1320 ?        Ss   21:53   0:00 /usr/bin/dbus-daemon --syslog-only --fork --print-pid 5 --print-address 7 --session
mysql       21  0.0  0.0   7064  1700 ?        Ss   21:53   0:00 /usr/bin/dbus-daemon --syslog --fork --print-pid 5 --print-address 7 --config-file /usr/share/fcitx/dbus/daemon.conf
mysql       25  0.0  0.0   5328   432 ?        SN   21:53   0:00 /usr/bin/fcitx-dbus-watcher unix:abstract=/tmp/dbus-gmhUjTdojE,guid=d753ea1a2bc3e6e73226ea965ec28558 21
mysql       26  0.0  0.0  73632 14324 ?        Sl   21:53   0:00 /usr/lib/mozc/mozc_server
mysql       43  0.0  0.0   5400  2364 pts/1    Ss   21:54   0:00 /bin/bash
root      1340  0.0  0.0   6456  2400 pts/1    S    22:15   0:00 su root
root      1341  0.0  0.0   5372  2368 pts/1    S    22:15   0:00 bash
root      1353  0.0  0.0   5160  1916 pts/1    S+   22:17   0:00 bash ubuntu-19-10-healthcheck-mysql-8-X-X.sh
mysql     1411  0.0  1.0 1935484 335180 ?      Sl   22:17   0:00 mysqld -D --user=mysql
root      1455  0.0  0.0   7008  1560 pts/1    R+   22:17   0:00 ps aux
2020-05-18T13:17:29.643055Z 0 [System] [MY-013169] [Server] /usr/sbin/mysqld (mysqld 8.0.20-0ubuntu0.19.10.1) initializing of server in progress as process 1364
2020-05-18T13:17:29.650492Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2020-05-18T13:17:30.506229Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2020-05-18T13:17:32.501866Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: <<PASSWORD>
2020-05-18T13:17:37.060858Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.20-0ubuntu0.19.10.1) starting as process 1409
2020-05-18T13:17:37.078212Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2020-05-18T13:17:37.355239Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2020-05-18T13:17:37.455126Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Socket: '/var/run/mysqld/mysqlx.sock' bind-address: '::' port: 33060
2020-05-18T13:17:37.593732Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
2020-05-18T13:17:37.627311Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.20-0ubuntu0.19.10.1'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  (Ubuntu).
mysql: [Warning] Using a password on the command line interface can be insecure.
mysql: [Warning] Using a password on the command line interface can be insecure.
+----------------+
| user()         |
+----------------+
| root@localhost |
+----------------+
+-------------------------+
| version()               |
+-------------------------+
| 8.0.20-0ubuntu0.19.10.1 |
+-------------------------+
+---------------------------------+------+
| rsv_args                        | ele  |
+---------------------------------+------+
| [{"x":"8"},{"x":"3"},{"x":"4"}] | 8    |
| [{"x":"8"},{"x":"3"},{"x":"4"}] | 3    |
| [{"x":"8"},{"x":"3"},{"x":"4"}] | 4    |
+---------------------------------+------+
+------+--------------+
| id   | item         |
+------+--------------+
|    1 | うんこ       |
|    2 | もりもり     |
|    3 | 森鴎外       |
+------+--------------+
+----------+
| count(*) |
+----------+
|        3 |
+----------+
mysql: [Warning] Using a password on the command line interface can be insecure.
+------------------+
| user()           |
+------------------+
| user01@localhost |
+------------------+
+-------------------------+
| version()               |
+-------------------------+
| 8.0.20-0ubuntu0.19.10.1 |
+-------------------------+
+---------------------------------+------+
| rsv_args                        | ele  |
+---------------------------------+------+
| [{"x":"8"},{"x":"3"},{"x":"4"}] | 8    |
| [{"x":"8"},{"x":"3"},{"x":"4"}] | 3    |
| [{"x":"8"},{"x":"3"},{"x":"4"}] | 4    |
+---------------------------------+------+
+------+--------------+
| id   | item         |
+------+--------------+
|    1 | うんこ       |
|    2 | もりもり     |
|    3 | 森鴎外       |
+------+--------------+
+----------+
| count(*) |
+----------+
|        3 |
+----------+
mysql: [Warning] Using a password on the command line interface can be insecure.
```
<file_sep>DBEAVER_VERSION=X-X-X
GIT_VERSION=2-24-1
JAVA_VERSION=11
MAVEN_VERSION=3-6-3
PERL_VERSION=5-30-0
POSTGRES_VERSION=12-0
PYTHON_VERSION=3-7-4
<file_sep>#!/usr/bin/env bash

usage(){
cat <<EOS
Usage:
  $0 EXPOSE script-env
EOS
exit 0
}

CHK_WORD=$1;shift
ENV_REPO=$1;shift

[ -z $CHK_WORD ] && usage
[ -z $ENV_REPO ] && usage

while read tgt;do
  if [ -f $tgt/Dockerfile.sub ];then
    RT="$(grep $CHK_WORD $tgt/Dockerfile.sub | tr ' ' '=')"
    if [ -z "$RT" ];then
      :
    else
      while read n;do
        echo "echo '-p $n' >>$tgt/env-expose.md" | bash
      done < <(echo $RT | perl -pe 's/([0-9]+)/\1:\1/g;s/EXPOSE=//g'| tr ' ' '\n')
    fi
  else
    :
  fi
  if [ -f $tgt/Dockerfile.sub ];then
    echo "sed -i /^$/d $tgt/env-expose.md" | bash
  else
    :
  fi
done < <(find $HOME/$ENV_REPO -mindepth 1 -type d | grep -vP '\.git|docker-log|mnt')
<file_sep>#!/usr/bin/env bash

usage(){
cat <<EOS
Usage:
  $0 script-env
EOS
exit 0
}

ENV_REPO=$1;shift

[ -z $ENV_REPO ] && usage


crontab < $HOME/$ENV_REPO/docker-build-wanted-list
<file_sep>|ユーザーＩＤ|ユーザー名|グループＩＤ|グループ名|パスワード|
|:-:|:-:|:-:|:-:|:-:|
|1001|rstudio|1001|rstudio|rstudio_pwd|
<file_sep>GROONGA_VERSION=9-1-2
GIT_VERSION=2-24-1
PYTHON_VERSION=3-7-4
<file_sep>#!/usr/bin/env bash

usage(){
cat <<EOS
Usage:
  $0 script-env
EOS
exit 0
}

ENV_REPO=$1;shift

[ -z $ENV_REPO ] && usage

MD_FILE_NAME=env-image.md

while read tgt;do

  if [ -f $HOME/$ENV_REPO/$tgt/$MD_FILE_NAME ];then
    #echo 1 $tgt
    :
  else
    #echo 0 $tgt
    touch $HOME/$ENV_REPO/$tgt/$MD_FILE_NAME
  fi

done < <(ls -l $HOME/$ENV_REPO | grep -P '^d' | awk '{print $9}' | grep -v docker-log)
<file_sep>dbeaverからの接続は安定している
ドライバは12cだったけど、19cでも余裕だった

初期化セットアップ

**root**ユーザーで実行

```
root docker-container-centos-7-6-18-10-oracle-dbeaver /home/oracle$./init_db.sh delete_cdb

root docker-container-centos-7-6-18-10-oracle-dbeaver /home/oracle$./init_db.sh create_cdb

```

**oracle**ユーザーで実行

pdb作成後、気持ち1分程待ってからリスナー登録するといいかんじ

```
oracle docker-container-centos-7-6-18-10-oracle-dbeaver ~$./init_db.sh create_pdb 2

oracle docker-container-centos-7-6-18-10-oracle-dbeaver ~$./init_db.sh create_listener 2

oracle docker-container-centos-7-6-18-10-oracle-dbeaver ~$./init_db.sh create_user 1 2
```

-管理者 as sysdba
|key|value|
|:-:|:-:|
|Host|localhost|
|Port|1521|
|Database|ORCLCDB|
|ユーザー名|sys|
|パスワード|ORACLE_PWD|

|key|value|
|:-:|:-:|
|Host|localhost|
|Port|1521|
|Database|ORCLPDB01|
|ユーザー名|sys|
|パスワード|ORACLE_PWD|

|key|value|
|:-:|:-:|
|Host|localhost|
|Port|1521|
|Database|ORCLPDB02|
|ユーザー名|sys|
|パスワード|ORACLE_PWD|

-管理者以外
|key|value|
|:-:|:-:|
|Host|localhost|
|Port|1521|
|Database|ORCLPDB01|
|ユーザー名|user01|
|パスワード|ORACLE_PWD|

|key|value|
|:-:|:-:|
|Host|localhost|
|Port|1521|
|Database|ORCLPDB01|
|ユーザー名|user02|
|パスワード|ORACLE_PWD|

|key|value|
|:-:|:-:|
|Host|localhost|
|Port|1521|
|Database|ORCLPDB02|
|ユーザー名|user01|
|パスワード|<PASSWORD>|

|key|value|
|:-:|:-:|
|Host|localhost|
|Port|1521|
|Database|ORCLPDB02|
|ユーザー名|user02|
|パスワード|<PASSWORD>|


ドライバのプロパティタブを選択してダウンロード
<file_sep>GIT_VERSION=2-24-1
PYTHON_VERSION=3-7-4
WINE_VERSION=5-0
<file_sep>|ユーザーＩＤ|ユーザー名|グループＩＤ|グループ名|パスワード|
|:-:|:-:|:-:|:-:|:-:|
|1001|postgres|1001|postgres|postgres_pwd|
<file_sep>- LANGの問題だった
  workbenchはmysqlユーザーで実行

とうふ
```
$export LANG=ja_JP.utf8
$mysql-workbench
```

とうふじゃない
```
$export LANG=C
$mysql-workbench
```

```
$mysql-workbench 1>launch-mysql-workbench.log 2>&1 &
```
<file_sep>GIT_VERSION=2-24-1
GROONGA_VERSION=9-1-2
PYTHON_VERSION=3-7-4
<file_sep>LANGの問題

これでいける

```
$export LANG=C
$myb
```

これはだめ

```
$export LANG=ja_JP.utf8
$myb
```

日本語データの登録も参照もできた。

mysql-workbenchで登録件数などをコンソールに出す操作がまだわからない。だしたい。
<file_sep>[ポスグレ公式](https://www.postgresql.jp/document/11/html/plperl-funcs.html)

[レポから配布されているソフトでやるのがあんぱい](https://qiita.com/tom-sato/items/e1903cb974fb6c6d5664)
<file_sep>|ユーザーＩＤ|ユーザー名|グループＩＤ|グループ名|パスワード|
|:-:|:-:|:-:|:-:|:-:|
|991|elasticsearch|994|elasticsearch|elasticsearch_pwd|
|990|kibana|993|kibana|kibana_pwd|
<file_sep>#!/usr/bin/env bash

usage(){
cat <<EOS
Usage:
  $0 script-env docker-preprocess-stop-word-list
EOS
exit 0
}

ENV_REPO=$1;shift
STOP_WORD_LIST=$1;shift

[ -z $ENV_REPO ] && usage
[ -z $STOP_WORD_LIST ] && usage

while read tgt;do
  if [ -f $tgt/Dockerfile.sub.done ];then
    #Dockerfile.sub.doneが存在する場合はクレンジングをしない
    :
  else
    #Dockerfile.sub.doneが存在しない場合はクレンジングをする
    while read stop_word;do
      echo "sed -i /$stop_word/d $tgt/Dockerfile.sub" | bash
    done < $STOP_WORD_LIST
  fi
done < <(find $HOME/$ENV_REPO -mindepth 1 -type d | grep -vP '\.git|docker-log|mnt')
<file_sep>#ENV ACCEPT_EULA=Y
#ENV SA_PASSWORD=<PASSWORD>
<file_sep>#!/bin/bash

TGT_BUILD_IMAGE_EXPECT_LIST="$(ls -l $HOME/script-env | grep -P '^d' | awk '{print $9}' | grep -v docker-log)"
TGT_BUILD_IMAGE_EXPECT_CNT=$(echo "$TGT_BUILD_IMAGE_EXPECT_LIST" | wc -l )

TGT_BUILD_IMAGE_ACTUAL_LIST="$(docker images | awk '{print $1}' | grep -P '(?:-[0-9]){1,}' | xargs -I@ bash -c "echo @ && docker history --human=false @ | sort -rk2 | sed -r 's;\s{1,}; ;g;' | cut -d' ' -f2 | sed -n '2p'" | xargs -n2)"
TGT_BUILD_IMAGE_ACTUAL_SUMMARY_LIST="$( echo "$TGT_BUILD_IMAGE_ACTUAL_LIST" | cut -d' ' -f1)"
TGT_BUILD_IMAGE_ACTUAL_DETAILE_LIST="$TGT_BUILD_IMAGE_ACTUAL_LIST"
TGT_BUILD_IMAGE_ACTUAL_CNT=$(echo "$TGT_BUILD_IMAGE_ACTUAL_DETAILE_LIST" | wc -l)

TGT_BUILD_IMAGE_ACTUAL_TODAY_DONE_LIST="$(echo "$TGT_BUILD_IMAGE_ACTUAL_DETAILE_LIST" | grep "$(date "+%Y-%m-%d")")"
TGT_BUILD_IMAGE_ACTUAL_SUMMARY_TODAY_DONE_LIST="$(echo "$TGT_BUILD_IMAGE_ACTUAL_TODAY_DONE_LIST" | cut -d' ' -f1)"
TGT_BUILD_IMAGE_ACTUAL_DETAILE_TODAY_DONE_LIST="$TGT_BUILD_IMAGE_ACTUAL_TODAY_DONE_LIST"
TGT_BUILD_IMAGE_ACTUAL_TODAY_DONE_CNT=$(echo "$TGT_BUILD_IMAGE_ACTUAL_DETAILE_TODAY_DONE_LIST" | wc -l)

TGT_BUILD_IMAGE_ACTUAL_NON_TODAY_DONE_LIST="$(echo "$TGT_BUILD_IMAGE_ACTUAL_DETAILE_LIST" | grep -v "$(date "+%Y-%m-%d")")"
TGT_BUILD_IMAGE_ACTUAL_SUMMARY_NON_TODAY_DONE_LIST="$(echo "$TGT_BUILD_IMAGE_ACTUAL_NON_TODAY_DONE_LIST" | cut -d' ' -f1)"
TGT_BUILD_IMAGE_ACTUAL_DETAILE_NON_TODAY_DONE_LIST="$TGT_BUILD_IMAGE_ACTUAL_NON_TODAY_DONE_LIST"
TGT_BUILD_IMAGE_ACTUAL_NON_TODAY_DONE_CNT=$(echo "$TGT_BUILD_IMAGE_ACTUAL_DETAILE_NON_TODAY_DONE_LIST" | wc -l)

TGT_BUILD_IMAGE_NON_DONE_LIST="$(echo "$TGT_BUILD_IMAGE_EXPECT_LIST" | grep -vP "$(echo "$TGT_BUILD_IMAGE_ACTUAL_LIST" | xargs | tr ' ' '|')")"
TGT_BUILD_IMAGE_NON_DONE_CNT=$(echo "$TGT_BUILD_IMAGE_NON_DONE_LIST" |wc -l)

echo "本日のビルド対象予定数は$TGT_BUILD_IMAGE_EXPECT_CNT件でした"
echo "$TGT_BUILD_IMAGE_EXPECT_LIST"
echo "本日のビルド対象実績数は$TGT_BUILD_IMAGE_ACTUAL_CNT件でした"
echo "$TGT_BUILD_IMAGE_ACTUAL_LIST"
echo "ビルド対象実績数の内、日付が本日以内でないものは$TGT_BUILD_IMAGE_ACTUAL_NON_TODAY_DONE_CNT"件でした
echo "$TGT_BUILD_IMAGE_ACTUAL_NON_TODAY_DONE_LIST"
echo "ビルド対象実績数の内、日付が本日以内であるものは$TGT_BUILD_IMAGE_ACTUAL_TODAY_DONE_CNT"件でした
echo "$TGT_BUILD_IMAGE_ACTUAL_TODAY_DONE_LIST"
echo "未作成イメージは$TGT_BUILD_IMAGE_NON_DONE_CNT件でした"
echo "$TGT_BUILD_IMAGE_NON_DONE_LIST"
<file_sep># MysqlWorkBenchでリバエン

- https://ti-tomo-knowledge.hatenablog.com/entry/2018/05/21/082211

# dockerイメージ作成

```
time docker build -t ubuntu-19-10-mysql-workbench . | tee log
```

# dockerコンテナ削除

```
docker ps -qa | xargs -I@ bash -c 'docker stop @ && docker rm @'
```

# dockerイメージ削除

```
docker images | awk '$1=="<none>"{print $3}' | xargs -I@ docker rmi @
```

# dockerコンテナ起動

```
docker run --privileged --shm-size=8gb --name ubuntu-19-10-mysql-workbench -itd -v /etc/localtime:/etc/localtime -v /run/udev:/run/udev -v /run/systemd:/run/systemd -v /tmp/.X11-unix:/tmp/.X11-unix -v /var/lib/dbus:/var/lib/dbus -v /var/run/dbus:/var/run/dbus -v /etc/machine-id:/etc/machine-id -p 3306:3306 ubuntu-19-10-mysql-workbench
```

# dockerコンテナ潜入

```
docker exec -it ubuntu-19-10-mysql-workbench /bin/bash
```

# mysqlインストール

- dbus関連のエラーを回避するため、コンテナ起動後実施

```
cd /usr/local/src && curl -o mysql.deb https://repo.mysql.com/mysql-apt-config_0.8.14-1_all.deb && \
export DEBIAN_FRONTEND=noninteractive && dpkg -i mysql.deb && \
apt install -y mysql-server
```

# バージョン確認
```
$mysql --version
mysql  Ver 8.0.18-0ubuntu0.19.10.1 for Linux on x86_64 ((Ubuntu))
```

# 環境整備

rootユーザーでデータファイル等を洗い替え
- https://stackoverflow.com/questions/34954455/mysql-daemon-lock-issue

```
rm -rf /var/lib/mysql && \
>/var/log/mysql/error.log && \
mkdir -p /var/run/mysqld && \
chown mysql:mysql /var/run/mysqld && \
mysqld --initialize --user=mysql
```

# プロセス起動

バッググラウンドモードで起動
```
mysqld -D --user=mysql
```

プロセス確認
```
$ps aux
```

ログ確認
```
$tail -f /var/log/mysql/error.log
```

# mysqlプロセスでのrootユーザーのパスワードを変更

デフォルトの値をログから確認
```
$grep password /var/log/mysql/error.log | cut -d" " -f 13
?=%1ihb/B?je
```

次のコマンドを実行して、確認した値を入力する（ログからこぴぺ）
```
$mysql -uroot -p
```

rootユーザーのパスワード変更
```
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Mysql3306';
```

一般ユーザーの作成
```
CREATE USER 'user01'@'localhost' IDENTIFIED BY 'Mysql3306';
```

一般ユーザーに権限付与
```
GRANT ALL PRIVILEGES ON mysql.* TO 'user01'@'localhost' WITH GRANT OPTION;
```

データベース作成
```
create database testdb;
```

データベースに対する権限付与
```
grant all privileges on testdb.* to user01@localhost;
```

# データベース接続

rootユーザー
```
mysql -uroot -pMysql3306 -Dtestdb
```

一般ユーザー
```
mysql -uuser01 -pMysql3306 -Dtestdb
```

# 動作確認

```
select version();
```

```
with sub as(
    select '[{"x":"8"},{"x":"3"},{"x":"4"}]' as rsv_args
)
select s1.rsv_args,s2.ele
from
  sub s1,json_table(
    rsv_args,
    "$[*]" columns(
      ele longtext path "$.x"
    )
  ) as s2;
```

8.x系からlateral使える
```
$cat ./a.sh
#!/bin/bash

f(){
  start_rn=$1;shift;
  end_rn=$1;shift;
  mysql -uroot -pMysql3306 -t -n < <(cat <<EOS
	set @nat=${start_rn}-1;
	with nats as(
	  select @nat := @nat + 1 as n from information_schema.columns limit ${end_rn}
	) select s1.n,s2.n from nats s1,lateral(select s2.n from nats s2 where s1.n<=s2.n) s2;
EOS
) 2>/dev/null
}

f "$@"
```
実行
```
$./a.sh 1 5
+------+------+
| n    | n    |
+------+------+
|    1 |    1 |
|    1 |    2 |
|    1 |    3 |
|    1 |    4 |
|    1 |    5 |
|    2 |    2 |
|    2 |    3 |
|    2 |    4 |
|    2 |    5 |
|    3 |    3 |
|    3 |    4 |
|    3 |    5 |
|    4 |    4 |
|    4 |    5 |
|    5 |    5 |
+------+------+
```

# ユーザー定義関数の作成

- https://qiita.com/onunu/items/71064bbf48dc40c6ce11
- https://qiita.com/okumurakengo/items/1208db98f98cb360c7ba

```
$vi factorial.cpp
$gcc --version
gcc (Ubuntu 9.2.1-9ubuntu2) 9.2.1 20191008
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
```

# 環境変数の設定

```
$export CPATH=/usr/include/mysql:/usr/include/c++/9
```

# コンパイル

```
$gcc factorial.cpp -shared -o /usr/lib/mysql/plugin/factorial.so
```

- ダイナミックリンクファイル作成されているか確認
```
$ll /usr/lib/mysql/plugin/factorial.so
-rwxr-xr-x. 1 root root 23640 Jan 19 17:34 /usr/lib/mysql/plugin/factorial.so*
```

# 実行

```
$mysql -uuser01 -pMysql3306 -Dtestdb
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 11
Server version: 8.0.18-0ubuntu0.19.10.1 (Ubuntu)

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

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

mysql> create function factorial returns string soname 'factorial.so';
Query OK, 0 rows affected (0.03 sec)
mysql> select factorial(6);
+--------------+
| factorial(6) |
+--------------+
| 720          |
+--------------+
1 row in set (0.00 sec)
```

# MysqlWorkBench

```
mysql@151a03d725de:~$myb
[1] 1037
```

![](./1.png)
![](./2.png)
![](./3.png)
![](./4.png)
<file_sep># トラシュー

- 事象

  - たいへん困った。ubuntu-19-10以外のubuntuで試す。

```
!SESSION 2020-05-04 14:39:00.254 -----------------------------------------------
eclipse.buildId=unknown
java.version=1.8.0_252
java.vendor=Private Build
BootLoader constants: OS=linux, ARCH=x86_64, WS=gtk, NL=ja_JP
Command-line arguments:  -os linux -ws gtk -arch x86_64

!ENTRY org.eclipse.osgi 4 0 2020-05-04 14:39:01.356
!MESSAGE バンドル org.eclipse.ui.ide (147) を自動的に有効化している間にエラーが発生しました。
!STACK 0
org.osgi.framework.BundleException: バンドル org.eclipse.ui.ide の org.eclipse.ui.internal.ide.IDEWorkbenchPlugin.start() での例外。
	at org.eclipse.osgi.internal.framework.BundleContextImpl.startActivator(BundleContextImpl.java:863)
	at org.eclipse.osgi.internal.framework.BundleContextImpl.start(BundleContextImpl.java:791)
	at org.eclipse.osgi.internal.framework.EquinoxBundle.startWorker0(EquinoxBundle.java:1015)
	at org.eclipse.osgi.internal.framework.EquinoxBundle$EquinoxModule.startWorker(EquinoxBundle.java:365)
	at org.eclipse.osgi.container.Module.doStart(Module.java:603)
	at org.eclipse.osgi.container.Module.start(Module.java:467)
	at org.eclipse.osgi.framework.util.SecureAction.start(SecureAction.java:493)
	at org.eclipse.osgi.internal.hooks.EclipseLazyStarter.postFindLocalClass(EclipseLazyStarter.java:117)
	at org.eclipse.osgi.internal.loader.classpath.ClasspathManager.findLocalClass(ClasspathManager.java:571)
	at org.eclipse.osgi.internal.loader.ModuleClassLoader.findLocalClass(ModuleClassLoader.java:346)
	at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:398)
	at org.eclipse.osgi.internal.loader.sources.SingleSourcePackage.loadClass(SingleSourcePackage.java:41)
	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:473)
	at org.eclipse.osgi.internal.loader.ModuleClassLoader.loadClass(ModuleClassLoader.java:171)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
	at org.jkiss.dbeaver.ui.app.standalone.DBeaverApplication.setIDEWorkspace(DBeaverApplication.java:276)
	at org.jkiss.dbeaver.ui.app.standalone.DBeaverApplication.start(DBeaverApplication.java:161)
	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:401)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:657)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:594)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1447)
	at org.eclipse.equinox.launcher.Main.main(Main.java:1420)
Caused by: java.lang.UnsatisfiedLinkError: Could not load SWT library. Reasons: 
	no swt-pi4-gtk-4932r18 in java.library.path
	no swt-pi4-gtk in java.library.path
	Can't load library: /home/mysql/.swt/lib/linux/x86_64/libswt-pi4-gtk-4932r18.so
	Can't load library: /home/mysql/.swt/lib/linux/x86_64/libswt-pi4-gtk.so

	at org.eclipse.swt.internal.Library.loadLibrary(Library.java:342)
	at org.eclipse.swt.internal.Library.loadLibrary(Library.java:256)
	at org.eclipse.swt.internal.gtk.OS.<clinit>(OS.java:90)
	at org.eclipse.swt.internal.Converter.wcsToMbcs(Converter.java:209)
	at org.eclipse.swt.internal.Converter.wcsToMbcs(Converter.java:155)
	at org.eclipse.swt.widgets.Display.<clinit>(Display.java:164)
	at org.eclipse.ui.internal.ide.IDEWorkbenchPlugin.createProblemsViews(IDEWorkbenchPlugin.java:391)
	at org.eclipse.ui.internal.ide.IDEWorkbenchPlugin.start(IDEWorkbenchPlugin.java:348)
	at org.eclipse.osgi.internal.framework.BundleContextImpl$3.run(BundleContextImpl.java:842)
	at org.eclipse.osgi.internal.framework.BundleContextImpl$3.run(BundleContextImpl.java:1)
	at java.security.AccessController.doPrivileged(Native Method)
	at org.eclipse.osgi.internal.framework.BundleContextImpl.startActivator(BundleContextImpl.java:834)
	... 29 more
Root exception:
java.lang.UnsatisfiedLinkError: Could not load SWT library. Reasons: 
	no swt-pi4-gtk-4932r18 in java.library.path
	no swt-pi4-gtk in java.library.path
	Can't load library: /home/mysql/.swt/lib/linux/x86_64/libswt-pi4-gtk-4932r18.so
	Can't load library: /home/mysql/.swt/lib/linux/x86_64/libswt-pi4-gtk.so

	at org.eclipse.swt.internal.Library.loadLibrary(Library.java:342)
	at org.eclipse.swt.internal.Library.loadLibrary(Library.java:256)
	at org.eclipse.swt.internal.gtk.OS.<clinit>(OS.java:90)
	at org.eclipse.swt.internal.Converter.wcsToMbcs(Converter.java:209)
	at org.eclipse.swt.internal.Converter.wcsToMbcs(Converter.java:155)
	at org.eclipse.swt.widgets.Display.<clinit>(Display.java:164)
	at org.eclipse.ui.internal.ide.IDEWorkbenchPlugin.createProblemsViews(IDEWorkbenchPlugin.java:391)
	at org.eclipse.ui.internal.ide.IDEWorkbenchPlugin.start(IDEWorkbenchPlugin.java:348)
	at org.eclipse.osgi.internal.framework.BundleContextImpl$3.run(BundleContextImpl.java:842)
	at org.eclipse.osgi.internal.framework.BundleContextImpl$3.run(BundleContextImpl.java:1)
	at java.security.AccessController.doPrivileged(Native Method)
	at org.eclipse.osgi.internal.framework.BundleContextImpl.startActivator(BundleContextImpl.java:834)
	at org.eclipse.osgi.internal.framework.BundleContextImpl.start(BundleContextImpl.java:791)
	at org.eclipse.osgi.internal.framework.EquinoxBundle.startWorker0(EquinoxBundle.java:1015)
	at org.eclipse.osgi.internal.framework.EquinoxBundle$EquinoxModule.startWorker(EquinoxBundle.java:365)
	at org.eclipse.osgi.container.Module.doStart(Module.java:603)
	at org.eclipse.osgi.container.Module.start(Module.java:467)
	at org.eclipse.osgi.framework.util.SecureAction.start(SecureAction.java:493)
	at org.eclipse.osgi.internal.hooks.EclipseLazyStarter.postFindLocalClass(EclipseLazyStarter.java:117)
	at org.eclipse.osgi.internal.loader.classpath.ClasspathManager.findLocalClass(ClasspathManager.java:571)
	at org.eclipse.osgi.internal.loader.ModuleClassLoader.findLocalClass(ModuleClassLoader.java:346)
	at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:398)
	at org.eclipse.osgi.internal.loader.sources.SingleSourcePackage.loadClass(SingleSourcePackage.java:41)
	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:473)
	at org.eclipse.osgi.internal.loader.ModuleClassLoader.loadClass(ModuleClassLoader.java:171)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
	at org.jkiss.dbeaver.ui.app.standalone.DBeaverApplication.setIDEWorkspace(DBeaverApplication.java:276)
	at org.jkiss.dbeaver.ui.app.standalone.DBeaverApplication.start(DBeaverApplication.java:161)
	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:401)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:657)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:594)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1447)
	at org.eclipse.equinox.launcher.Main.main(Main.java:1420)

!ENTRY org.eclipse.osgi 4 0 2020-05-04 14:39:01.358
!MESSAGE アプリケーション・エラー
!STACK 1
java.lang.NoClassDefFoundError: org/eclipse/ui/internal/ide/ChooseWorkspaceData
	at org.jkiss.dbeaver.ui.app.standalone.DBeaverApplication.setIDEWorkspace(DBeaverApplication.java:276)
	at org.jkiss.dbeaver.ui.app.standalone.DBeaverApplication.start(DBeaverApplication.java:161)
	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:401)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:657)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:594)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1447)
	at org.eclipse.equinox.launcher.Main.main(Main.java:1420)
Caused by: java.lang.ClassNotFoundException: バンドル org.eclipse.ui.ide (147) を自動的に有効化している間にエラーが発生しました。
	at org.eclipse.osgi.internal.hooks.EclipseLazyStarter.postFindLocalClass(EclipseLazyStarter.java:126)
	at org.eclipse.osgi.internal.loader.classpath.ClasspathManager.findLocalClass(ClasspathManager.java:571)
	at org.eclipse.osgi.internal.loader.ModuleClassLoader.findLocalClass(ModuleClassLoader.java:346)
	at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:398)
	at org.eclipse.osgi.internal.loader.sources.SingleSourcePackage.loadClass(SingleSourcePackage.java:41)
	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:473)
	at org.eclipse.osgi.internal.loader.ModuleClassLoader.loadClass(ModuleClassLoader.java:171)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
	... 15 more
Caused by: org.osgi.framework.BundleException: バンドル org.eclipse.ui.ide の org.eclipse.ui.internal.ide.IDEWorkbenchPlugin.start() での例外。
	at org.eclipse.osgi.internal.framework.BundleContextImpl.startActivator(BundleContextImpl.java:863)
	at org.eclipse.osgi.internal.framework.BundleContextImpl.start(BundleContextImpl.java:791)
	at org.eclipse.osgi.internal.framework.EquinoxBundle.startWorker0(EquinoxBundle.java:1015)
	at org.eclipse.osgi.internal.framework.EquinoxBundle$EquinoxModule.startWorker(EquinoxBundle.java:365)
	at org.eclipse.osgi.container.Module.doStart(Module.java:603)
	at org.eclipse.osgi.container.Module.start(Module.java:467)
	at org.eclipse.osgi.framework.util.SecureAction.start(SecureAction.java:493)
	at org.eclipse.osgi.internal.hooks.EclipseLazyStarter.postFindLocalClass(EclipseLazyStarter.java:117)
	... 22 more
Caused by: java.lang.UnsatisfiedLinkError: Could not load SWT library. Reasons: 
	no swt-pi4-gtk-4932r18 in java.library.path
	no swt-pi4-gtk in java.library.path
	Can't load library: /home/mysql/.swt/lib/linux/x86_64/libswt-pi4-gtk-4932r18.so
	Can't load library: /home/mysql/.swt/lib/linux/x86_64/libswt-pi4-gtk.so

	at org.eclipse.swt.internal.Library.loadLibrary(Library.java:342)
	at org.eclipse.swt.internal.Library.loadLibrary(Library.java:256)
	at org.eclipse.swt.internal.gtk.OS.<clinit>(OS.java:90)
	at org.eclipse.swt.internal.Converter.wcsToMbcs(Converter.java:209)
	at org.eclipse.swt.internal.Converter.wcsToMbcs(Converter.java:155)
	at org.eclipse.swt.widgets.Display.<clinit>(Display.java:164)
	at org.eclipse.ui.internal.ide.IDEWorkbenchPlugin.createProblemsViews(IDEWorkbenchPlugin.java:391)
	at org.eclipse.ui.internal.ide.IDEWorkbenchPlugin.start(IDEWorkbenchPlugin.java:348)
	at org.eclipse.osgi.internal.framework.BundleContextImpl$3.run(BundleContextImpl.java:842)
	at org.eclipse.osgi.internal.framework.BundleContextImpl$3.run(BundleContextImpl.java:1)
	at java.security.AccessController.doPrivileged(Native Method)
	at org.eclipse.osgi.internal.framework.BundleContextImpl.startActivator(BundleContextImpl.java:834)
	... 29 more
```

- 原因

swtライブラリのjniがない

```
apt install -y libswt-webkit-gtk-4-jni
```

- 対応

インストール

```
apt install -y libswt-webkit-gtk-4-jni
```

- 予防

script-repoに登録
<file_sep>GIT_VERSION=2-24-1
NODEJS_VERSION=12-X-X
PYTHON_VERSION=3-7-4
<file_sep>#!/usr/bin/env bash

usage(){
cat <<EOS
Usage:
第一引数にキーワード
第二引数にマージ元ファイル
$0 env centos-7-6-18-10-config-env.sh
EOS
}

KEYWORD=$1
MERGE_SRC_FILE=$2

TGT_DIR="/usr/local/src/script-repo"

[ -z $KEYWORD ] && usage && exit 1
[ -z $MERGE_SRC_FILE ] && usage && exit 1

MERGE_CONTENT="$(while read MERGE_TGT_FILE;do
  comm -13 --nocheck-order <(sort $MERGE_SRC_FILE | sed -r '/^$/d') <(sort $MERGE_TGT_FILE | sed -r '/^$/d')
done < <(ls $TGT_DIR | grep $KEYWORD) | sort | uniq)"

echo "$MERGE_CONTENT" >>$MERGE_SRC_FILE
echo 'source $HOME/.bashrc' >>$MERGE_SRC_FILE

#最終行以外のsourceコマンドを排除
while true;do
  CMD="$(grep -n -P 'source \$HOME/\.bashrc' $MERGE_SRC_FILE | sed '$d' | perl -pe 's/:.*//' | xargs -I@ echo "sed -i '@d' $MERGE_SRC_FILE")"
  [ -z "$CMD" ] && break
  [ -z "$CMD" ] || echo "$CMD" | sh
done

#マージ反映
while read MERGE_TGT_FILE;do
  [ $MERGE_TGT_FILE == $MERGE_SRC_FILE ] && :
  [ $MERGE_TGT_FILE == $MERGE_SRC_FILE ] || echo "cp "$MERGE_SRC_FILE $MERGE_TGT_FILE | sh
done < <(ls $TGT_DIR | grep $KEYWORD)
<file_sep>#!/usr/bin/env bash

usage(){
  cat <<EOS
Usage:
  $0 script-env
EOS
exit 0
}

execute(){

  OS_VERSION=$1;shift
  EDITOR=$1;shift

  [ -z $OS_VERSION ] && usage

  OS_NAME=$(echo $OS_VERSION | perl -pe 's/^([a-z]+)-(.*)$/\1/g')

  IMAGE_VERSION=$(echo $OS_VERSION | perl -pe 's/^([a-z]+)-(.*)$/\2/g')

  if [ "centos" == $OS_NAME ];then
    IMAGE_VERSION=$(echo $IMAGE_VERSION | perl -pe 's/-/\./;s/-/\./;s/-//;')
  fi

  if [ "ubuntu" == $OS_NAME ];then
    IMAGE_VERSION=$(echo $IMAGE_VERSION | perl -pe 's/-/\./;')
  fi

  TEMPLATE_FILE=$(find $HOME/$REPO -name "docker-template-Dockerfile-$OS_NAME")

  EDITOR_LIST="$(ls $HOME/script-env/env-editor-* | grep $OS_NAME | awk -v FS='-' -v OFS='-' '{$1="";$2="";$3="";$4="";print $0}' | sed -r 's/^-{1,}//g' | sort | uniq)"

  while read tgt;do
    #テンプレートファイルのIMAGE_VERSIONの置換
    if [ -f $tgt/env-image.md ];then
      RT="$(grep FROM $tgt/env-image.md)"
      if [ -z "$RT" ];then
        #環境個別のイメージファイルがない場合
        echo "sed 's;BASE_IMAGE;FROM $OS_NAME:$IMAGE_VERSION;' $TEMPLATE_FILE >$tgt/Dockerfile.auto" | bash
      else
        #環境個別のイメージファイルがある場合
        echo "sed 's;BASE_IMAGE;$RT;' $TEMPLATE_FILE >$tgt/Dockerfile.auto" | bash
      fi
    else
      #環境個別のイメージファイルがない場合
      :
    fi

    echo "sed -i '/^USER/,/^EXPOSE/d' $tgt/Dockerfile.auto" | bash

    #テンプレートファイルのDOCKERFILE_ARGの置換
    cat $tgt/env-build-arg.md  | sed 's/=.*//;s/^/ARG /;' >/tmp/env-build-arg-$(echo $tgt | perl -pe 's;/;-;g')
    echo "sed -i '/DOCKERFILE_ARG/r /tmp/env-build-arg-$(echo $tgt | perl -pe 's;/;-;g')' $tgt/Dockerfile.auto" | bash
    echo "sed -i '/DOCKERFILE_ARG/d' $tgt/Dockerfile.auto" | bash

    #テンプレートファイルのDOCKERFILE_ENVの置換
    echo "sed -i '/DOCKERFILE_ENV/r $tgt/env-env.md' $tgt/Dockerfile.auto" | bash
    echo "sed -i '/DOCKERFILE_ENV/d' $tgt/Dockerfile.auto" | bash

    #テンプレートファイルのDOCKERFILE_EDITORの置換
    for n in "$EDITOR_LIST";do
      #エディタが決まるまでは、ちとめんどい。
      EDITOR="$(echo "echo" $tgt "| grep -Po '("$(echo $n | tr ' ' '|')")$'" | bash)"
      if [ -z "$EDITOR" ];then
        #vimの場合またはenv-editor未定義かつ明示的にvimと環境ディレクトリに明記していない場合
        echo "sed -i '/DOCKERFILE_EDITOR/d' $tgt/Dockerfile.auto" | bash
      else
        #env-editor定義の環境ディレクトリの場合
        echo "sed -i '/DOCKERFILE_EDITOR/r $(find $HOME/$REPO -maxdepth 1 -type f -name "env-editor*" | grep $OS_NAME | grep -P "$EDITOR$")' $tgt/Dockerfile.auto" | bash
        echo "sed -i '/DOCKERFILE_EDITOR/d' $tgt/Dockerfile.auto" | bash
      fi
    done

    #テンプレートファイルのMAIN_USERの置換
    {
      echo $tgt
      grep -c -vP  'ユーザーＩＤ|aine|kuraine|nahato|mujiku|:-:|root' $tgt/env-user.md
      grep -vP  'ユーザーＩＤ|aine|kuraine|nahato|mujiku|:-:|root' $tgt/env-user.md | awk -v FS='|' -v ORS='' '{print ","$3}'
    } | xargs -n3 | \
    while read file cnt usr;do
      if [ 0 -eq $cnt ];then
        echo "sed -n '/^USER/,/^EXPOSE/p' $TEMPLATE_FILE | head -n-1 | perl -pe "s/MAIN_USER/kuraine/g" >>$file/Dockerfile.auto" | bash
      fi
      for (( i=0;i<$cnt;i++));do
        echo "sed -n '/^USER/,/^EXPOSE/p' $TEMPLATE_FILE | head -n-1 | perl -pe "s/MAIN_USER/$(echo $usr | cut -d',' -f$(($i+2)))/g" >>$file/Dockerfile.auto" | bash
      done
    done

    #テンプレートファイルのEXPOSEの置換
    {
      echo $tgt
      grep -c -P  '\-p' $tgt/env-expose.md
      grep -P  '\-p' $tgt/env-expose.md | awk -v ORS='' '{print ","$1$2}'
    } | xargs -n3 | \
    while read file cnt port;do
      for (( i=0;i<$cnt;i++));do
        echo "sed -n '/EXPOSE/p' $TEMPLATE_FILE | perl -pe "s/PORT/$(echo $port | cut -d',' -f$(($i+2))|sed -r 's/.*://')/g" >>$file/Dockerfile.auto" | bash
      done
    done

    #最後に見つかったWORKDIR以外を削除
    grep -n -P  'WORKDIR' $tgt/Dockerfile.auto | cut -d' ' -f1 | xargs | sed '/^$/d' | awk -v FS=' ' '{$NF="";print $0}' | xargs -I@ echo @ | perl -pe "s;:.*;;;s;^;sed -i ;;s;$;d $tgt/Dockerfile.auto;" | bash
  done < <(find $HOME/$REPO -type d | grep -v docker-log | grep $OS_VERSION | grep -vP mnt)

  rm -rf /tmp/env-build-arg*
}

main(){
  REPO="$1";shift
  [ -z $REPO ] && usage

  bash P04-環境ディレクトリ内のmntディレクトリを削除する.sh $REPO | bash

  export -f execute
  find $HOME/$REPO -type d | grep -Po '[a-z]+(-[0-9]{1,}){1,}' | sort | uniq | while read tgt;do execute $tgt ;done
}

main "$@"
<file_sep>APACHE_SOLR_VERSION=8-5-1
GIT_VERSION=2-24-1
JAVA_VERSION=11
PYTHON_VERSION=3-7-4
<file_sep>#!/usr/bin/env bash

usage(){
cat <<EOS
Usage:
  $0 script-env
EOS
exit 0
}

ENV_REPO=$1;shift

[ -z $ENV_REPO ] && usage

while read tgt;do
  if [ -f $tgt/Dockerfile.asis ];then
    :
  else
    #asisが存在しない場合はリネーム
    echo "mv $tgt/Dockerfile $tgt/Dockerfile.asis"
  fi
done < <(find $HOME/$ENV_REPO -mindepth 1 -type d | grep -vP '\.git|docker-log|mnt')
<file_sep>```
https://lucene.apache.org/solr/guide/8_4/solr-tutorial.html#solr-tutorial

コア作成（データベース作成みたいなもん）

solr docker-container-ubuntu-19-10-java-apache-solr-vim /usr/local/src/solr-8.5.1$bin/solr start -e techproducts


Creating Solr home directory /usr/local/src/solr-8.5.1/example/techproducts/solr

Starting up Solr on port 8983 using command:
"bin/solr" start -p 8983 -s "example/techproducts/solr"

Waiting up to 180 seconds to see Solr running on port 8983 [/]
Started Solr server on port 8983 (pid=229). Happy searching!


Created new core 'techproducts'
Indexing tech product example docs from /usr/local/src/solr-8.5.1/example/exampledocs
SimplePostTool version 5.0.0
Posting files to [base] url http://localhost:8983/solr/techproducts/update using content-type application/xml...
POSTing file hd.xml to [base]
POSTing file solr.xml to [base]
POSTing file gb18030-example.xml to [base]
POSTing file ipod_other.xml to [base]
POSTing file ipod_video.xml to [base]
POSTing file mem.xml to [base]
POSTing file monitor2.xml to [base]
POSTing file vidcard.xml to [base]
POSTing file money.xml to [base]
POSTing file monitor.xml to [base]
POSTing file utf8-example.xml to [base]
POSTing file mp500.xml to [base]
POSTing file sd500.xml to [base]
POSTing file manufacturers.xml to [base]
14 files indexed.
COMMITting Solr index changes to http://localhost:8983/solr/techproducts/update...
Time spent: 0:00:00.373

Solr techproducts example launched successfully. Direct your Web browser to http://localhost:8983/solr to visit the Solr Admin UI


以下のURLにブラウザからアクセス

http://localhost:8983/solr


梱包されているサンプルデータも投入してみる


solr docker-container-ubuntu-19-10-java-apache-solr-vim /usr/local/src/solr-8.5.1$ll example/exampledocs/*
-rw-r--r--. 1 solr solr   959  4月  8 14:02 example/exampledocs/books.csv
-rw-r--r--. 1 solr solr  1148  4月  8 14:02 example/exampledocs/books.json
-rw-r--r--. 1 solr solr  1333  4月  8 14:02 example/exampledocs/gb18030-example.xml
-rw-r--r--. 1 solr solr  2245  4月  8 14:02 example/exampledocs/hd.xml
-rw-r--r--. 1 solr solr  2074  4月  8 14:02 example/exampledocs/ipod_other.xml
-rw-r--r--. 1 solr solr  2109  4月  8 14:02 example/exampledocs/ipod_video.xml
-rw-r--r--. 1 solr solr  2801  4月  8 14:02 example/exampledocs/manufacturers.xml
-rw-r--r--. 1 solr solr  3090  4月  8 14:02 example/exampledocs/mem.xml
-rw-r--r--. 1 solr solr  2156  4月  8 14:02 example/exampledocs/money.xml
-rw-r--r--. 1 solr solr  1420  4月  8 14:02 example/exampledocs/monitor.xml
-rw-r--r--. 1 solr solr  1402  4月  8 14:02 example/exampledocs/monitor2.xml
-rw-r--r--. 1 solr solr   178  4月  8 14:02 example/exampledocs/more_books.jsonl
-rw-r--r--. 1 solr solr  1976  4月  8 14:02 example/exampledocs/mp500.xml
-rw-r--r--. 1 solr solr 27478  4月  8 16:01 example/exampledocs/post.jar
-rw-r--r--. 1 solr solr   235  4月  8 14:02 example/exampledocs/sample.html
-rw-r--r--. 1 solr solr  1684  4月  8 14:02 example/exampledocs/sd500.xml
-rw-r--r--. 1 solr solr 21052  4月  8 14:02 example/exampledocs/solr-word.pdf
-rw-r--r--. 1 solr solr  1810  4月  8 14:02 example/exampledocs/solr.xml
-rwxr-xr-x. 1 solr solr  3742  4月  8 14:02 example/exampledocs/test_utf8.sh*
-rw-r--r--. 1 solr solr  1835  4月  8 14:02 example/exampledocs/utf8-example.xml
-rw-r--r--. 1 solr solr  2697  4月  8 14:02 example/exampledocs/vidcard.xml

solr docker-container-ubuntu-19-10-java-apache-solr-vim /usr/local/src/solr-8.5.1$bin/post -c techproducts example/exampledocs/*
/usr/local/src/jdk-11/bin/java -classpath /usr/local/src/solr-8.5.1/dist/solr-core-8.5.1.jar -Dauto=yes -Dc=techproducts -Ddata=files org.apache.solr.util.SimplePostTool example/exampledocs/books.csv example/exampledocs/books.json example/exampledocs/gb18030-example.xml example/exampledocs/hd.xml example/exampledocs/ipod_other.xml example/exampledocs/ipod_video.xml example/exampledocs/manufacturers.xml example/exampledocs/mem.xml example/exampledocs/money.xml example/exampledocs/monitor.xml example/exampledocs/monitor2.xml example/exampledocs/more_books.jsonl example/exampledocs/mp500.xml example/exampledocs/post.jar example/exampledocs/sample.html example/exampledocs/sd500.xml example/exampledocs/solr-word.pdf example/exampledocs/solr.xml example/exampledocs/test_utf8.sh example/exampledocs/utf8-example.xml example/exampledocs/vidcard.xml
SimplePostTool version 5.0.0
Posting files to [base] url http://localhost:8983/solr/techproducts/update...
Entering auto mode. File endings considered are xml,json,jsonl,csv,pdf,doc,docx,ppt,pptx,xls,xlsx,odt,odp,ods,ott,otp,ots,rtf,htm,html,txt,log
POSTing file books.csv (text/csv) to [base]
POSTing file books.json (application/json) to [base]/json/docs
POSTing file gb18030-example.xml (application/xml) to [base]
POSTing file hd.xml (application/xml) to [base]
POSTing file ipod_other.xml (application/xml) to [base]
POSTing file ipod_video.xml (application/xml) to [base]
POSTing file manufacturers.xml (application/xml) to [base]
POSTing file mem.xml (application/xml) to [base]
POSTing file money.xml (application/xml) to [base]
POSTing file monitor.xml (application/xml) to [base]
POSTing file monitor2.xml (application/xml) to [base]
POSTing file more_books.jsonl (application/json) to [base]/json/docs
POSTing file mp500.xml (application/xml) to [base]
POSTing file post.jar (application/octet-stream) to [base]/extract
POSTing file sample.html (text/html) to [base]/extract
POSTing file sd500.xml (application/xml) to [base]
POSTing file solr-word.pdf (application/pdf) to [base]/extract
POSTing file solr.xml (application/xml) to [base]
POSTing file test_utf8.sh (application/octet-stream) to [base]/extract
POSTing file utf8-example.xml (application/xml) to [base]
POSTing file vidcard.xml (application/xml) to [base]
21 files indexed.
COMMITting Solr index changes to http://localhost:8983/solr/techproducts/update...
Time spent: 0:00:01.095

これで検索できる準備ができるようになったそう



- 検索条件 未指定 先頭から3件

solr docker-container-ubuntu-19-10-java-apache-solr-vim /usr/local/src/solr-8.5.1$curl -s 'http://localhost:8983/solr/techproducts/select?q=*%3A*&rows=3&start=0' | jq --stream -c
[["responseHeader","status"],0]
[["responseHeader","QTime"],0]
[["responseHeader","params","q"],"*:*"]
[["responseHeader","params","start"],"0"]
[["responseHeader","params","rows"],"3"]
[["responseHeader","params","rows"]]
[["responseHeader","params"]]
[["response","numFound"],52]
[["response","start"],0]
[["response","docs",0,"id"],"0553573403"]
[["response","docs",0,"cat",0],"book"]
[["response","docs",0,"cat",0]]
[["response","docs",0,"name"],"A Game of Thrones"]
[["response","docs",0,"price"],7.99]
[["response","docs",0,"price_c"],"7.99,USD"]
[["response","docs",0,"inStock"],true]
[["response","docs",0,"author"],"<NAME>"]
[["response","docs",0,"author_s"],"<NAME>"]
[["response","docs",0,"series_t"],"A Song of Ice and Fire"]
[["response","docs",0,"sequence_i"],1]
[["response","docs",0,"genre_s"],"fantasy"]
[["response","docs",0,"_version_"],1665866796928860200]
[["response","docs",0,"price_c____l_ns"],799]
[["response","docs",0,"price_c____l_ns"]]
[["response","docs",1,"id"],"0553579908"]
[["response","docs",1,"cat",0],"book"]
[["response","docs",1,"cat",0]]
[["response","docs",1,"name"],"A Clash of Kings"]
[["response","docs",1,"price"],7.99]
[["response","docs",1,"price_c"],"7.99,USD"]
[["response","docs",1,"inStock"],true]
[["response","docs",1,"author"],"<NAME>"]
[["response","docs",1,"author_s"],"<NAME>"]
[["response","docs",1,"series_t"],"A Song of Ice and Fire"]
[["response","docs",1,"sequence_i"],2]
[["response","docs",1,"genre_s"],"fantasy"]
[["response","docs",1,"_version_"],1665866796930957300]
[["response","docs",1,"price_c____l_ns"],799]
[["response","docs",1,"price_c____l_ns"]]
[["response","docs",2,"id"],"055357342X"]
[["response","docs",2,"cat",0],"book"]
[["response","docs",2,"cat",0]]
[["response","docs",2,"name"],"A Storm of Swords"]
[["response","docs",2,"price"],7.99]
[["response","docs",2,"price_c"],"7.99,USD"]
[["response","docs",2,"inStock"],true]
[["response","docs",2,"author"],"<NAME>"]
[["response","docs",2,"author_s"],"<NAME>"]
[["response","docs",2,"series_t"],"A Song of Ice and Fire"]
[["response","docs",2,"sequence_i"],3]
[["response","docs",2,"genre_s"],"fantasy"]
[["response","docs",2,"_version_"],1665866796932006000]
[["response","docs",2,"price_c____l_ns"],799]
[["response","docs",2,"price_c____l_ns"]]
[["response","docs",2]]
[["response","docs"]]
[["response"]]



- 検索条件 未指定 4件目から3件

solr docker-container-ubuntu-19-10-java-apache-solr-vim /usr/local/src/solr-8.5.1$curl -s 'http://localhost:8983/solr/techproducts/select?q=*%3A*&rows=3&start=3' | jq --stream -c
[["responseHeader","status"],0]
[["responseHeader","QTime"],0]
[["responseHeader","params","q"],"*:*"]
[["responseHeader","params","start"],"3"]
[["responseHeader","params","rows"],"3"]
[["responseHeader","params","rows"]]
[["responseHeader","params"]]
[["response","numFound"],52]
[["response","start"],3]
[["response","docs",0,"id"],"0553293354"]
[["response","docs",0,"cat",0],"book"]
[["response","docs",0,"cat",0]]
[["response","docs",0,"name"],"Foundation"]
[["response","docs",0,"price"],7.99]
[["response","docs",0,"price_c"],"7.99,USD"]
[["response","docs",0,"inStock"],true]
[["response","docs",0,"author"],"<NAME>"]
[["response","docs",0,"author_s"],"<NAME>"]
[["response","docs",0,"series_t"],"Foundation Novels"]
[["response","docs",0,"sequence_i"],1]
[["response","docs",0,"genre_s"],"scifi"]
[["response","docs",0,"_version_"],1665866796932006000]
[["response","docs",0,"price_c____l_ns"],799]
[["response","docs",0,"price_c____l_ns"]]
[["response","docs",1,"id"],"0812521390"]
[["response","docs",1,"cat",0],"book"]
[["response","docs",1,"cat",0]]
[["response","docs",1,"name"],"The Black Company"]
[["response","docs",1,"price"],6.99]
[["response","docs",1,"price_c"],"6.99,USD"]
[["response","docs",1,"inStock"],false]
[["response","docs",1,"author"],"Glen Cook"]
[["response","docs",1,"author_s"],"Glen Cook"]
[["response","docs",1,"series_t"],"The Chronicles of The Black Company"]
[["response","docs",1,"sequence_i"],1]
[["response","docs",1,"genre_s"],"fantasy"]
[["response","docs",1,"_version_"],1665866796933054500]
[["response","docs",1,"price_c____l_ns"],699]
[["response","docs",1,"price_c____l_ns"]]
[["response","docs",2,"id"],"0812550706"]
[["response","docs",2,"cat",0],"book"]
[["response","docs",2,"cat",0]]
[["response","docs",2,"name"],"Ender's Game"]
[["response","docs",2,"price"],6.99]
[["response","docs",2,"price_c"],"6.99,USD"]
[["response","docs",2,"inStock"],true]
[["response","docs",2,"author"],"<NAME>"]
[["response","docs",2,"author_s"],"<NAME>"]
[["response","docs",2,"series_t"],"Ender"]
[["response","docs",2,"sequence_i"],1]
[["response","docs",2,"genre_s"],"scifi"]
[["response","docs",2,"_version_"],1665866796933054500]
[["response","docs",2,"price_c____l_ns"],699]
[["response","docs",2,"price_c____l_ns"]]
[["response","docs",2]]
[["response","docs"]]
[["response"]]


- 検索条件 未指定 検索最終件目から3件

solr docker-container-ubuntu-19-10-java-apache-solr-vim /usr/local/src/solr-8.5.1$curl -s 'http://localhost:8983/solr/techproducts/select?q=*%3A*&rows=3&start=51' | jq --stream -c
[["responseHeader","status"],0]
[["responseHeader","QTime"],0]
[["responseHeader","params","q"],"*:*"]
[["responseHeader","params","start"],"51"]
[["responseHeader","params","rows"],"3"]
[["responseHeader","params","rows"]]
[["responseHeader","params"]]
[["response","numFound"],52]
[["response","start"],51]
[["response","docs",0,"id"],"100-435805"]
[["response","docs",0,"name"],"ATI Radeon X1900 XTX 512 MB PCIE Video Card"]
[["response","docs",0,"manu"],"ATI Technologies"]
[["response","docs",0,"manu_id_s"],"ati"]
[["response","docs",0,"cat",0],"electronics"]
[["response","docs",0,"cat",1],"graphics card"]
[["response","docs",0,"cat",1]]
[["response","docs",0,"features",0],"ATI RADEON X1900 GPU/VPU clocked at 650MHz"]
[["response","docs",0,"features",1],"512MB GDDR3 SDRAM clocked at 1.55GHz"]
[["response","docs",0,"features",2],"PCI Express x16"]
[["response","docs",0,"features",3],"dual DVI, HDTV, svideo, composite out"]
[["response","docs",0,"features",4],"OpenGL 2.0, DirectX 9.0"]
[["response","docs",0,"features",4]]
[["response","docs",0,"weight"],48]
[["response","docs",0,"price"],649.99]
[["response","docs",0,"price_c"],"649.99,USD"]
[["response","docs",0,"popularity"],7]
[["response","docs",0,"inStock"],false]
[["response","docs",0,"manufacturedate_dt"],"2006-02-13T00:00:00Z"]
[["response","docs",0,"store"],"40.7143,-74.006"]
[["response","docs",0,"_version_"],1665866797934444500]
[["response","docs",0,"price_c____l_ns"],64999]
[["response","docs",0,"price_c____l_ns"]]
[["response","docs",0]]
[["response","docs"]]
[["response"]]

- 検索条件 検索単語 foundation 取得列を問わない

solr docker-container-ubuntu-19-10-java-apache-solr-vim /usr/local/src/solr-8.5.1$curl -s http://localhost:8983/solr/techproducts/select?q=foundation | jq --stream -c



- 検索条件 検索単語 foundation 取得列 id


http://localhost:8983/solr/techproducts/select?fl=id&q=foundation


solr docker-container-ubuntu-19-10-java-apache-solr-vim /usr/local/src/solr-8.5.1$curl -s 'http://localhost:8983/solr/techproducts/select?fl=id&q=foundation' | jq --stream -c
[["responseHeader","status"],0]
[["responseHeader","QTime"],0]
[["responseHeader","params","q"],"foundation"]
[["responseHeader","params","fl"],"id"]
[["responseHeader","params","fl"]]
[["responseHeader","params"]]
[["response","numFound"],4]
[["response","start"],0]
[["response","docs",0,"id"],"0553293354"]
[["response","docs",0,"id"]]
[["response","docs",1,"id"],"UTF8TEST"]
[["response","docs",1,"id"]]
[["response","docs",2,"id"],"SOLR1000"]
[["response","docs",2,"id"]]
[["response","docs",3,"id"],"/usr/local/src/solr-8.5.1/example/exampledocs/test_utf8.sh"]
[["response","docs",3,"id"]]
[["response","docs",3]]
[["response","docs"]]
[["response"]]


- 検索条件 取得列catの値がelectronicsである要素を取得

取得列:検索キーワード

solr docker-container-ubuntu-19-10-java-apache-solr-vim /usr/local/src/solr-8.5.1$curl -s 'http://localhost:8983/solr/techproducts/select?q=cat%3Aelectronics' | jq --stream -c



- 検索条件 複数単語を一語として扱って検索

ある単語+ある単語

solr docker-container-ubuntu-19-10-java-apache-solr-vim /usr/local/src/solr-8.5.1$curl -s 'http://localhost:8983/solr/techproducts/select?q=CAS%2Blatency' | jq --stream -c



- 検索条件 ある単語は含むがある単語は含まない


+electronics -music

solr docker-container-ubuntu-19-10-java-apache-solr-vim /usr/local/src/solr-8.5.1$curl -s 'http://localhost:8983/solr/techproducts/select?q=%2Belectronics%20-music' | jq --stream -c
solr docker-container-ubuntu-19-10-java-apache-solr-vim /usr/local/src/solr-8.5.1$curl -s 'http://localhost:8983/solr/techproducts/select?q=%2Belectronics' | jq --stream -c

検索の詳細なやり方については以下

https://lucene.apache.org/solr/guide/8_4/searching.html#searching


コアの削除


bin/solr delete -c techproducts


solr docker-container-ubuntu-19-10-java-apache-solr-vim /usr/local/src/solr-8.5.1$bin/solr delete -c techproducts

Deleting core 'techproducts' using command:
http://localhost:8983/solr/admin/cores?action=UNLOAD&core=techproducts&deleteIndex=true&deleteDataDir=true&deleteInstanceDir=true

solr docker-container-ubuntu-19-10-java-apache-solr-vim /usr/local/src/solr-8.5.1$curl -s 'http://localhost:8983/solr/techproducts/select?q=%2Belectronics'
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
<title>Error 404 Not Found</title>
</head>
<body><h2>HTTP ERROR 404 Not Found</h2>
<table>
<tr><th>URI:</th><td>/solr/techproducts/select</td></tr>
<tr><th>STATUS:</th><td>404</td></tr>
<tr><th>MESSAGE:</th><td>Not Found</td></tr>
<tr><th>SERVLET:</th><td>default</td></tr>
</table>

</body>
</html>

--ここから新規での手番


solrプロセスの起動

bin/solr start

コアの作成（レプリカ数を指定）

bin/solr create -c <yourCollection> -s 2 -rf 2


bin/solr create -c films -s 2 -rf 2


solr docker-container-ubuntu-19-10-java-apache-solr-vim /usr/local/src/solr-8.5.1$bin/solr create -c films -s 2 -rf 2
WARNING: Using _default configset with data driven schema functionality. NOT RECOMMENDED for production use.
         To turn off: bin/solr config -c films -p 8983 -action set-user-property -property update.autoCreateFields -value false

Created new core 'films'

solr docker-container-ubuntu-19-10-java-apache-solr-vim /usr/local/src/solr-8.5.1$find / -name "films" 2>/dev/null
/usr/local/src/solr-8.5.1/example/films
/usr/local/src/solr-8.5.1/example/techproducts/solr/films


solr docker-container-ubuntu-19-10-java-apache-solr-vim /usr/local/src/solr-8.5.1$ll /usr/local/src/solr-8.5.1/example/films
total 896
drwxr-xr-x. 2 solr solr   4096  5月  5 18:05 ./
drwxr-xr-x. 1 solr solr   4096  5月  6 00:40 ../
-rw-r--r--. 1 solr solr   4986  4月  8 14:02 README.txt
-rw-r--r--. 1 solr solr   3829  4月  8 14:02 film_data_generator.py
-rw-r--r--. 1 solr solr    299  4月  8 14:02 films-LICENSE.txt
-rw-r--r--. 1 solr solr 124581  4月  8 14:02 films.csv
-rw-r--r--. 1 solr solr 300955  4月  8 14:02 films.json
-rw-r--r--. 1 solr solr 455444  4月  8 14:02 films.xml
solr docker-container-ubuntu-19-10-java-apache-solr-vim /usr/local/src/solr-8.5.1$ll /usr/local/src/solr-8.5.1/example/techproducts/solr/films
total 20
drwxr-xr-x. 4 solr solr 4096  5月  6 01:33 ./
drwxr-xr-x. 5 solr solr 4096  5月  6 01:33 ../
drwxr-xr-x. 3 solr solr 4096  5月  5 18:05 conf/
-rw-r--r--. 1 solr solr   75  5月  6 01:33 core.properties
drwxr-xr-x. 5 solr solr 4096  5月  6 01:33 data/


solr docker-container-ubuntu-19-10-java-apache-solr-vim /usr/local/src/solr-8.5.1$cat /usr/local/src/solr-8.5.1/example/films/films.json | jq --stream -c '' | head
[[0,"id"],"/en/45_2006"]
[[0,"directed_by",0],"<NAME>"]
[[0,"directed_by",0]]
[[0,"initial_release_date"],"2006-11-30"]
[[0,"genre",0],"Black comedy"]
[[0,"genre",1],"Thriller"]
[[0,"genre",2],"Psychological thriller"]
[[0,"genre",3],"Indie film"]
[[0,"genre",4],"Action Film"]
[[0,"genre",5],"Crime Thriller"]
solr docker-container-ubuntu-19-10-java-apache-solr-vim /usr/local/src/solr-8.5.1$cat /usr/local/src/solr-8.5.1/example/films/films.json | jq --stream -c '' | tail
[[1099,"genre",1],"Mystery"]
[[1099,"genre",2],"Adventure Film"]
[[1099,"genre",3],"Fantasy"]
[[1099,"genre",4],"Fantasy Adventure"]
[[1099,"genre",5],"Fiction"]
[[1099,"genre",5]]
[[1099,"directed_by",0],"<NAME>"]
[[1099,"directed_by",0]]
[[1099,"directed_by"]]
[[1099]]



solr docker-container-ubuntu-19-10-java-apache-solr-vim /usr/local/src/solr-8.5.1$cat /usr/local/src/solr-8.5.1/example/films/films.csv | head
name,directed_by,genre,type,id,initial_release_date
.45,<NAME>,Black comedy|Thriller|Psychological thriller|Indie film|Action Film|Crime Thriller|Crime Fiction|Drama,,/en/45_2006,2006-11-30
9,<NAME>,Computer Animation|Animation|Apocalyptic and post-apocalyptic fiction|Science Fiction|Short Film|Thriller|Fantasy,,/en/9_2005,2005-04-21
69,Lee Sang-il,Japanese Movies|Drama,,/en/69_2004,2004-07-10
300,<NAME>,Epic film|Adventure Film|Fantasy|Action Film|Historical fiction|War film|Superhero movie|Historical Epic,,/en/300_2007,2006-12-09
2046,<NAME>,Romance Film|Fantasy|Science Fiction|Drama,,/en/2046_2004,2004-05-20
¿Quién es el señor López?,<NAME>,Documentary film,,/en/quien_es_el_senor_lopez,
"""Weird Al"" Yankovic: The Ultimate Video Collection","<NAME>vey|""Weird Al"" Yankovic",Music video|Parody,,/en/weird_al_yankovic_the_ultimate_video_collection,2003-11-04
15 Park Avenue,Aparna Sen,Art film|Romance Film|Musical|Drama|Musical Drama,,/en/15_park_avenue,2005-10-27
2 Fast 2 Furious,<NAME>,Thriller|Action Film|Crime Fiction,,/en/2_fast_2_furious,2003-06-03



solr docker-container-ubuntu-19-10-java-apache-solr-vim /usr/local/src/solr-8.5.1$cat /usr/local/src/solr-8.5.1/example/films/films.csv | tail
I Love New Year,<NAME>|<NAME>,Caper story|Crime Fiction|Romantic comedy|Romance Film|Bollywood|World cinema,,/wikipedia/en_title/I_Love_New_Year,2013-12-30
<NAME>,<NAME>,Musical|Romance Film|World cinema|Musical Drama|Drama,,/en/har_dil_jo_pyar_karega,2000-07-24
<NAME>,<NAME>,Psychological thriller|Thriller|Suspense|Indie film|Erotic thriller|Drama,,/en/hard_candy,
Hard Luck,<NAME>,Thriller|Crime Fiction|Action/Adventure|Action Film|Drama,,/en/hard_luck,2006-10-17
Hardball,<NAME>,Sports|Drama,,/en/hardball,2001-09-14
Harold &amp; Kumar Go to White Castle,<NAME>,Stoner film|Buddy film|Adventure Film|Comedy,,/en/harold_kumar_go_to_white_castle,2004-05-20
Harry Potter and the Chamber of Secrets,Chris Columbus,Adventure Film|Family|Fantasy|Mystery,,/en/harry_potter_and_the_chamber_of_secrets_2002,2002-11-03
<NAME>ter and the Goblet of Fire,<NAME>,Family|Fantasy|Adventure Film|Thriller|Science Fiction|Supernatural|Mystery|Children's Fantasy|Children's/Family|Fantasy Adventure|Fiction,,/en/harry_potter_and_the_goblet_of_fire_2005,2005-11-06
Harry Potter and the Half-Blood Prince,David Yates,Adventure Film|Fantasy|Mystery|Action Film|Family|Romance Film|Children's Fantasy|Children's/Family|Fantasy Adventure|Fiction,,/en/harry_potter_and_the_half_blood_prince_2008,2009-07-06
Harry Potter and the Order of the Phoenix,David Yates,Family|Mystery|Adventure Film|Fantasy|Fantasy Adventure|Fiction,,/en/harry_potter_and_the_order_of_the_phoenix_2007,2007-06-28



ここから、サーバーにデータをポストしていく


コアのカラム作成

This data consists of the following fields:
 * "id" - unique identifier for the movie
 * "name" - Name of the movie
 * "directed_by" - The person(s) who directed the making of the film
 * "initial_release_date" - The earliest official initial film screening date in any country
 * "genre" - The genre(s) that the movie belongs to



curl -X POST -H 'Content-type:application/json' --data-binary '{"add-field": {"name":"name", "type":"text_general", "multiValued":false, "stored":true}}' http://localhost:8983/solr/films/schema


solr docker-container-ubuntu-19-10-java-apache-solr-vim /usr/local/src/solr-8.5.1/example/techproducts/solr/films/conf$curl -X POST -H 'Content-type:application/json' --data-binary '{"add-field": {"name":"name", "type":"text_general", "multiValued":false, "stored":true}}' http://localhost:8983/solr/films/schema
{
  "responseHeader":{
    "status":0,
    "QTime":158}}


カラム構成を変更する場合


curl http://localhost:8983/solr/films/schema -X POST -H 'Content-type:application/json' --data-binary '{
    "add-field" : {
        "name":"name",
        "type":"text_general",
        "multiValued":false,
        "stored":true
    },
    "add-field" : {
        "name":"initial_release_date",
        "type":"pdate",
        "stored":true
    }
}'


solr docker-container-ubuntu-19-10-java-apache-solr-vim /usr/local/src/solr-8.5.1/example/techproducts/solr/films/conf$cat managed-schema.json | jq --stream -c '' | grep name


データ投入

solr docker-container-ubuntu-19-10-java-apache-solr-vim /usr/local/src/solr-8.5.1$bin/post -c films example/films/films.json
/usr/local/src/jdk-11/bin/java -classpath /usr/local/src/solr-8.5.1/dist/solr-core-8.5.1.jar -Dauto=yes -Dc=films -Ddata=files org.apache.solr.util.SimplePostTool example/films/films.json
SimplePostTool version 5.0.0
Posting files to [base] url http://localhost:8983/solr/films/update...
Entering auto mode. File endings considered are xml,json,jsonl,csv,pdf,doc,docx,ppt,pptx,xls,xlsx,odt,odp,ods,ott,otp,ots,rtf,htm,html,txt,log
POSTing file films.json (application/json) to [base]/json/docs
1 files indexed.
COMMITting Solr index changes to http://localhost:8983/solr/films/update...
Time spent: 0:00:00.318



データ取得


solr docker-container-ubuntu-19-10-java-apache-solr-vim /usr/local/src/solr-8.5.1$curl -s 'http://localhost:8983/solr/films/select?q=*%3A*' | jq --stream -c ''


ファセット

solr docker-container-ubuntu-19-10-java-apache-solr-vim /usr/local/src/solr-8.5.1$curl -s 'http://localhost:8983/solr/films/select?q=*%3A*&rows=1100&start=0' | jq --stream -c ''


ピボットファセット

サブグループの集計

curl "http://localhost:8983/solr/films/select?q=*:*&rows=0&facet=on&facet.pivot=genre_str,directed_by_str"



レンジファセット

年別集計



curl 'http://localhost:8983/solr/films/select?q=*:*&rows=0&facet=true&facet.range=initial_release_date&facet.range.start=NOW-20YEAR&facet.range.end=NOW&facet.range.gap=%2B1YEAR'




solr docker-container-ubuntu-19-10-java-apache-solr-vim /usr/local/src/solr-8.5.1$curl 'http://localhost:8983/solr/films/select?q=*:*&rows=0&facet=true&facet.range=initial_release_date&facet.range.start=NOW-20YEAR&facet.range.end=NOW&facet.range.gap=%2B1YEAR'
{
  "responseHeader":{
    "status":0,
    "QTime":17,
    "params":{
      "facet.range":"initial_release_date",
      "q":"*:*",
      "facet.range.gap":"+1YEAR",
      "rows":"0",
      "facet":"true",
      "facet.range.start":"NOW-20YEAR",
      "facet.range.end":"NOW"}},
  "response":{"numFound":1100,"start":0,"docs":[]
  },
  "facet_counts":{
    "facet_queries":{},
    "facet_fields":{},
    "facet_ranges":{
      "initial_release_date":{
        "counts":[
          "2000-05-06T10:24:32.571Z",81,
          "2001-05-06T10:24:32.571Z",105,
          "2002-05-06T10:24:32.571Z",117,
          "2003-05-06T10:24:32.571Z",137,
          "2004-05-06T10:24:32.571Z",154,
          "2005-05-06T10:24:32.571Z",205,
          "2006-05-06T10:24:32.571Z",110,
          "2007-05-06T10:24:32.571Z",32,
          "2008-05-06T10:24:32.571Z",8,
          "2009-05-06T10:24:32.571Z",4,
          "2010-05-06T10:24:32.571Z",1,
          "2011-05-06T10:24:32.571Z",0,
          "2012-05-06T10:24:32.571Z",1,
          "2013-05-06T10:24:32.571Z",1,
          "2014-05-06T10:24:32.571Z",0,
          "2015-05-06T10:24:32.571Z",1,
          "2016-05-06T10:24:32.571Z",0,
          "2017-05-06T10:24:32.571Z",0,
          "2018-05-06T10:24:32.571Z",0,
          "2019-05-06T10:24:32.571Z",0],
        "gap":"+1YEAR",
        "start":"2000-05-06T10:24:32.571Z",
        "end":"2020-05-06T10:24:32.571Z"}},
    "facet_intervals":{},
    "facet_heatmaps":{}}}

年月別

curl 'http://localhost:8983/solr/films/select?q=*:*&rows=0&facet=true&facet.range=initial_release_date&facet.range.start=NOW-20YEAR&facet.range.end=NOW&facet.range.gap=%2B1MONTH'


年月日別

curl 'http://localhost:8983/solr/films/select?q=*:*&rows=0&facet=true&facet.range=initial_release_date&facet.range.start=NOW-20YEAR&facet.range.end=NOW&facet.range.gap=%2B1MONTH'


特定のドキュメントのみ削除

削除前


solr docker-container-ubuntu-19-10-java-apache-solr-vim /usr/local/src/solr-8.5.1$curl -s 'http://localhost:8983/solr/films/select?q=id:*/en/300_2007' | jq --stream -c
[["responseHeader","status"],0]
[["responseHeader","QTime"],2]
[["responseHeader","params","q"],"id:*/en/300_2007"]
[["responseHeader","params","q"]]
[["responseHeader","params"]]
[["response","numFound"],1]
[["response","start"],0]
[["response","docs",0,"id"],"/en/300_2007"]
[["response","docs",0,"directed_by",0],"<NAME>"]
[["response","docs",0,"directed_by",0]]
[["response","docs",0,"initial_release_date",0],"2006-12-09T00:00:00Z"]
[["response","docs",0,"initial_release_date",0]]
[["response","docs",0,"genre",0],"Epic film"]
[["response","docs",0,"genre",1],"Adventure Film"]
[["response","docs",0,"genre",2],"Fantasy"]
[["response","docs",0,"genre",3],"Action Film"]
[["response","docs",0,"genre",4],"Historical fiction"]
[["response","docs",0,"genre",5],"War film"]
[["response","docs",0,"genre",6],"Superhero movie"]
[["response","docs",0,"genre",7],"Historical Epic"]
[["response","docs",0,"genre",7]]
[["response","docs",0,"name"],"300"]
[["response","docs",0,"_version_"],1665931701953495000]
[["response","docs",0,"_version_"]]
[["response","docs",0]]
[["response","docs"]]
[["response"]]


削除後

solr docker-container-ubuntu-19-10-java-apache-solr-vim /usr/local/src/solr-8.5.1$bin/post -c films -d "<delete><id>/en/300_2007</id></delete>"
/usr/local/src/jdk-11/bin/java -classpath /usr/local/src/solr-8.5.1/dist/solr-core-8.5.1.jar -Dauto=yes -Dc=films -Ddata=args org.apache.solr.util.SimplePostTool <delete><id>/en/300_2007</id></delete>
SimplePostTool version 5.0.0
POSTing args to http://localhost:8983/solr/films/update...
COMMITting Solr index changes to http://localhost:8983/solr/films/update...
Time spent: 0:00:00.041


削除後検索

solr docker-container-ubuntu-19-10-java-apache-solr-vim /usr/local/src/solr-8.5.1$curl -s 'http://localhost:8983/solr/films/select?q=id:*/en/300_2007' | jq --stream -c
[["responseHeader","status"],0]
[["responseHeader","QTime"],2]
[["responseHeader","params","q"],"id:*/en/300_2007"]
[["responseHeader","params","q"]]
[["responseHeader","params"]]
[["response","numFound"],0]
[["response","start"],0]
[["response","docs"],[]]
[["response","docs"]]
[["response"]]


コアごと削除

bin/solr delete -c films
```
<file_sep>GIT_VERSION=2-24-1
KDEVELOP_VERSION=5-5-0
PYTHON_VERSION=3-7-4
<file_sep>過去分はここから

https://www.elastic.co/jp/downloads/past-releases

dbeaverのドライバのサポートバージョンが7.4.0なので、これに合わせる形

jdk

```
$java -version
openjdk version "11" 2018-09-25
OpenJDK Runtime Environment 18.9 (build 11+28)
OpenJDK 64-Bit Server VM 18.9 (build 11+28, mixed mode)
```

elasticsearch


```
cd /usr/local/src

tar xvf elasticsearch-oss-7.4.0-linux-x86_64.tar.gz

chown -R elasticsearch:elasticsearch elasticsearch-7.4.0/
```

パス設定

elasticsearchユーザーに設定

```
echo 'export ES_HOME=/usr/local/src/elasticsearch-7.4.0' >>$HOME/.bashrc
echo 'export PATH=$ES_HOME/bin:$PATH' >>$HOME/.bashrc
```


バージョン

```
$elasticsearch --version
OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
Version: 7.4.0, Build: oss/tar/22e1767283e61a198cb4db791ea66e3f11ab9910/2019-09-27T08:36:48.569419Z, JVM: 11
```

ヘルプ

```
$elasticsearch --help
OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
starts elasticsearch

Option                Description
------                -----------
-E <KeyValuePair>     Configure a setting
-V, --version         Prints elasticsearch version information and exits
-d, --daemonize       Starts Elasticsearch in the background
-h, --help            show help
-p, --pidfile <Path>  Creates a pid file in the specified path on start
-q, --quiet           Turns off standard output/error streams logging in console
-s, --silent          show minimal output
-v, --verbose         show verbose output

```

kibana

kibanaユーザーに設定

```
cd /usr/local/src

tar xvf kibana-oss-7.4.0-linux-x86_64.tar.gz

chown -R kibana:kibana kibana-7.4.0-linux-x86_64/
```

パス設定

```
echo 'export KIBANA_HOME=/usr/local/src/kibana-7.4.0-linux-x86_64' >>$HOME/.bashrc
echo 'export PATH=$KIBANA_HOME/bin:$PATH' >>$HOME/.bashrc
```

バージョン

```
$kibana --version
7.4.0
```

ヘルプ

```
$kibana --help

  Usage: bin/kibana [command=serve] [options]

  Kibana is an open source (Apache Licensed), browser based analytics and search dashboard for Elasticsearch.

  Commands:
    serve  [options]  Run the kibana server
    help  <command>   Get the help for a specific command

  "serve" Options:

    -e, --elasticsearch <uri1,uri2>  Elasticsearch instances
    -c, --config <path>              Path to the config file, use multiple --config args to include multiple config files (default: ["/usr/local/src/kibana-7.4.0-linux-x86_64/config/kibana.yml"])
    -p, --port <port>                The port to bind to
    -q, --quiet                      Prevent all logging except errors
    -Q, --silent                     Prevent all logging
    --verbose                        Turns on verbose logging
    -H, --host <host>                The host to bind to
    -l, --log-file <path>            The file to log to
    --plugin-dir <path>              A path to scan for plugins, this can be specified multiple times to specify multiple directories (default: ["/usr/local/src/kibana-7.4.0-linux-x86_64/plugins","/usr/local/src/kibana-7.4.0-linux-x86_64/src/legacy/core_plugins"])
    --plugin-path <path>             A path to a plugin which should be included by the server, this can be specified multiple times to specify multiple paths (default: [])
    --plugins <path>                 an alias for --plugin-dir
    --optimize                       Optimize and then stop the server
    -h, --help                       output usage information


```



elasticsearchプロセス起動

```
$elasticsearch -d --verbose 1>$HOME/launch-elasticsearch.log 2>&1
```


```
$ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
kibana       1  0.0  0.0  14240  1248 pts/0    Ss   14:02   0:00 bash /etc/init/run.sh
kibana       8  0.0  0.0 237388 18380 ?        S    14:02   0:05 fcitx
kibana       9  0.0  0.0  14380  2016 pts/0    S+   14:02   0:00 bash
kibana      22  0.0  0.0  58908   884 ?        S    14:02   0:00 dbus-launch --autolaunch bc74deaa9e044c079ed6fc963d084157 --binary-syntax --close-stderr
kibana      29  0.0  0.0  58004  1364 ?        Ss   14:02   0:00 /usr/bin/dbus-daemon --fork --print-pid 5 --print-address 7 --session
kibana      34  0.0  0.0  58284  1732 ?        Ss   14:02   0:01 /usr/bin/dbus-daemon --fork --print-pid 5 --print-address 7 --config-file /usr/share/fcitx/dbus/daemon.conf
kibana      38  0.0  0.0  51300   784 ?        SN   14:02   0:00 /usr/bin/fcitx-dbus-watcher unix:abstract=/tmp/dbus-qqr563ropB,guid=2f0971c0a039b3e0a6cb87355ebf73ef 34
kibana    2428  0.0  0.0  14380  2076 pts/1    Ss   18:32   0:00 /bin/bash
kibana    2534  0.0  0.0 187424  2912 ?        Sl   18:33   0:00 /usr/libexec/dconf-service
kibana    2547  0.0  0.0 192900 12300 pts/1    S    18:35   0:00 dbeaver
kibana    2571  3.4  1.1 5843012 367424 pts/1  Sl   18:35   0:34 /bin/java -XX:+IgnoreUnrecognizedVMOptions -Xms64m -Xmx1024m -jar /usr/share/dbeaver//plugins/org.eclipse.equinox.launcher_1.5.700.v20200207-2156.
root      2671  0.0  0.0  87268  2632 pts/1    S    18:51   0:00 su elasticsearch
elastic+  2674  0.0  0.0  14380  2056 pts/1    S    18:51   0:00 bash
elastic+  2771  323  3.9 6131996 1290104 pts/1 Sl   18:51   0:12 /usr/local/src/jdk-11/bin/java -Xms1g -Xmx1g -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -Des
elastic+  2828  0.0  0.0  54312  1872 pts/1    R+   18:51   0:00 ps axu
```


```
$lsof -i:9200
COMMAND  PID          USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
java    2771 elasticsearch  248u  IPv4 27262732      0t0  TCP localhost:wap-wsp (LISTEN)
```

ヘルスチェック


```
$curl http://localhost:9200
{
  "name" : "doc-centos-7-6-18-10-elasticsearch-kibana-java-dbeaver",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "xGV_LjzOTiW_QMFu-_Xvjw",
  "version" : {
    "number" : "7.4.0",
    "build_flavor" : "oss",
    "build_type" : "tar",
    "build_hash" : "22e1767283e61a198cb4db791ea66e3f11ab9910",
    "build_date" : "2019-09-27T08:36:48.569419Z",
    "build_snapshot" : false,
    "lucene_version" : "8.2.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}
```


kibanaプロセス起動


設定ファイル修正

コマンドライン引数から指定できるぽいから臨機応変に

インスタントに必要やったら、コマンドライン引数に指定したほうがいいか

修正前

```
$grep -P 'server\.(name|port)' /usr/local/src/kibana-7.4.0-linux-x86_64/config/kibana.yml
#server.port: 5601
#server.name: "your-hostname"
```

修正内容確認

```
$sed -r "s/\#(.*)/\1/g" /usr/local/src/kibana-7.4.0-linux-x86_64/config/kibana.yml | grep -P 'server\.(port)'
server.port: 5601
```

```
$sed -r "s/\#server.name: \"your-hostname\"/server.name: $(ip a show | grep -Po '(\.?[0-9]{1,}){4}(?=/)' | grep -vP '^127')/g" /usr/local/src/kibana-7.4.0-linux-x86_64/config/kibana.yml | grep -P 'server\.(name)'
server.name: 172.17.0.4
```

```
$kibana -p 5601 -H $(ip a show | grep -Po '(\.?[0-9]{1,}){4}(?=/)' | grep -vP '^127') 1>$HOME/launch-kibana.log 2>&1 &
[2] 3087
$ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
kibana       1  0.0  0.0  14240  1248 pts/0    Ss   14:02   0:00 bash /etc/init/run.sh
kibana       8  0.0  0.0 237388 18380 ?        S    14:02   0:05 fcitx
kibana       9  0.0  0.0  14380  2016 pts/0    S+   14:02   0:00 bash
kibana      22  0.0  0.0  58908   884 ?        S    14:02   0:00 dbus-launch --autolaunch bc74deaa9e044c079ed6fc963d084157 --binary-syntax --close-stderr
kibana      29  0.0  0.0  58004  1364 ?        Ss   14:02   0:00 /usr/bin/dbus-daemon --fork --print-pid 5 --print-address 7 --session
kibana      34  0.0  0.0  58284  1732 ?        Ss   14:02   0:01 /usr/bin/dbus-daemon --fork --print-pid 5 --print-address 7 --config-file /usr/share/fcitx/dbus/daemon.conf
kibana      38  0.0  0.0  51300   784 ?        SN   14:02   0:00 /usr/bin/fcitx-dbus-watcher unix:abstract=/tmp/dbus-qqr563ropB,guid=2f0971c0a039b3e0a6cb87355ebf73ef 34
kibana    2428  0.0  0.0  14380  2076 pts/1    Ss   18:32   0:00 /bin/bash
kibana    2534  0.0  0.0 187424  2912 ?        Sl   18:33   0:00 /usr/libexec/dconf-service
kibana    2547  0.0  0.0 192900 12300 pts/1    S    18:35   0:00 dbeaver
kibana    2571  2.6  1.1 5843012 367544 pts/1  Sl   18:35   0:36 /bin/java -XX:+IgnoreUnrecognizedVMOptions -Xms64m -Xmx1024m -jar /usr/share/dbeaver//plugins/org.eclipse.equinox.launcher_1.5.700.v20200207-2156.
elastic+  2771  4.6  4.0 7203164 1310516 pts/1 Sl   18:51   0:19 /usr/local/src/jdk-11/bin/java -Xms1g -Xmx1g -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -Des
kibana    3087 57.5  0.4 1219148 132184 pts/1  Sl   18:58   0:02 /usr/local/src/kibana-7.4.0-linux-x86_64/bin/../node/bin/node /usr/local/src/kibana-7.4.0-linux-x86_64/bin/../src/cli -p 5601 -H 172.17.0.4
kibana    3106  0.0  0.0  54308  1868 pts/1    R+   18:58   0:00 ps uax
```


```
$lsof -i:5601
COMMAND  PID   USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
node    3087 kibana   18u  IPv4 27390766      0t0  TCP doc-centos-7-6-18-10-elasticsearch-kibana-java-dbeaver:esmagent (LISTEN)
```


dbeaverなどでelasticsearchのデータをいじる

```
$dbeaver 1>$HOME/launch-dbeaver.log  2>&1 &
```
<file_sep>```
cd $HOME/script-env
ls D[0][1]* D[0][6]* D[0][9]* P[0-1][0-9]* R07* | xargs -n1 -I@ echo "bash @ script-env" | bash
```

```
env-->sketch-->repo


remove env


でいいとおもう


sketchにはバージョン入れたほうがいい
```
<file_sep>FROM ibmcom/db2

ARG OS_VERSION
ARG REPO

ARG GIT_VERSION
ARG PYTHON_VERSION

ENV LANG=ja_JP.UTF-8
ENV DISPLAY=:0.0

ENV BLU=false
ENV DB2INST1_PASSWORD=<PASSWORD>
ENV DB2INSTANCE=db2inst1
ENV DBNAME=testdb
ENV ENABLE_ORACLE_COMPATIBILITY=true
ENV LICENSE=accept
ENV SAMPLEDB=true

RUN yum install -y git
RUN cd /usr/local/src && git clone https://github.com/ukijumotahaneniarukenia/$REPO.git

RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-install-docker-host-user.sh | bash

RUN cd /usr/local/src/$REPO && echo './$OS_VERSION-install-default-user.sh 1002 db2inst1 1002 db2inst1' | bash
RUN cd /usr/local/src/$REPO && echo './$OS_VERSION-install-default-user.sh 1001 db2fenc1 1001 db2fenc1' | bash

RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-install-repository-pkg.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-install-dev-pkg.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-install-tool-pkg.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-install-network-pkg.sh | bash

RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-install-vim-system.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-install-vim-user.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-install-vim_plug.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-install-python-$PYTHON_VERSION.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-install-git-$GIT_VERSION.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-config-dotfile.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-config-locale.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-config-env.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-config-ld.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-config-font-RictyDiminished.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-install-ibus_mozc.sh | bash
#RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-install-fcitx_anthy.sh | bash

COPY subrun.sh /root/subrun.sh
#RUN bash /root/subrun.sh

USER db2fenc1
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-install-vim-user.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-install-vim_plug.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-config-dotfile.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-config-env.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-config-font-RictyDiminished.sh | bash

USER db2inst1
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-install-vim-user.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-install-vim_plug.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-config-dotfile.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-config-env.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-config-font-RictyDiminished.sh | bash

WORKDIR /home/db2inst1

EXPOSE 50000
COPY run.sh /etc/init/run.sh
ENTRYPOINT ["/etc/init/run.sh","centos"]
<file_sep>GIT_VERSION=2-24-1
POSTGRES_VERSION=12-0
PYTHON_VERSION=3-7-4
TCLSH_VERSION=8-6-10
<file_sep># トラシュー

- 事象

  - dbeaverのインストールできない
```
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
パッケージ openjdk-11-jre-headless は使用できませんが、別のパッケージから参照されます。
これは、パッケージが欠落しているか、廃止されたか、または別のソース
からのみ利用可能であることを意味します。

パッケージ openjdk-11-jdk-headless は使用できませんが、別のパッケージから参照されます。
これは、パッケージが欠落しているか、廃止されたか、または別のソース
からのみ利用可能であることを意味します。

E: パッケージ 'openjdk-11-jre-headless' にはインストール候補がありません
E: パッケージ 'openjdk-11-jdk-headless' にはインストール候補がありません
```

- 原因

  - jdkレポから配布されていないから

- 対応

  - ソースからいんすこ

- 予防

  - dbeaverのインストールはjdkのいんすこおえてから
<file_sep>#!/usr/bin/env bash

d=1 #21時始まりにしてみた

template(){
  n=$1;shift;
  l=$1;shift;
  MM=$(printf "%02d" $(($n%12)))
if [ $MM = '00' ];then
  cat <<EOS
10 00 $(printf "%02d" $d) 12 * $HOME/$ENV_REPO/docker-crontab-wrapper.sh 1 $l $SCRIPT_REPO
EOS
  if [[ $d -eq 32 ]];then
    d=1
  else
    d=$(($d+1))
  fi
else
  cat <<EOS
10 00 $(printf "%02d" $d) $MM * $HOME/$ENV_REPO/docker-crontab-wrapper.sh 1 $l $SCRIPT_REPO
EOS
fi
}

usage(){
cat <<EOS
Usage:
  $0 script-env script-repo
EOS
exit 0
}

ENV_REPO=$1;shift
SCRIPT_REPO=$1;shift

[ -z $ENV_REPO ] && usage
[ -z $SCRIPT_REPO ] && usage

while read tgt;do
  echo $tgt | perl -pe 's;.*/;;' | perl -nlE 's/(?:[a-z]+(?:-[0-9]{1,}){1,})(.*)/\1/ and say' | tr '-' '\n' | sed /^$/d
done < <(find $HOME/$ENV_REPO -mindepth 1 -type d | grep -vP '\.git|docker-log|mnt') | sort | uniq | \
  while read tgt;do
    find $HOME/$ENV_REPO -mindepth 1 -type d | grep -vP '\.git|docker-log|mnt' | sed 's;.*/;;' | grep -P "(?<=-)$tgt" | xargs -n3 | nl | \
      while read n {a..c};do
        #echo $tgt $n $(eval echo '$'{a..c}|xargs -n1;)
        eval echo '$'{a..c}|xargs -n1 >docker-build-$tgt-list-$(printf "%02d" $n);
      done
  done

ls docker-build*list* | grep -vP 'list$' | nl | \
while read n l ;do
  template $n $l
done | sort -k4 >docker-crontab-BY-ONE-MONTH
<file_sep>|ユーザーＩＤ|ユーザー名|グループＩＤ|グループ名|パスワード|
|:-:|:-:|:-:|:-:|:-:|
|1001|solr|1001|solr|solr_pwd|
<file_sep># 参考文献
https://www.nodebeginner.org/index-jp.html</br>
https://github.com/nodesource/distributions/blob/master/README.md</br>

nodeのパッケージ管理にはyarnとnpmの2つがある
https://qiita.com/jigengineer/items/c75ca9b8f0e9ce462e99</br>

# dockerイメージ作成
```
time docker build -t centos-7-6-18-10-node . | tee log
```

# dockerコンテナ作成
```
docker run --privileged --shm-size=8gb -v /run/udev:/run/udev -v /run/systemd:/run/systemd -v /tmp/.X11-unix:/tmp/.X11-unix -v /var/lib/dbus:/var/lib/dbus -v /var/run/dbus:/var/run/dbus -v /etc/machine-id:/etc/machine-id -v /etc/localtime:/etc/localtime -p 8080:80 -p 5601:5601 -p 9200:9200 -itd --name centos-7-6-18-10-node centos-7-6-18-10-node
```

# dockerコンテナ潜入

```
docker exec --user kuraine -it centos-7-6-18-10-node /bin/bash
```

# 不要コンテナ削除

```
docker ps -a | grep -vE "node|tcl|mysql|racket|postgres|oracle|egison|java|sqlite" | awk '/Ex/{print $1}' | xargs docker rm
```

# 不要イメージ削除

```
docker images | awk '$1=="<none>"{print $3}' | xargs -I@ docker rmi @
```
<file_sep>#!/bin/bash

usage(){
  cat <<EOS
Usage:
  $0 build-arg script-env
EOS
exit 0
}

N="$1";shift
REPO="$1";shift

[ -z $N ] && usage
[ -z $REPO ] && usage

while read tgt;do

  grep -r -n -P "$N" $HOME/$REPO/$tgt | grep -P env\.md | awk -v FS=':' -v N=$N '{FILE_NAME=$1;gsub(/md-env.md/,"env-"N".md",FILE_NAME);print "rm -rf "FILE_NAME}'
  grep -r -n -P "$N" $HOME/$REPO/$tgt | grep -P env\.md | awk -v FS=':' -v OFS='\n' -v N=$N '{
    s=split($3,ary," ");
    FILE_NAME=$1;
  }
  END{
    for(e in ary){
      print ary[e]
      gsub(/md-env.md/,"env-"N".md",FILE_NAME);print FILE_NAME
    }
  }' | xargs -n2 | grep -vP "\--$N" | sort -k2,1 | awk '{print "echo \x27"$1"\x27>>"$2}'

done < <(ls -l $HOME/$REPO | grep -P '^d' | awk '{print $9}' | grep -v docker-log)


#ファイル存在チェック
#ls -l $HOME/$REPO | grep -P '^d' | awk '{print $9}' | grep -v docker-log | while read tgt;do echo $HOME/$REPO/$tgt/env-$N.md;done | xargs -I@ ls @
<file_sep>APACHE_SPARK_VERSION=3-0-0
DBEAVER_VERSION=X-X-X
HADOOP_VERSION=3-2
GIT_VERSION=2-24-1
JAVA_VERSION=11
MAVEN_VERSION=3-6-3
PYTHON_VERSION=3-7-4
<file_sep>GDB_VERSION=9-1
GIT_VERSION=2-24-1
KDEVELOP_VERSION=5-5-0
NIM_VERSION=1-0-6
PYTHON_VERSION=3-7-4
TEXINFO_VERSION=6-7
<file_sep>FROM mcr.microsoft.com/mssql/server:2019-GA-ubuntu-16.04

ARG OS_VERSION
ARG REPO
ARG DEBIAN_FRONTEND=noninteractive

ARG DBEAVER_VERSION
ARG GIT_VERSION
ARG JAVA_VERSION
ARG MAVEN_VERSION
ARG PYTHON_VERSION
ARG SQLSERVER_VERSION

ENV LANG=ja_JP.UTF-8
ENV DISPLAY=:0.0

ENV ACCEPT_EULA=Y
ENV SA_PASSWORD=<PASSWORD>
USER root

RUN sed -i 's@<EMAIL>/pub/Linux@g' /etc/apt/sources.list && \
apt update && \
apt upgrade -y

#ENV ACCEPT_EULA=Y
#ENV SA_PASSWORD=<PASSWORD>

RUN apt install -y git
RUN cd /usr/local/src && git clone https://github.com/ukijumotahaneniarukenia/$REPO.git

RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-install-docker-host-user.sh | bash

RUN cd /usr/local/src/$REPO && echo './$OS_VERSION-install-default-user.sh 1001 mssql 1001 mssql' | bash

RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-install-repository-pkg.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-install-dev-pkg.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-install-tool-pkg.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-install-network-pkg.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-install-vim-system.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-install-vim-user.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-install-vim_plug.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-install-python-$PYTHON_VERSION.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-pre-patch-git-$GIT_VERSION.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-install-git-$GIT_VERSION.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-config-dotfile.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-config-locale.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-config-env.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-config-ld.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-config-font-RictyDiminished.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-install-fcitx_mozc.sh | bash

COPY subrun.sh /root/subrun.sh
#RUN bash /root/subrun.sh

RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-post-patch-sqlserver-$SQLSERVER_VERSION.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-install-jdk-$JAVA_VERSION.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-install-maven-$MAVEN_VERSION.sh | bash
#ソースからdbeaverいんすこする必要があるから設定
ENV JAVA_HOME=/usr/local/src/jdk-$JAVA_VERSION
ENV PATH=$JAVA_HOME/bin:$PATH
ENV MAVEN_HOME=/usr/local/src/apache-maven-$MAVEN_VERSION
ENV PATH=$MAVEN_HOME/bin:$PATH
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-install-dbeaver-$DBEAVER_VERSION.sh | bash

USER mssql
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-install-vim-user.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-install-vim_plug.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-config-dotfile.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-config-env.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-config-font-RictyDiminished.sh | bash

WORKDIR /home/mssql

EXPOSE 1433
COPY run.sh /etc/init/run.sh
ENTRYPOINT ["/etc/init/run.sh","ubuntu"]
<file_sep>FROM mcr.microsoft.com/mssql/server:2019-GA-ubuntu-16.04
<file_sep>#!/usr/bin/env bash

usage(){
cat <<EOS
Usage:
  $0 FROM script-env
EOS
exit 0
}

CHK_WORD=$1;shift
ENV_REPO=$1;shift

[ -z $CHK_WORD ] && usage
[ -z $ENV_REPO ] && usage

while read tgt;do
  if [ -f $tgt/env-image.md ];then
    :
  else
    echo touch $tgt/env-image.md | bash
  fi
  if [ -f $tgt/Dockerfile.sub ];then
    RT="$(grep $CHK_WORD $tgt/Dockerfile.sub)"
    if [ -z "$RT" ];then
      :
    else
      echo "echo '$RT' >>$tgt/env-image.md" | bash
    fi
  else
    :
  fi
done < <(find $HOME/$ENV_REPO -mindepth 1 -type d | grep -vP '\.git|docker-log|mnt')
<file_sep>[正規表現](https://rubular.com/)
[Rubyコード補完](https://qiita.com/tequila0725/items/8e93dc894e0ab67d322f)
<file_sep>GIT_VERSION=2-24-1
PHP_VERSION=7-3-X
PYTHON_VERSION=3-7-4
<file_sep>#!/usr/bin/env bash

usage(){
cat <<EOS
Usage:
  $0 script-env
  or
  $0 script-env --debug
EOS
exit 0
}

execute(){

  OS_VERSION=$1;shift

  [ -z $OS_VERSION ] && usage

  OS_NAME=$(echo $OS_VERSION | perl -pe 's/^([a-z]+)-(.*)$/\1/g')

  TEMPLATE_FILE=$(find $HOME/$ENV_REPO -name "docker-template-Dockerfile-$OS_NAME")

  TEMPLATE_CMD="RUN cd /usr/local/src/\\\$REPO && echo './\\\$OS_VERSION-install-default-user.sh ARGS' | bash"

  while read tgt;do
    REPLACE_POS=$(grep -n DOCKERFILE_INSTALL_USER $tgt/Dockerfile.auto | sed 's/:.*//')
    #テンプレートファイルのDOCKERFILE_INSTALL_USERの置換
    {
      echo $tgt
      grep -c -vP  'ユーザーＩＤ|aine|kuraine|nahato|mujiku|:-:|root' $tgt/env-user.md
      grep -vP  'ユーザーＩＤ|aine|kuraine|nahato|mujiku|:-:|root' $tgt/env-user.md | awk -v FS='|' -v ORS='' '{print ","$2}'|sed 's/$/@/'
      grep -vP  'ユーザーＩＤ|aine|kuraine|nahato|mujiku|:-:|root' $tgt/env-user.md | awk -v FS='|' -v ORS='' '{print ","$3}'|sed 's/$/@/'
      grep -vP  'ユーザーＩＤ|aine|kuraine|nahato|mujiku|:-:|root' $tgt/env-user.md | awk -v FS='|' -v ORS='' '{print ","$4}'|sed 's/$/@/'
      grep -vP  'ユーザーＩＤ|aine|kuraine|nahato|mujiku|:-:|root' $tgt/env-user.md | awk -v FS='|' -v ORS='' '{print ","$5}'|sed 's/$/@/'
    } | xargs -n6 | sed '/^$/d' |\
    while read file row_cnt user_info;do
      #echo $file $row_cnt $user_id $user_name $group_id $group_name
      if [ 0 -eq $row_cnt ];then
        #cmd=$(echo "$TEMPLATE_CMD" |  >>$file/Dockerfile.auto)
        cmd=$(sed "s:ARGS::;s:^:echo :;" <<< "$TEMPLATE_CMD")
        if [ "$SHELL" = 'bash' ];then
          echo $cmd | sed "s;echo ;sed -i \x22$REPLACE_POS i;;s;$;\x22 $file/Dockerfile.auto;" | $SHELL
        else
          echo $cmd | sed "s;echo ;sed -i \x22$REPLACE_POS i;;s;$;\x22 $file/Dockerfile.auto;"
        fi
      else
        col_cnt=$(echo $user_info | awk '{print gsub("@","",$1)}')
      fi
      for (( i=1;i<=$row_cnt;i++));do
        args="$(seq $col_cnt | while read j;do
          #echo $file $i $j $user_info $(echo $user_info | cut -d'@' -f$j | awk -v i=$(($i+1)) -v FS=',' '{print $i}')
          echo $(echo $user_info | cut -d'@' -f$j | awk -v i=$(($i+1)) -v FS=',' '{print $i}')
        done | xargs -n4)"
        cmd=$(sed "s:ARGS:$args:;s:^:echo :;" <<< "$TEMPLATE_CMD")
        #cmd=$(sed "s:ARGS:$args:;s:^:echo :;s:$: $file/Dockerfile.auto:" <<< "$TEMPLATE_CMD")
        if [ "$SHELL" = 'bash' ];then
          echo $cmd | sed "s;echo ;sed -i \x22$REPLACE_POS i;;s;$;\x22 $file/Dockerfile.auto;" | $SHELL
        else
          echo $cmd | sed "s;echo ;sed -i \x22$REPLACE_POS i;;s;$;\x22 $file/Dockerfile.auto;"
        fi
      done
    done

    sed -i '/DOCKERFILE_INSTALL_USER/d' $tgt/Dockerfile.auto

  done < <(find $HOME/$ENV_REPO -mindepth 1 -type d | grep -vP '\.git|docker-log|mnt' | grep $OS_VERSION)

}

main(){
  ENV_REPO=$1;shift
  DEBUG=$1;shift

  if [ "$DEBUG" = '--debug' ];then
    SHELL=: #なんもしない
  else
    SHELL=bash #じっこうする
  fi

  [ -z $ENV_REPO ] && usage

  export -f execute
  find $HOME/$ENV_REPO -mindepth 1 -type d | grep -vP '\.git|docker-log|mnt' | grep -Po '[a-z]+(-[0-9]{1,}){1,}' | sort | uniq | while read tgt;do execute $tgt ;done
}

main "$@"
<file_sep>- zip関数javaないからから始まる色々な言語実装例
  - https://teratail.com/questions/28356

- 動作確認一括チェックスクリプト
  - https://bitbucket.org/megmogmog1965/java8streamapi/src/develop/src/java8streamapi/LastProcess.java

- collection java のまとめ
  - https://static.rainfocus.com/oracle/oow16/sess/1462848741026001JnVD/ppt/CollectorsFair_J1_2016_final.pdf

- これでファイルヘッダ項目からクラス生成できる。文字列組み立てで。collection.joiningとかでパタン生成。
  - https://qiita.com/ukiuni@github/items/2c55a64f45272f4faef5
  - リフレクションapiでjvmにロード済みかどうか判定できる。
  - beanクラス動的作成可能
  - https://chibash.github.io/essays/jvst.html
  - ロード済みであれば、動的生成されたメンバーないしメソッドを使ってstream処理などできそう。便利。

- 関数リストを引数にもらって、対象リストに対して加工して、結果をリスト in マップで返却。キーは関数名単位。

- マルチマップというのがあるのか便利。
  - partition byと相性良さけ
  - https://blog.devneko.net/2013/09/javamap.html?m=1
  - https://blog.y-yuki.net/entry/2016/10/03/003000


- unnestできてave出来たら、いいな
  - https://qiita.com/sano1202/items/64593e8e981e8d6439d3

- toCollectionがあるぞ
  - https://docs.oracle.com/javase/jp/8/docs/api/java/util/stream/Collectors.html

- このイメージで入れ子にしてunnestできそう
  - https://stackoverflow.com/questions/33253858/java-streams-group-a-list-into-a-map-of-maps/33254512


- ダイナミックjava したい 複数の引数が行けるか。list map 行けるか

  - https://m-shige1979.hatenablog.com/entry/2017/02/08/080000
  - https://docs.oracle.com/javase/jp/6/api/java/lang/Class.html#newInstance()
  - https://qiita.com/KeithYokoma/items/9e692808095acf560bc9
  - https://itsakura.com/java-reflect
  - https://teratail.com/questions/11369

- javaからpython呼び出ししたい
  英語を日本語にしたい
  - https://qiita.com/ota-meshi/items/76f4a65e9bd2fe0e2f68
  - http://www.asnm4.com/2019/06/python%E3%81%8B%E3%82%89google-translate%E3%82%92%E4%BD%BF%E3%81%86/


- lsなどの実行結果に対して集合演算ハンディにしたい

  - https://nim-lang.org/docs/sets.html

- 変数宣言でvarが変更可能で、letが変更不可。javascriptみたいな雰囲気。

```
var a = toCountTable("aaabbc")
let b = toCountTable("bcc")
a.merge(b)
doAssert a == toCountTable("aaabbbccc")
```

- nim 多値タプルの配列はtable変換すると、ハッシュエントリになる。便利。Pythonの変換と同じ。

- nim 多値引数受け取れる。
  - https://nim-lang.org/docs/tables.html#basic-usage-table

- ロゼッタコード
  - https://rosettacode.org/wiki/Permutations
- csharp Linux 導入
  - https://banikojp.blogspot.com/2018/04/linuxc.html?m=1

- sudachi 導入
  - https://kurage.cc/blog-sudachi/
  - https://github.com/WorksApplications/Sudachi
- elasticsearch Kibana Kuromori
  - https://mattintosh.hatenablog.com/entry/20190205/1549371581

- perl タグクラウド
  - http://www2u.biglobe.ne.jp/~MAS/perl/waza/tagcloud.html

- go api 検索エンジン
  - https://github.com/astaxie/build-web-application-with-golang/blob/master/ja/preface.md
  - https://github.com/tenntenn/goweb-book/blob/master/README.md
  - https://github.com/tenntenn/qiitaexporter/blob/master/README.md
  - https://future-architect.github.io/articles/20200327/

- go
  - https://schoo.jp/teacher/2869

- python 入れ子

2つ目のforを後ろに持ってきて、式を前で受ける。

```
arr = [[1,2,3], [4,5,6], [7,8,9]]
[i for j in arr for i in j]
```


- perl このパターンマッチは色々応用できそうな気がする
  - https://perldoc.jp/variable/%24%5EN

- python lambdaと内包式の使い方を行列データ扱うときで比較したい。自作関数入れられるかどうか。
  - https://note.nkmk.me/python-list-comprehension/

- c# チュートリアル
  - https://docs.microsoft.com/ja-jp/learn/paths/csharp-first-steps/?WT.mc_id=docs-twitter-machiy

- Elmoとword2vec
  - https://speakerdeck.com/tagucci/elmo-for-searching-similar-keywords

- javascript最近のやつ
  - https://future-architect.github.io/typescript-guide/

- JavaScript 型変換
  - https://mtane0412.com/convert-array-to-object-using-reduce/

- JavaScript でgroup by はfindとreduceのコンボかmapとhashのコンボどっちかなのかな。

- JavaScript ハマりそう
  - https://www.webprofessional.jp/map-reduce-functional-javascript/

- 型変換に使えそう
  - https://ginpen.com/2018/12/23/array-reduce/

- perlでサブマッチ抜き出すことなどをしたかった

- nodejs sqlite3連携　標準入力からファイル名複数配列で受け取って、fsに渡す。
  - https://qiita.com/shirokuman/items/509b159bf4b8dd1c41ef

- https://www.gesource.jp/weblog/?p=8289

- js mapでシェルげいしておく。
  - https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/map

- ruby の変数一覧
  - https://docs.ruby-lang.org/ja/latest/doc/symref.html

- pythonのzipは使い慣れておきたい。

- 可視化ツール選定しておきたい。用途別に。

- https://blog.insightdatascience.com/ai-for-3d-generative-design-17503d0b3943
  - 機械学習のイメージ湧きやすい。

- 逆引きマスタを大量に作成する必要がありそうだ。

- 検索条件を分解した際の出現位置の差をどう導くかなど。
  セミコロンの左側単位での前回行の右側との差が前回行の文字列の長さに等しいか等しくないかで区別できる。いやできないな。
  検索条件を分解したときのグラム数を求めておく必要がある。
  セミコロンの左側単位でセミコロンの右側の数字が連続しているものが完全一致。欠番していないかチェックする。インデックス時は、文章単位、グラム順に一意の番号を振ればこのロジックはいける。
- 分解は2つあって
  - 検索条件を分割するのとテーブルデータを作成する際にgram化するのと。など。

- n gram でないときは文字列の長さも必要か。

- 自然言語処理　フロー乗ってて　導入は良さげ
  - https://towardsdatascience.com/named-entity-recognition-ner-with-bert-in-spark-nlp-874df20d1d77

- graphqの自動テスト
  - https://qiita.com/pocke/items/bfe120f07bd8d94724a7

- 文脈を意識しないといけんのだな。わかってきたぞ。テーブル持つときは、元文書IDの参照を持たせてあげる。

- バイグラム
  - http://gihyo.jp/dev/serial/01/make-findspot/0005?page=2
  - https://qiita.com/greymd/items/3515869d9ed2a1a61a49#%23%23%20%E5%85%A8%E6%96%87%E6%A4%9C%E7%B4%A2%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%B3%E3%82%92%E4%BD%9C%E3%82%8B

- 入力単語に対する類義語の距離は分析関数のレンジでエミュできる。どこまでのサジェストをするか引数にレンジ値を渡して動的に変更できる。

- word2vecインストール
  - https://qiita.com/kenta1984/items/93b64768494f971edf86

- perl 論理えんざし
  - https://tutorial.perlzemi.com/blog/20100816136168.html

- perlのオプションCSDで日本語扱える
  - https://qiita.com/ohtsuka1317/items/92c339a65533e1e6c6fc
- perl 実戦的
  - https://qiita.com/teckl/items/98de382787401d2392c3

- perl 部分マッチ文字列抜き出し
  - https://qiita.com/ngyuki/items/d5dde70cf2de952cfb87

- gpu大切なんだな
  - https://ainow.ai/2020/03/11/183804/

- errorログを抜いてtrsに書き込みたい。

- ていしゅうきエラー監視ジョブはtrsから対象抜き出して自動復旧したい。

- perl 変数
  - awkのセパレーターと比較してちょっと整理しておく。
  - https://perldoc.jp/index/variable

- bash からの書き換えはrubyでも楽しそう
  - https://qiita.com/jnchito/items/dedb3b889ab226933ccf
- ruby ファイル読み込み
  - https://www.buildinsider.net/language/rubytips/0021
- ruby map関数
  - https://uxmilk.jp/21695
- ruby group by
  - https://docs.ruby-lang.org/ja/latest/method/Enumerable/i/group_by.html
  - https://doruby.jp/users/pe/entries/ruby%E3%81%A7%E9%85%8D%E5%88%97%E3%81%8B%E3%82%89%E9%87%8D%E8%A4%87%E3%81%99%E3%82%8B%E5%80%A4%E3%82%92%E6%8A%BD%E5%87%BA%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95%E3%82%92%E6%8E%A2%E3%81%97%E3%81%9F%E9%9A%9B%E3%81%AB%E8%A6%8B%E3%81%A4%E3%81%91%E3%81%9Fgroup_by%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E3%81%8C%E4%BE%BF%E5%88%A9%E3%81%A0%E3%81%A3%E3%81%9F
- ruby 配列メソッド
  - https://qiita.com/jnchito/items/118cca7ac2f01e1ca6a0
- python小技
  - https://qiita.com/Namibillow/items/954c7f9f53682d6dd9c9

- sedぽくぅて面白いレーベン
  - https://ja.m.wikipedia.org/wiki/%E3%83%AC%E3%83%BC%E3%83%99%E3%83%B3%E3%82%B7%E3%83%A5%E3%82%BF%E3%82%A4%E3%83%B3%E8%B7%9D%E9%9B%A2

- bashスクリプトpythonに書き換えるか。while read で変数外上書きされないのが忘れた頃にハマるんだよな。

- 楽しそうだないいなこれ。word2vec
  - https://qiita.com/Hironsan/items/11b388575a058dc8a46a

- この環境ディレクトリ自体を学習題材に使用しよう。

- 自然言語処理のデータセット。コマンド乗ってる。
  - https://towardsdatascience.com/improving-sentence-embeddings-with-bert-and-representation-learning-dfba6b444f6b

- 環境ディレクトリ名を与えれば、全てできるようにしておきたい。

- 名寄せの背景分かり易い
  - https://pompom168.hatenablog.com/entry/2019/08/09/144054

- 自然言語処理データセット
  - https://qiita.com/daimonji-bucket/items/56143b2abbfadb4429af

- 言葉が難しいけどある単語にグループ値を振りたいための話。
  - https://qiita.com/daimonji-bucket/items/47f806624a5924f2d47b

- カフェラッテ。名寄せ。
  - https://buildersbox.corp-sansan.com/entry/2020/03/10/110000

- docker-composeの操作背景が分かり易い
  - https://qiita.com/sanpo_shiho/items/fc8082f3d303c04cca2e

- アプリのインストールはAPP_NAMEに依存しないように管理する。

- バージョン番号はハイフン数字1回以上のグループの1回以上の繰り返しで表現できる。

- アプリが複数個ある場合、バージョン番号がそれぞれに付随していないものを洗い出す。

- たしかバージョン番号を気にせず、常に最新をインストールするようなソフトもあったのでバージョン指定可能かどうかをまず確認した方がいいか。

- Repoからバージョン番号を気にしていないものを洗い出す。

- 元のDockerfileをDockerfile.asisにリネームして、Dockerfile.autoをDockerfileにリネームして一時的にビルドファイルをスイッチできるようにする。
引数の順序入れ替えて元に戻せるようにする。スイッチ元とスイッチ先を指定した方いいか。

- jqの強みはエスケープ機能が関数として組まれていることかもしれない。

- 検索ワードをストップワードに自動追加するしくみがほしい

- vmコマンドライン操作便利
  - https://qiita.com/tukiyo3/items/5ecea7f95cb961f07194

- ネットワークのパケット送受信量を計測
  - https://qiita.com/suin/items/d4428e65a2cc1d956581

- プロセスの起動時刻を調査
  - https://qiita.com/todaemon/items/82edbad20e37039d5162

- 便利そう
  - https://qiita.com/usiusi360/items/7b47be9d0ab5b1acd608


- プロセスId単位でプロセスの起動日時を控える。対象のプロセスidが検索に引っかからないなら、プロセス終了起動時刻を取得。
  - https://qiita.com/isaoshimizu/items/ee555b99582f251bd295

- ファイルの詳細情報を取得するコマンド。更新頻度出すのに使えそう。
  - https://qiita.com/reoring/items/275ae83dfaa65bac568c

- コンテナ手動かすやつ
  - https://www.google.com/amp/s/employment.en-japan.com/engineerhub/entry/2019/02/05/103000%3Famp%3D1

- レポに存在するファイルが環境ディレクトリ内のDockerfile内に存在するかチェックし、なければリネームする。
- docker composeはローカルイメージ見てくれる
  - https://qiita.com/zembutsu/items/9e9d80e05e36e882caaa

- flutendのサンプル
  - https://www.jkawamoto.info/blog-ja/docker-compose-for-logging-service/
- oracleとsqlserver とibmもうちょいいいい感じにしておく。

- neckなのはプログラムがバイナリ提供のものを使用しているのか、ソースからビルドしているものなのかを区別していないこと。レポジジかえればいいか。makeがあるかないかでくべつできる。


- Dockerfile.sub Dockerfileは環境ﾃﾞｨﾚｸﾄﾘを他環境からこぴっておしまいになり力尽きている際には以下のような感じで初期化しておく

```
>Dockerfile.sub
>Dockerfile
```

- rubyでxmlファイル処理するコマンドまとめる。

- 各環境ディレクトリの引数を一元管理するためのマークダウンファイルが欲しい。

- 適用されている値を一覧で管理したい。優先度を管理する。

- 必要十分条件にするためには十分条件が必要。必要条件を定義しないといけない。十分条件は絞る必要はあまりない。必要条件はテキストマイニングと呼ばれるもので、規則を見つけてパタン定義。

- gradleはsdkからインスこすればいい。ホストからマウントする必要ない。

- プログラム更新頻度を調べたい。バージョン版数への関心を更新頻度に反比例させたい。メンテが大変になるので。

- プログラム単位でデフォルトバージョンを管理したい

- Dockerfile.subの実行順序
  - patchの名称はデフォルトでpre-patch
  1. pre-patch（あれば）
  2. install
  3. post-patch（あれば）
  4. config
  5. healthcheck

- もう事前ビルドしてマウントだな。
  - https://qiita.com/IanMLewis/items/badc55b5d8e188ace34a
  - repo管理しててよかった。

- MySQL build しくってたのがここでリカバレるかも。必要そうなライブラリが乗ってて、ビルド手順乗っている。
  - https://mroonga.org/ja/docs/install/others.html
  - mysqlは5.6!!

- テンプーレトにキャッシュ削除するスクリプトを追加する。
  - centos
    - https://easyramble.com/yum-clean-and-update.html
  - Ubuntu
    - https://qiita.com/SUZUKI_Masaya/items/1fd9489e631c78e5b007

- gpuを利用したディープラーニング
  - https://techable.jp/archives/118651

- rust製のコマンド
  - https://qiita.com/navitime_tech/items/c249269a3b47666c784b

- groongaのバージョン組み合わせ作れるだけ作ってみる

- ruby groonga
  - http://ranguba.org/ja/

- スクリプトに参照を持たせ始めるタイミングと処理順序を意識し始めるタイミングは同じことが改めてわかった。処理順序をファイルで管理する。ファイル名に縛られないために。

- ダイナミックリンクディレクトリのエントリディレクトリをシステム単位でキャッシュ作成対象として認識させておく際に、

```
/etc/ld.conf.d/プロセス名.conf
```
といった名称で、

例えば、

```

/etc/ld.conf.d/postgres.conf
```

のように。環境個別に設定を利かすのがよさげ。記載するプロセス名はscript-envに格納しているディレクトリ名から選択する。

- カンマ区切り文字列をbashでunnestがレコードの意味付けを保ったままできたので、sketchに投入しておく

- 各環境ディレクトリ特有の動作確認スクリプトをヘルスチェックスクリプトととしてレポに登録しておきたい。リグレッションで使い勝手いいように。
  - 名前はconfirmじゃなくてhealthcheckがいいか。

- windowsパッチファイルで複数ファイルに対してサクラエディタ のマクロよく適用させているから、まとめておきたい。visualbox上で再現撮っておきたい。

- Postgres-pgroongaにルビーのメモリに関するスクリプトあった。

- makeのマルチスレッド数こんな感じで制御するのを変数化して、デフォルトと環境個別で制御したい。

make -j$(grep '^processor' /proc/cpuinfo | wc -l)

- コンテナの使用頻度を出したい。それをリスト化してスケジューリングしたい。常に全てのイメージができている必要はないので。

- 各OSコンテナにvim,dev,tool,networkが入ったコンテナを用意しておく。

- メンテスクリプトはその場限りのパッチには先頭にPを運用していくパッチには先頭にOをつけ、分類する。

- md-step.mdにビルド時間も抽出して埋め込みたい。

- 遅延時間を表示したい

- gron commandの使い方。
  - mediamからサジェストきた。面白い。
  - JSON Processing Pipelines with gron
  - https://medium.com/capital-one-tech/json-processing-pipelines-with-gron-6fbd531155d7

- script-repoは肥大化していく一方なので、各環境ディレクトリごとに必要なものをインストールし終えたら、削除するようにする。
  - 初回ログイン時にscript-repoを再クローンして差分更新を行えば、ディスクイメージは不用意に増やさずに、差分リフレッシュができる。💩

- oracleでユーザー定義ファンクションで任意の文章を受け取ってjava拡張で組み込んだMecab解析結果をコレクションとして返却するファンクションを作成したい。
  - 便利そう。おもいついた。

- twiiter認証文言テンプーレトこれ試してみようかな→rejectされたので、とても悲しい。メールアドレス１こ残っているけど大切にしないとなー。とにかく悲しい。熟考してから送信すること。
  - https://note.com/mogya/n/nbd9a720f8a5b

- sqlserver bulk imort
  - https://qiita.com/ExA_DEV/items/2d0cdff5bdd43591f7ce

- flockコマンドで排他制御できる実例 プロセスがシーケンシャルに起動されていることがflockコマンドのおかげでわかる
  - https://b.ueda.tech/?post=02709

- phpバインドもあるgroonga
  - https://www.clear-code.com/blog/category/groonga/2.html

- ruby バインドのrrooongaもあるそう
  - https://qiita.com/groonga/items/7642e9e22bcda4b4327f

- perlのflockとbashのflock
  - http://perl.no-tubo.net/2006/10/22/flock%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%9f%e5%bc%b7%e5%9b%ba%e3%81%aa%e6%8e%92%e4%bb%96%e5%87%a6%e7%90%86/

- perlテストデータ
  - http://tsucchi.github.io/slides/yokohamapm/11/

- json日本語データ作成はpython経由がハンディかな
  - https://qiita.com/ohbarye/items/452fefa2be5d56268b50

- elasticsearch 日時指定検索
  - http://togattti.hateblo.jp/entry/2017/08/17/174953

- elasticsearch import export ダンプコマンド別途あり

  - https://qiita.com/nakazii-co-jp/items/3199433d685d0600c6d6

  - https://qiita.com/datake914/items/2313894c684a7cba992c

- compose用のレポジトリ作成しようかな
  - script-jam
  - https://github.com/YoshinoriN/docker-redmine-orchestration

- oracle import export mysqlと同じような仕組みだろう
  - https://qiita.com/toshihirock/items/86931e3c52dc47287dd2

- oracleのインポートエクスポートまとめる

- sqlserverのインポートエクスポートまとめる

- Nodejsとgroonga連携まとめる

- コピペチェッカー使い方調べる

- postgresへdbeaverから繋ぐ

- マイリーダー用にjsonファイルからマークダウンファイルに変換するコマンド必要なので、
スクラッチから作る。
  - https://gist.github.com/mignonstyle/083c9e1651d7734f84c99b8cf49d57fa

- 検索スピード上げるツール
  - https://qiita.com/youwht/items/7f5686a30eed16864954
  - Linux版はいけなかったので、wikiないし辞書データをgroongaに投入してコマンドで引けるようにする。

- ビルド対象を保持期間日数で管理するようにする

- 最終的には環境をダイナミックに作りたい。特にライブラリの依存関係。ソースからビルドが安全か。

  - OS名とそのバージョン　単一
  - アプリとそのバージョン　単一ないし複数
  - メモリ量　システムデフォルトとコンテナ個別
  - ユーザー名　システムデフォルトとコンテナ個別
<file_sep># 参考文献

http://hro-blog.blogspot.com/2016/02/linuxusb.html
https://qiita.com/miyamotok0105/items/2baf80cf1c300503bf5d

基本rootユーザーで作業

# マシンにusbを差し込む

# usbのデバイス名を確認する

# パーテションALL削除

洗い替えの運用のみ

パーティションの先頭番号から削除しないこと

削除すると以下のように照合順序がおかしいことになる

```
[root💜centos (金  1月 17 07:42:25) /home/aine/script_env/java]$fdisk /dev/sda1
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


コマンド (m でヘルプ): p

Disk /dev/sda1: 7758 MB, 7758955008 bytes, 15154209 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
Disk label type: dos
ディスク識別子: 0x6e697373

パーティションテーブルに見えません
おそらく間違ったデバイスを選択しています。

デバイス ブート      始点        終点     ブロック   Id  システム
/dev/sda1p2   ?  1917848077  2462285169   272218546+  73  不明
/dev/sda1p3   ?  1818575915  2362751050   272087568   2b  不明
/dev/sda1p4   ?  2844524554  2844579527       27487   61  SpeedStor

パーティションテーブル項目がディスクの順序と一致しません

コマンド (m でヘルプ): 
```


pコマンド

dコマンド

wコマンド

```
$fdisk /dev/sda1
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


コマンド (m でヘルプ): p

Disk /dev/sda1: 7758 MB, 7758955008 bytes, 15154209 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
Disk label type: dos
ディスク識別子: 0x6e697373

パーティションテーブルに見えません
おそらく間違ったデバイスを選択しています。

デバイス ブート      始点        終点     ブロック   Id  システム
/dev/sda1p2   ?  1917848077  2462285169   272218546+  73  不明

コマンド (m でヘルプ): 
コマンド (m でヘルプ): d
Selected partition 2
Partition 2 is deleted

コマンド (m でヘルプ): 
コマンド (m でヘルプ): w
パーティションテーブルは変更されました！

ioctl() を呼び出してパーティションテーブルを再読込みします。

WARNING: Re-reading the partition table failed with error 22: 無効な引数です.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
ディスクを同期しています。
```


# パーティション作成

```
$fdisk /dev/sda1
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


コマンド (m でヘルプ): p

Disk /dev/sda1: 7758 MB, 7758955008 bytes, 15154209 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
Disk label type: dos
ディスク識別子: 0x6e697373

デバイス ブート      始点        終点     ブロック   Id  システム

コマンド (m でヘルプ): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
パーティション番号 (1-4, default 1): 1
最初 sector (2048-15154208, 初期値 2048): 
初期値 2048 を使います
Last sector, +sectors or +size{K,M,G} (2048-15154208, 初期値 15154208): 
初期値 15154208 を使います
Partition 1 of type Linux and of size 7.2 GiB is set

コマンド (m でヘルプ): p

Disk /dev/sda1: 7758 MB, 7758955008 bytes, 15154209 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
Disk label type: dos
ディスク識別子: 0x6e697373

デバイス ブート      始点        終点     ブロック   Id  システム
/dev/sda1p1            2048    15154208     7576080+  83  Linux

コマンド (m でヘルプ): w
パーティションテーブルは変更されました！

ioctl() を呼び出してパーティションテーブルを再読込みします。

WARNING: Re-reading the partition table failed with error 22: 無効な引数です.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
ディスクを同期しています。
```


作成されているか確認

```
[root💜centos (金  1月 17 07:45:41) /home/aine/script_env/java]$fdisk -l

Disk /dev/nvme0n1: 500.1 GB, 500107862016 bytes, 976773168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
Disk label type: dos
ディスク識別子: 0x000114a2

  デバイス ブート      始点        終点     ブロック   Id  システム
/dev/nvme0n1p1   *        2048     7813119     3905536   83  Linux
/dev/nvme0n1p2         7813120    15624191     3905536   82  Linux swap / Solaris
/dev/nvme0n1p3        15624192   976758783   480567296   83  Linux

Disk /dev/sda: 7759 MB, 7759462400 bytes, 15155200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
Disk label type: dos
ディスク識別子: 0x04330c43

デバイス ブート      始点        終点     ブロック   Id  システム
/dev/sda1              63    15154271     7577104+   7  HPFS/NTFS/exFAT
```

# ファイルシステムタイプを変更


基本 ext4で。

```
$mkfs.ext4 /dev/sda1
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
474208 inodes, 1894276 blocks
94713 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=1939865600
58 block groups
32768 blocks per group, 32768 fragments per group
8176 inodes per group
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done 


```

# デバイスをマウント

ファイルシステムから操作できることを確認

```
$mount -t ext4 -w /dev/sda1 /mnt/usb1
$ls -la /mnt/usb1
合計 24
drwxr-xr-x. 3 root root  4096  1月 17 07:57 .
drwxr-xr-x. 3 root root  4096  1月 17 07:51 ..
drwx------. 2 root root 16384  1月 17 07:57 lost+found
```

# コピー元ディレクトリを/mntに作成

マウント先ディレクトリの一つ上からはusb1と表示される

```
$cd /mnt
$mkdir cp-src
$ll
合計 8
drwxr-xr-x. 2 root root 4096  1月 17 08:00 cp-src
drwxr-xr-x. 3 root root 4096  1月 17 07:57 usb1
```

# コピー元ディレクトリにコピー物を集める

```
$find /home/aine/Dow* -type f | grep 履歴書 | grep -v テンプレート | xargs -I@ cp @ /mnt/cp-src/
```

# rsyncでコピー


コピー前
```
$tree
.
|-- cp-src
|   |-- \350\201\267\345\213\231\345\261\245\346\255\264\346\233\270.pdf
|   `-- \345\261\245\346\255\264\346\233\270.pdf
`-- usb1
    `-- lost+found

3 directories, 2 files
```


コピー
```
$rsync -av cp-src usb1
sending incremental file list
cp-src/
cp-src/履歴書.pdf
cp-src/職務履歴書.pdf

sent 227,496 bytes  received 58 bytes  455,108.00 bytes/sec
total size is 227,245  speedup is 1.00
```

コピー後
```
$tree
.
|-- cp-src
|   |-- \350\201\267\345\213\231\345\261\245\346\255\264\346\233\270.pdf
|   `-- \345\261\245\346\255\264\346\233\270.pdf
`-- usb1
    |-- cp-src
    |   |-- \350\201\267\345\213\231\345\261\245\346\255\264\346\233\270.pdf
    |   `-- \345\261\245\346\255\264\346\233\270.pdf
    `-- lost+found

4 directories, 4 files
```
# usbをマシンから外す

# 再び差し込む


# ファイルViewerで確認

コピーしたファイルないしディレクトリが存在しているか確認

<file_sep>#!/bin/bash

usage(){
  cat <<EOS
Usage:
  $0 script-env
EOS
exit 0
}

REPO="$1";shift

[ -z $REPO ] && usage

while read tgt;do

  #確認
  echo $HOME/$REPO/$tgt/Dockerfile
  #作成
  touch $HOME/$REPO/$tgt/user.md
  >$HOME/$REPO/$tgt/user.md
  #抽出
  sed -n '/RUN groupadd/,/root/p' $HOME/$REPO/$tgt/Dockerfile >$HOME/script-repo/script-env-$tgt-user.sh
  #置換
  sed -i -r 's;RUN\s{1,};;g' $HOME/script-repo/script-env-$tgt-user.sh
  #挿入
  sed -i '1i#!/usr/bin/env bash' $HOME/script-repo/script-env-$tgt-user.sh
  #権限付与
  chmod 755 $HOME/script-repo/script-env-$tgt-user.sh
  #リネーム
  echo $HOME/script-repo/script-env-$tgt-user.sh | xargs -I@ bash -c 'echo mv @ $(echo @ | perl -pe "s;(.*-[0-9]+);\1-script-env;g;s;/script-env-;/;;s;script-env;install;g")' | bash

done < <(ls -l $HOME/$REPO | grep -P '^d' | awk '{print $9}' | grep -v docker-log)

#追記
while read tgt;do

  echo $tgt
  #FILE=$(echo $tgt | perl -pe "s/(?<=[0-9])-script-env//g;s;-user\.sh;/user\.md;g;s/script-repo/$REPO/g")
  ##確認
  #echo $FILE
  ##作成
  #touch $FILE
  #>$FILE
  ##抽出・書込
  #grep -oP '\-g [0-9]+ [a-zA-Z]+|\-g [a-zA-Z]+ -u [0-9]+ [a-zA-Z]+|[a-zA-Z]+_pwd' $tgt | perl -pe 's/.*-u //g;s/-g //g;s/ /\n/g' | xargs -n5 | perl -pe 's/root_pwd/0 root 0 root root_pwd/g' | \
  #  sed -r '/^$/d;s;^|$| ;|;g;1i|ユーザーＩＤ|ユーザー名|グループＩＤ|グループ名|パスワード|' | sed '2i|:-:|:-:|:-:|:-:|:-:|' >$FILE

done < <(find $HOME/script-repo | grep user)
<file_sep># 参考文献

https://sites.google.com/a/chromium.org/chromedriver/getting-started</br>
https://www.ytyng.com/blog/ubuntu-chromedriver/</br>
https://developers.google.com/web/updates/2017/04/headless-chrome?hl=ja</br>
https://dev.classmethod.jp/etc/chromium-ubuntu-headless/</br>
https://worklog.be/archives/3422</br>
https://vaaaaaanquish.hatenablog.com/entry/2017/06/06/194546</br>

# dockerイメージ作成

```
time docker build -t centos-7-6-18-10-selenium-chromium . | tee log
```

# dockerコンテナ作成

```
docker run --privileged --shm-size=12gb -v /run/udev:/run/udev -v /run/systemd:/run/systemd -v /tmp/.X11-unix:/tmp/.X11-unix -v /var/lib/dbus:/var/lib/dbus -v /var/run/dbus:/var/run/dbus -v /etc/machine-id:/etc/machine-id -v /etc/localtime:/etc/localtime -v /sys/fs/cgroup:/sys/fs/cgroup:ro -itd --name centos-7-6-18-10-selenium-chromium centos-7-6-18-10-selenium-chromium
```

# dockerコンテナ潜入

```
docker exec --user kuraine -it selenium-chromium /bin/bash
```

# seleniumをpip3コマンドでいんすこ

rootユーザーで実行

```
$pip3 install --upgrade pip

$pip3 install selenium
```

# 動作確認

カレントディレクトリにtest.pngが保存されるので、VSCODEで開くと見れる!

```
#!/usr/local/bin/python3
# -*- coding: utf-8 -*-

import sys
import time
sys.path.append('/usr/local/lib/python3.7/site-packages')
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--disable-gpu')
options.add_argument('--window-size=1280,1024')
driver = webdriver.Chrome('/usr/local/bin/chromedriver',chrome_options=options)

driver.get('http://www.google.com/')

driver.save_screenshot('test.png')

driver.quit()
```


![](./1.png)
<file_sep># phpインスト

```
sudo yum -y install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm && \
 sudo yum -y install --enablerepo=remi,remi-php73 php php-devel php-mbstring php-pdo php-gd php-xml php-mcrypt
```

# 参考文献
https://mattintosh.hatenablog.com/entry/20140815/1408057200
https://www.activestate.com/products/komodo-ide/download-ide/#edit
https://shimz.me/blog/category/komodo-edit

IME日本語入力辞書登録
http://tatsu-web.com/jisyo/
日本語から英語に
https://code.google.com/archive/p/google-ime-user-dictionary-ja-en/
日本語からHTMLタグに
https://gist.github.com/suneo3476/5462528
VIMからIMEそうさ
https://qiita.com/ka_/items/dad955fe7423318b7dae

# Dockerfileよりイメージ作成
```
time docker build -t centos-7-6-18-10-php-komodo . | tee log
```

# dockerコンテナ削除
```
docker ps -qa | xargs -I@ bash -c 'docker stop @ && docker rm @'
```

# dockerイメージ削除
```
docker images | awk '$1=="<none>"{print $3}' | xargs -I@ docker rmi @
```

# dockerコンテナ作成
```
docker run --privileged --shm-size=8gb --name centos-7-6-18-10-php-komodo -itd -v /run/udev:/run/udev -v /run/systemd:/run/systemd -v /tmp/.X11-unix:/tmp/.X11-unix -v /var/lib/dbus:/var/lib/dbus -v /var/run/dbus:/var/run/dbus -v /etc/machine-id:/etc/machine-id centos-7-6-18-10-php-komodo
```

# dockerコンテナ潜入
```
docker exec -it centos-7-6-18-10-php-komodo /bin/bash
```

# dockerコンテナ潜入後実行

```
$cd ~/Komodo-Edit-11.1.1-18206-linux-x86_64
$./install.sh
Enter directory in which to install Komodo. Leave blank and
press 'Enter' to use the default [~/Komodo-Edit-11].
Install directory:


==============================================================================
Komodo Edit 11 has been successfully installed to:
    /home/php/Komodo-Edit-11

You might want to add 'komodo' to your PATH by adding the
install dir to you PATH. Bash users can add the following
to their ~/.bashrc file:

    export PATH="/home/php/Komodo-Edit-11/bin:$PATH"

Or you could create a symbolic link to 'komodo', e.g.:

    ln -s "/home/php/Komodo-Edit-11/bin/komodo" /usr/local/bin/komodo

Documentation is available in Komodo or on the web here:
    http://docs.activestate.com/komodo

Please send us any feedback you have through one of the
channels below:
    <EMAIL>
    irc://irc.mozilla.org/komodo
    https://github.com/Komodo/KomodoEdit/issues

Thank you for using Komodo.
==============================================================================
```

# komodo起動

```
[php@d46d7bac3844 ~]$komodo
[1] 535
```

![](./1.png)
![](./2.png)
![](./3.png)
![](./4.png)
![](./5.png)
![](./6.png)
<file_sep>[oracle19cr3](https://www.oracle.com/technetwork/jp/database/enterprise-edition/downloads/index.html)

[clob型のcollect集約関数の実装について](https://docs.oracle.com/cd/E82638_01/addci/using-user-defined-aggregate-functions.html#GUID-D7E77319-DC23-4CF0-B746-27ED7BE9240D)

[超高速な機械学習を Oracle Database で実現！](https://www.slideshare.net/oracle4engineer/hikalab-20171026)

- sqlplusから接続
```
sqlplus sys/ORACLE_PWD@ORCLCDB as sysdba
sqlplus sys/ORACLE_PWD@ORCLPDB01 as sysdba
sqlplus sys/ORACLE_PWD@ORCLPDB02 as sysdba
sqlplus user01/ORACLE_PWD@ORCLPDB01
sqlplus user02/ORACLE_PWD@ORCLPDB01
sqlplus user01/ORACLE_PWD@ORCLPDB02
sqlplus user02/ORACLE_PWD@ORCLPDB02
sqlplus user03/ORACLE_PWD@ORCLPDB02
```

ないしは

```
sqlplus sys/ORACLE_PWD@localhost:1521/ORCLCDB as sysdba
sqlplus sys/ORACLE_PWD@localhost:1521/ORCLPDB01 as sysdba
sqlplus sys/ORACLE_PWD@localhost:1521/ORCLPDB02 as sysdba
sqlplus user01/ORACLE_PWD@localhost:1521/ORCLPDB01
sqlplus user02/ORACLE_PWD@localhost:1521/ORCLPDB01
sqlplus user01/ORACLE_PWD@localhost:1521/ORCLPDB02
sqlplus user02/ORACLE_PWD@localhost:1521/ORCLPDB02
sqlplus user03/ORACLE_PWD@localhost:1521/ORCLPDB02
```

実行例
```
[oracle@30bf33351a1f ~]$sqlplus sys/ORACLE_PWD@localhost:1521/ORCLCDB as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on 土 9月 14 21:47:03 2019
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
に接続されました。
SYS@localhost:1521/ORCLCDB> show con_name

CON_NAME
------------------------------
CDB$ROOT
SYS@localhost:1521/ORCLCDB> show pdbs

       CON_ID CON_NAME                       OPEN MODE  RESTRICTED
------------- ------------------------------ ---------- ----------
            2 PDB$SEED                       READ ONLY  NO
            3 ORCLPDB01                      READ WRITE NO
            4 ORCLPDB02                      READ WRITE NO
SYS@localhost:1521/ORCLCDB> Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0との接続が切断されました。
```
<file_sep>#!/usr/bin/env bash

usage(){
cat <<EOS
Usage:
  $0 script-env
  or
  $0 script-env --debug
EOS
exit 0
}

execute(){

  OS_VERSION=$1;shift
  EDITOR=$1;shift

  [ -z $OS_VERSION ] && usage

  OS_NAME=$(echo $OS_VERSION | perl -pe 's/^([a-z]+)-(.*)$/\1/g')

  IMAGE_VERSION=$(echo $OS_VERSION | perl -pe 's/^([a-z]+)-(.*)$/\2/g')

  if [ "centos" == $OS_NAME ];then
    IMAGE_VERSION=$(echo $IMAGE_VERSION | perl -pe 's/-/\./;s/-/\./;s/-//;')
  fi

  if [ "ubuntu" == $OS_NAME ];then
    IMAGE_VERSION=$(echo $IMAGE_VERSION | perl -pe 's/-/\./;')
  fi

  TEMPLATE_FILE=$(find $HOME/$ENV_REPO -name "docker-template-Dockerfile-$OS_NAME")

  EDITOR_LIST="$(ls $HOME/script-env/env-editor-* | grep $OS_NAME | awk -v FS='-' -v OFS='-' '{$1="";$2="";$3="";$4="";print $0}' | sed -r 's/^-{1,}//g' | sort | uniq)"

  while read tgt;do

    #テンプレートファイルのDOCKERFILE_EDITORの置換
    for n in "$EDITOR_LIST";do
      #エディタが決まるまでは、ちとめんどい。
      cmd="$(echo "echo" $tgt "| grep -Po '("$(echo $n | tr ' ' '|')")$'")"
      EDITOR="$(echo $cmd | $SHELL)"
      if [ "$SHELL" = 'bash' ];then
        :
      else
        echo $EDITOR $cmd
      fi

      if [ -z "$EDITOR" ];then
        #echo 森鴎外いない
        #vimの場合またはenv-editor未定義かつ明示的にvimと環境ディレクトリに明記していない場合
        cmd=$(echo "sed -i '/DOCKERFILE_EDITOR/d' $tgt/Dockerfile.auto")
        if [ "$SHELL" = 'bash' ];then
          echo $cmd | $SHELL
        else
          echo $cmd
        fi
      else
        #echo 森鴎外
        #env-editor定義の環境ディレクトリの場合
        cmd=$(echo "sed -i '/DOCKERFILE_EDITOR/r $(find $HOME/$ENV_REPO -maxdepth 1 -type f -name "env-editor*" | grep $OS_NAME | grep -P "$EDITOR$")' $tgt/Dockerfile.auto")
        if [ "$SHELL" = 'bash' ];then
          echo $cmd | $SHELL
        else
          echo $cmd
        fi
      fi

      #あればあとしまつ
      cmd=$(echo "sed -i '/DOCKERFILE_EDITOR/d' $tgt/Dockerfile.auto")
      if [ "$SHELL" = 'bash' ];then
        echo $cmd | $SHELL
      else
        echo $cmd
      fi
    done

  done < <(find $HOME/$ENV_REPO -type d | grep -v docker-log | grep $OS_VERSION | grep -vP mnt)

}

main(){
  ENV_REPO=$1;shift
  DEBUG=$1;shift

  if [ "$DEBUG" = '--debug' ];then
    SHELL=: #なんもしない
  else
    SHELL=bash #じっこうする
  fi

  [ -z $ENV_REPO ] && usage

  export -f execute
  find $HOME/$ENV_REPO -mindepth 1 -type d | grep -vP '\.git|docker-log|mnt' | grep -Po '[a-z]+(-[0-9]{1,}){1,}' | sort | uniq | while read tgt;do execute $tgt ;done
}

main "$@"
<file_sep>- インストーラの配置先は
```
/usr/local/src
```

```
cd /usr/local/src
tar xvf  eclipse-inst-linux64.tar.gz
cd eclipse-installer/
/usr/local/src/eclipse-installer/eclipse-inst 1>launch-eclipse-installer.log 2>&1 &
```

- 実行バイナリがインストールされたあと

```
/usr/local/src/eclipse/eclipse 1>launch-eclipse.log 2>&1 &
```
<file_sep>#!/usr/bin/env bash

usage(){
cat <<EOS
Usage:
  $0 script-env
EOS
exit 0
}

BASE_URL="https://github.com/ukijumotahaneniarukenia"

ENV_REPO=$1;shift

[ -z $ENV_REPO ] && usage

MD_FILE_NAME=env-image.md
OUTPUT_FILE_NAME=app-env-image-list.md

>$HOME/$ENV_REPO/$OUTPUT_FILE_NAME

while read tgt;do
  OS_NAME=$(echo $tgt | perl -pe 's;.*/;;g;' | perl -pe 's/^([a-z]+)-(.*)$/\1/g')
  IMAGE_VERSION=$(echo $tgt | perl -pe 's;.*/;;g;' | perl -pe 's/^([a-z]+)-(.*)$/\2/g;s/((?:[0-9]+-){1,})(.*)/\1/;s/-$//;')

  if [ -s $tgt/$MD_FILE_NAME ];then
    {
        echo "[$(echo $tgt | perl -pe 's;.*/;;g')]($BASE_URL/$ENV_REPO/blob/master/$(echo $tgt | perl -pe 's;.*/;;g')/$MD_FILE_NAME)"
        cat $tgt/$MD_FILE_NAME | perl -pe 's/.*=//g'
    } | xargs
  else
    if [ "centos" == $OS_NAME ];then
      IMAGE_VERSION=$(echo $IMAGE_VERSION | perl -pe 's/-/\./;s/-/\./;s/-//;')
    fi

    if [ "ubuntu" == $OS_NAME ];then
      IMAGE_VERSION=$(echo $IMAGE_VERSION | perl -pe 's/-/\./;')
    fi
    echo "[$(echo $tgt | perl -pe 's;.*/;;g')]($BASE_URL/$ENV_REPO/blob/master/$(echo $tgt | perl -pe 's;.*/;;g')/$MD_FILE_NAME)" $IMAGE_VERSION
  fi \
  | perl -pe 's/(?<=md\)) /|/;s/^/|/;s/$/|/'
done < <(find $HOME/$ENV_REPO -mindepth 1 -type d | grep -vP '\.git|docker-log|mnt') | sort | sed '1i|環境ディレクトリ名|ベースイメージ|' | sed '2i|:--|:-:|' >>$HOME/$ENV_REPO/$OUTPUT_FILE_NAME
<file_sep># go言語のデータベースある

- https://godoc.org/modernc.org/ql

# 参考文献

- https://github.com/astaxie/build-web-application-with-golang/blob/master/ja/preface.md
<file_sep>GIT_VERSION=2-24-1
PYTHON_VERSION=3-7-4
APACHE_HTTP_VERSION=X-X-X
<file_sep>#!/bin/bash

usage(){
  cat <<EOS
Usage:
   $0 'script-repo.git' 'RUN cd /usr/local/src/script-repo && echo ./\$OS_VERSION-install-default-user.sh | bash' script-env
EOS
exit 0
}

TGT_WORD="$1";shift
EMBEDED_WORD="$1";shift
REPO="$1";shift

[ -z "$TGT_WORD" ] && usage
[ -z "$EMBEDED_WORD" ] && usage
[ -z "$REPO" ] && usage

while read tgt;do

  TGT_FILE=$(echo $tgt | tr ':' '\n' | sed -n '1p')
  TGT_ROWN=$(echo $tgt | tr ':' '\n' | sed -n '2p')

  printf "sed -i \x27%si%s\x27 %s\n" "$(($TGT_ROWN+1))" "$EMBEDED_WORD" "$TGT_FILE"

done < <(grep -n -P "$TGT_WORD" -r $HOME/$REPO | grep -P 'Dockerfile') | grep -vP "${0:2}"
<file_sep>#!/usr/bin/env bash

template(){
  n=$1;shift;
  l=$1;shift;
  DD=$(printf "%02d" $(($n%31)))
  HH=$(printf "%02d" $(($n/31)))
if [ $DD = '00' ];then
  cat <<EOS
10 $HH 31 * * $HOME/$ENV_REPO/docker-crontab-wrapper.sh 1 $l $SCRIPT_REPO
EOS
else
  cat <<EOS
10 $HH $DD * * $HOME/$ENV_REPO/docker-crontab-wrapper.sh 1 $l $SCRIPT_REPO
EOS
fi
}

usage(){
cat <<EOS
Usage:
  $0 script-env script-repo
EOS
exit 0
}

ENV_REPO=$1;shift
SCRIPT_REPO=$1;shift

[ -z $ENV_REPO ] && usage
[ -z $SCRIPT_REPO ] && usage

while read tgt;do
  echo $tgt | perl -pe 's;.*/;;' | perl -nlE 's/(?:[a-z]+(?:-[0-9]{1,}){1,})(.*)/\1/ and say' | tr '-' '\n' | sed /^$/d
done < <(find $HOME/$ENV_REPO -mindepth 1 -type d | grep -vP '\.git|docker-log|mnt') | sort | uniq | \
  while read tgt;do
    find $HOME/$ENV_REPO -mindepth 1 -type d | grep -vP '\.git|docker-log|mnt' | sed 's;.*/;;' | grep -P "(?<=-)$tgt" | xargs -n3 | nl | \
      while read n {a..c};do
        #echo $tgt $n $(eval echo '$'{a..c}|xargs -n1;)
        eval echo '$'{a..c}|xargs -n1 >docker-build-$tgt-list-$(printf "%02d" $n);
      done
  done

ls docker-build*list* | grep -vP 'list$' | nl | \
while read n l ;do
  template $n $l
done | sort -k3 >docker-crontab-BY-ONE-DAY
<file_sep># 参考文献

- https://www.mlab.im.dendai.ac.jp/~yamada/ir/MorphologicalAnalyzer/mecab.html

- https://javazuki.com/articles/mecab-install.html

- https://github.com/naoa/docker-termextract/blob/master/Dockerfile


- lsp-javaの設定参考例

  - https://blog.uedder.com/develope-java-with-vim.html


# 動作確認

```
$echo みなさんこんにちわ | mecab
みなさん	名詞,代名詞,一般,*,*,*,みなさん,ミナサン,ミナサン
こんにちわ	感動詞,*,*,*,*,*,こんにちわ,コンニチワ,コンニチワ
EOS
```


# java拡張の動作確認

```
$cd /usr/local/src/mecab-java-0.996
$java test
0.996
太郎	名詞,固有名詞,人名,名,*,*,太郎,タロウ,タロー
は	助詞,係助詞,*,*,*,*,は,ハ,ワ
二郎	名詞,固有名詞,人名,名,*,*,二郎,ジロウ,ジロー
に	助詞,格助詞,一般,*,*,*,に,ニ,ニ
この	連体詞,*,*,*,*,*,この,コノ,コノ
本	名詞,一般,*,*,*,*,本,ホン,ホン
を	助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
渡し	動詞,自立,*,*,五段・サ行,連用形,渡す,ワタシ,ワタシ
た	助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
。	記号,句点,*,*,*,*,。,。,。
EOS

	BOS/EOS,*,*,*,*,*,*,*,*
太郎	名詞,固有名詞,人名,名,*,*,太郎,タロウ,タロー
は	助詞,係助詞,*,*,*,*,は,ハ,ワ
二郎	名詞,固有名詞,人名,名,*,*,二郎,ジロウ,ジロー
に	助詞,格助詞,一般,*,*,*,に,ニ,ニ
この	連体詞,*,*,*,*,*,この,コノ,コノ
本	名詞,一般,*,*,*,*,本,ホン,ホン
を	助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
渡し	動詞,自立,*,*,五段・サ行,連用形,渡す,ワタシ,ワタシ
た	助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
。	記号,句点,*,*,*,*,。,。,。
	BOS/EOS,*,*,*,*,*,*,*,*
EOS

太郎	名詞,固有名詞,人名,名,*,*,太郎,タロウ,タロー
は	助詞,係助詞,*,*,*,*,は,ハ,ワ
二郎	名詞,固有名詞,人名,名,*,*,二郎,ジロウ,ジロー
に	助詞,格助詞,一般,*,*,*,に,ニ,ニ
この	連体詞,*,*,*,*,*,この,コノ,コノ
本	名詞,一般,*,*,*,*,本,ホン,ホン
を	助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
渡し	動詞,自立,*,*,五段・サ行,連用形,渡す,ワタシ,ワタシ
た	助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
。	記号,句点,*,*,*,*,。,。,。
EOS

太郎は二郎にこの本を渡した。
太郎	名詞,固有名詞,人名,名,*,*,太郎,タロウ,タロー
は	助詞,係助詞,*,*,*,*,は,ハ,ワ
二郎	名詞,固有名詞,人名,名,*,*,二郎,ジロウ,ジロー
に	助詞,格助詞,一般,*,*,*,に,ニ,ニ
この	連体詞,*,*,*,*,*,この,コノ,コノ
本	名詞,一般,*,*,*,*,本,ホン,ホン
を	助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
渡し	動詞,自立,*,*,五段・サ行,連用形,渡す,ワタシ,ワタシ
た	助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
。	記号,句点,*,*,*,*,。,。,。
EOS

	BOS/EOS,*,*,*,*,*,*,*,*
太郎	名詞,固有名詞,人名,名,*,*,太郎,タロウ,タロー
は	助詞,係助詞,*,*,*,*,は,ハ,ワ
二郎	名詞,固有名詞,人名,名,*,*,二郎,ジロウ,ジロー
に	助詞,格助詞,一般,*,*,*,に,ニ,ニ
この	連体詞,*,*,*,*,*,この,コノ,コノ
本	名詞,一般,*,*,*,*,本,ホン,ホン
を	助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
渡し	動詞,自立,*,*,五段・サ行,連用形,渡す,ワタシ,ワタシ
た	助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
。	記号,句点,*,*,*,*,。,。,。
	BOS/EOS,*,*,*,*,*,*,*,*
EOS

nbest:0
太郎	名詞,固有名詞,人名,名,*,*,太郎,タロウ,タロー
は	助詞,係助詞,*,*,*,*,は,ハ,ワ
二郎	名詞,固有名詞,人名,名,*,*,二郎,ジロウ,ジロー
に	助詞,格助詞,一般,*,*,*,に,ニ,ニ
この	連体詞,*,*,*,*,*,この,コノ,コノ
本	名詞,一般,*,*,*,*,本,ホン,ホン
を	助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
渡し	動詞,自立,*,*,五段・サ行,連用形,渡す,ワタシ,ワタシ
た	助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
。	記号,句点,*,*,*,*,。,。,。
EOS

nbest:1
太郎	名詞,固有名詞,人名,名,*,*,太郎,タロウ,タロー
は	助詞,係助詞,*,*,*,*,は,ハ,ワ
二	名詞,数,*,*,*,*,二,ニ,ニ
郎	名詞,一般,*,*,*,*,郎,ロウ,ロー
に	助詞,格助詞,一般,*,*,*,に,ニ,ニ
この	連体詞,*,*,*,*,*,この,コノ,コノ
本	名詞,一般,*,*,*,*,本,ホン,ホン
を	助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
渡し	動詞,自立,*,*,五段・サ行,連用形,渡す,ワタシ,ワタシ
た	助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
。	記号,句点,*,*,*,*,。,。,。
EOS

nbest:2
太郎	名詞,固有名詞,地域,一般,*,*,太郎,タロウ,タロー
は	助詞,係助詞,*,*,*,*,は,ハ,ワ
二郎	名詞,固有名詞,人名,名,*,*,二郎,ジロウ,ジロー
に	助詞,格助詞,一般,*,*,*,に,ニ,ニ
この	連体詞,*,*,*,*,*,この,コノ,コノ
本	名詞,一般,*,*,*,*,本,ホン,ホン
を	助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
渡し	動詞,自立,*,*,五段・サ行,連用形,渡す,ワタシ,ワタシ
た	助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
。	記号,句点,*,*,*,*,。,。,。
EOS

nbest:3
太郎	名詞,固有名詞,人名,名,*,*,太郎,タロウ,タロー
は	助詞,係助詞,*,*,*,*,は,ハ,ワ
二郎	名詞,固有名詞,一般,*,*,*,二郎,ニロウ,ニロー
に	助詞,格助詞,一般,*,*,*,に,ニ,ニ
この	連体詞,*,*,*,*,*,この,コノ,コノ
本	名詞,一般,*,*,*,*,本,ホン,ホン
を	助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
渡し	動詞,自立,*,*,五段・サ行,連用形,渡す,ワタシ,ワタシ
た	助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
。	記号,句点,*,*,*,*,。,。,。
EOS

nbest:4
太郎	名詞,固有名詞,地域,一般,*,*,太郎,タロウ,タロー
は	助詞,係助詞,*,*,*,*,は,ハ,ワ
二	名詞,数,*,*,*,*,二,ニ,ニ
郎	名詞,一般,*,*,*,*,郎,ロウ,ロー
に	助詞,格助詞,一般,*,*,*,に,ニ,ニ
この	連体詞,*,*,*,*,*,この,コノ,コノ
本	名詞,一般,*,*,*,*,本,ホン,ホン
を	助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
渡し	動詞,自立,*,*,五段・サ行,連用形,渡す,ワタシ,ワタシ
た	助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
。	記号,句点,*,*,*,*,。,。,。
EOS

nbest:5
太郎	名詞,固有名詞,地域,一般,*,*,太郎,タロウ,タロー
は	助詞,係助詞,*,*,*,*,は,ハ,ワ
二郎	名詞,固有名詞,一般,*,*,*,二郎,ニロウ,ニロー
に	助詞,格助詞,一般,*,*,*,に,ニ,ニ
この	連体詞,*,*,*,*,*,この,コノ,コノ
本	名詞,一般,*,*,*,*,本,ホン,ホン
を	助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
渡し	動詞,自立,*,*,五段・サ行,連用形,渡す,ワタシ,ワタシ
た	助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
。	記号,句点,*,*,*,*,。,。,。
EOS

nbest:6
太郎	名詞,固有名詞,人名,名,*,*,太郎,タロウ,タロー
は	助詞,係助詞,*,*,*,*,は,ハ,ワ
二	名詞,数,*,*,*,*,二,ニ,ニ
郎	名詞,一般,*,*,*,*,郎,ロウ,ロー
に	助詞,副詞化,*,*,*,*,に,ニ,ニ
この	連体詞,*,*,*,*,*,この,コノ,コノ
本	名詞,一般,*,*,*,*,本,ホン,ホン
を	助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
渡し	動詞,自立,*,*,五段・サ行,連用形,渡す,ワタシ,ワタシ
た	助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
。	記号,句点,*,*,*,*,。,。,。
EOS

nbest:7
太郎	名詞,固有名詞,人名,名,*,*,太郎,タロウ,タロー
は	助詞,係助詞,*,*,*,*,は,ハ,ワ
二郎	名詞,固有名詞,人名,名,*,*,二郎,ニロウ,ニロー
に	助詞,格助詞,一般,*,*,*,に,ニ,ニ
この	連体詞,*,*,*,*,*,この,コノ,コノ
本	名詞,一般,*,*,*,*,本,ホン,ホン
を	助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
渡し	動詞,自立,*,*,五段・サ行,連用形,渡す,ワタシ,ワタシ
た	助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
。	記号,句点,*,*,*,*,。,。,。
EOS

nbest:8
太郎	名詞,固有名詞,人名,名,*,*,太郎,タロウ,タロー
は	助詞,係助詞,*,*,*,*,は,ハ,ワ
二郎	名詞,固有名詞,人名,名,*,*,二郎,ジロウ,ジロー
に	助詞,副詞化,*,*,*,*,に,ニ,ニ
この	連体詞,*,*,*,*,*,この,コノ,コノ
本	名詞,一般,*,*,*,*,本,ホン,ホン
を	助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
渡し	動詞,自立,*,*,五段・サ行,連用形,渡す,ワタシ,ワタシ
た	助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
。	記号,句点,*,*,*,*,。,。,。
EOS

nbest:9
太郎	名詞,固有名詞,地域,一般,*,*,太郎,タロウ,タロー
は	助詞,係助詞,*,*,*,*,は,ハ,ワ
二	名詞,数,*,*,*,*,二,ニ,ニ
郎	名詞,一般,*,*,*,*,郎,ロウ,ロー
に	助詞,副詞化,*,*,*,*,に,ニ,ニ
この	連体詞,*,*,*,*,*,この,コノ,コノ
本	名詞,一般,*,*,*,*,本,ホン,ホン
を	助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
渡し	動詞,自立,*,*,五段・サ行,連用形,渡す,ワタシ,ワタシ
た	助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
。	記号,句点,*,*,*,*,。,。,。
EOS
```
<file_sep># dockerコンテナ作成

```
docker run --shm-size=2gb --name ubuntu-19-10-vim -itd -v /etc/localtime:/etc/localtime -v /run/udev:/run/udev -v /run/systemd:/run/systemd -v /tmp/.X1-unix:/tmp/.X11-unix -v /var/lib/dbus:/var/lib/dbus -v /var/run/dbus:/var/run/dbus -v /etc/machine-id:/etc/machine-id ubuntu-19-10-vim
```

# dockerイメージ作成

```
time docker build -t ubuntu-19-10-vim . | tee log
```

# dockerコンテナ潜入

```
docker exec -it ubuntu-19-10-vim /bin/bash
```

# vimビルドに必要なパッケージをインストール

```
$grep '^deb ' /etc/apt/sources.list | sed 's/^deb/deb-src/g' > /etc/apt/sources.list.d/deb-src.list && apt-get update
$apt-get build-dep -y vim
$apt-get install -y python-dev
$apt-get install -y tcl-dev
$apt-get install -y perl5*-dev
```

# vimインストール

ビルドやりなおす場合
```
$ls -l /usr/local/bin | grep -P '^l' | awk '{print $9}' | xargs -I@ echo unlink /usr/local/bin/@ | sh
$make clean distclean
```

python関連でエラー起きる場合
Makefileのある場所を探して
```
$find / -name "*Makefile*" 2>/dev/null | grep python
/usr/lib/python3.7/config-3.7m-x86_64-linux-gnu/Makefile
```

以下のオプションを追加
```
--with-python-config-dir=/usr/lib/python3.7/config-3.7m-x86_64-linux-gnu
```

ビルド
```
cd /usr/local/src && \
git clone https://github.com/vim/vim.git && \
cd vim && \
./configure --with-features=huge --with-x --with-python-config-dir=/usr/lib/python3.7/config-3.7m-x86_64-linux-gnu --enable-multibyte --enable-luainterp=dynamic --enable-gpm --enable-cscope --enable-fontset --enable-fail-if-missing --prefix=/usr/local --enable-pythoninterp=dynamic --enable-python3interp=dynamic --enable-rubyinterp=dynamic --enable-tclinterp=dynamic --enable-perlinterp=dynamic --enable-gui=auto --enable-gtk2-check && \
make -j12 && \
make -j12 install && \
ln -fsr /usr/local/bin/vim /usr/bin/vi
```


# 各言語ごとにプラグインを設定

python環境
```
pip3 install python-language-server
```

c-cpp環境
http://kutimoti.hatenablog.com/entry/2018/05/20/110732
```
apt install -y llvm clang clang-tools
```
<file_sep>GIT_VERSION=2-24-1
GO_VERSION=1-13-5
PYTHON_VERSION=3-7-4
<file_sep># 参考文献
- https://www.jetbrains.com/pycharm/download/#section=linux
- https://sdsawtelle.github.io/blog/output/large-data-files-pandas-sqlite.html

# 機械学習はこのサイト導入に良さげ

- https://www.kkaneko.jp/dblab/index.html

# pycharm起動

```
$pyc
```
<file_sep>ENV BLU=false
ENV DB2INST1_PASSWORD=<PASSWORD>
ENV DB2INSTANCE=db2inst1
ENV DBNAME=testdb
ENV ENABLE_ORACLE_COMPATIBILITY=true
ENV LICENSE=accept
ENV SAMPLEDB=true
<file_sep># dockerイメージ作成

```
time docker build -t ubuntu-18-04-swift-vscode . | tee log
```

# dockerコンテナ削除

```
docker ps -qa | xargs -I@ bash -c 'docker stop @ && docker rm @'
```

# dockerイメージ削除

```
docker images | awk '$1=="<none>"{print $3}' | xargs -I@ docker rmi @
```

# dockerコンテナ起動

```
docker run --privileged --shm-size=8gb --name ubuntu-18-04-swift-vscode -itd -v /etc/localtime:/etc/localtime -v /run/udev:/run/udev -v /run/systemd:/run/systemd -v /tmp/.X11-unix:/tmp/.X11-unix -v /var/lib/dbus:/var/lib/dbus -v /var/run/dbus:/var/run/dbus -v /etc/machine-id:/etc/machine-id ubuntu-18-04-swift-vscode
```

# dockerコンテナ潜入

```
docker exec -it ubuntu-18-04-swift-vscode /bin/bash
```

# 動作確認

- https://github.com/ukijumotahaneniarukenia/Hatena-Textbook

- https://qiita.com/naokits/items/8f09ffc8bbc78ade366c


```
$cat a.swift
#!/usr/bin/env swift

let hello = "こんにちは"
print(hello)

// 遊び心で。。
let 挨拶 = "お世話になります"
print(挨拶)
$chmod 700 a.swift
$./a.swift
こんにちは
お世話になります
```
<file_sep>|ユーザーＩＤ|ユーザー名|グループＩＤ|グループ名|パスワード|
|:-:|:-:|:-:|:-:|:-:|
|1001|hadoop|1001|hadoop|hadoop_pwd|
<file_sep>#!/bin/bash

usage(){
  cat <<EOS
Usage:
  $0 EXPOSE script-env
EOS
exit 0
}

N="$1";shift
REPO="$1";shift

[ -z $N ] && usage
[ -z $REPO ] && usage

while read tgt;do

  grep -r -n -P "$N" $HOME/$REPO/$tgt | grep -P env\.md | awk -v FS=':' -v N=${N,,} '{FILE_NAME=$1;gsub(/md-env.md/,"env-"N".md",FILE_NAME);print "rm -rf "FILE_NAME}'
  grep -r -n -P "$N" $HOME/$REPO/$tgt | grep -P env\.md | perl -pe 's/(.*)(?<=EXPOSE=)(.*)/\2/g' | perl -pe 's/ -p/\n-p/g' | awk -v N=${N,,} -v FILE=$HOME/$REPO/$tgt '{
  print "echo \x27"$0"\x27>>"FILE"/env-"N".md"
}'

done < <(ls -l $HOME/$REPO | grep -P '^d' | awk '{print $9}' | grep -v docker-log)

#ファイル存在チェック

#ls -l $HOME/$REPO | grep -P '^d' | awk '{print $9}' | grep -v docker-log | while read tgt;do echo $HOME/$REPO/$tgt/env-${N,,}.md;done | xargs -I@ ls @
<file_sep>#!/usr/bin/env bash

usage(){
cat <<EOS
Usage:
  $0 script-env script-repo
EOS
exit 0
}

DEFAULT_INSTALLER_REPO=script-repo

ENV_REPO=$1;shift
INSTALLER_REPO=$1;shift

[ -z "$ENV_REPO" ] && usage

if [ -z "$INSTALLER_REPO" ]; then
  :
else
  DEFAULT_INSTALLER_REPO=$INSTALLER_REPO
fi

while read tgt;do
  {
    #md-doc.mdファイルを配備
    echo cp $HOME/$ENV_REPO/md-doc.md $HOME/$ENV_REPO/$tgt/md-doc.md
    echo "sed -i 's;XXX;$tgt;g' $HOME/$ENV_REPO/$tgt/md-doc.md"
    echo "sed -i 's;HHH;$HOME;g' $HOME/$ENV_REPO/$tgt/md-doc.md"
    echo "sed -i 's;ENV_REPO;$ENV_REPO;g' $HOME/$ENV_REPO/$tgt/md-doc.md"

    RT="$(echo "grep '' $HOME/$ENV_REPO/$tgt/env-expose.md | xargs" | bash 2>/dev/null)"
    #デフォルト設定を適用
    [ -z "$RT" ] && printf "sed -i 's;EXPOSE;%s;' %s\n" "$(echo "grep EXPOSE $HOME/$ENV_REPO/$tgt/md-env.md" | bash 2>/dev/null | sed 's;.*=;;' | sort | uniq)" $HOME/$ENV_REPO/$tgt/md-doc.md
    #環境個別の設定を適用
    [ -z "$RT" ] || printf "sed -i 's;EXPOSE;%s;' %s\n" "$RT" $HOME/$ENV_REPO/$tgt/md-doc.md

    RT="$(echo "grep '' $HOME/$ENV_REPO/$tgt/env-shm-size.md" | bash 2>/dev/null)"
    #デフォルト設定を適用
    [ -z "$RT" ] && printf "sed -i 's;SHM_SIZE;%s;' %s\n" "$(echo "grep SHM_SIZE $HOME/$ENV_REPO/md-env.md" | bash | sed 's;.*=;;' | sort | uniq)" $HOME/$ENV_REPO/$tgt/md-doc.md
    #環境個別の設定を適用
    [ -z "$RT" ] || printf "sed -i 's;SHM_SIZE;%s;' %s\n" "$(echo $RT | sed 's/SHM_SIZE=//g')" $HOME/$ENV_REPO/$tgt/md-doc.md

    RT="$(echo "grep '' $HOME/$ENV_REPO/$tgt/env-build-arg.md | xargs" | bash 2>/dev/null)"
    #デフォルト設定を適用
    [ -z "$RT" ] && printf "sed -i 's;BUILD_ARG;%s;' %s\n" "$(echo "grep build-arg $HOME/$ENV_REPO/md-env.md" | sort | uniq | bash)" $HOME/$ENV_REPO/$tgt/md-doc.md
    #環境個別の設定を適用
    [ -z "$RT" ] || printf "sed -i 's;BUILD_ARG;%s;' %s\n" "$(echo $RT | sed 's; ; --build-arg ;g;s;^;--build-arg ;')" $HOME/$ENV_REPO/$tgt/md-doc.md

    printf "sed -i 's;INSTALLER_REPO;%s;' %s\n" $DEFAULT_INSTALLER_REPO $HOME/$ENV_REPO/$tgt/md-doc.md
  } | bash

done < <(ls -l $HOME/$ENV_REPO | grep -P '^d' | awk '{print $9}' | grep -v docker-log)
<file_sep>#!/usr/bin/env bash

usage(){
cat <<EOS
Usage:
  $0 ARG script-env script-repo
EOS
exit 0
}

CHK_WORD=$1;shift
ENV_REPO=$1;shift
INSTALLER_REPO=$1;shift

[ -z $CHK_WORD ] && usage
[ -z $ENV_REPO ] && usage
[ -z $INSTALLER_REPO ] && usage

while read tgt;do
  if [ -f $tgt/Dockerfile.sub ];then
    #Dockerfile.subが存在する場合、INSTALLER_REPOに存在するバージョンのでkey:valueペアを作成し、各環境ディレクトリのenv-build-arg.mdに追記
    KEY=$(grep $CHK_WORD $tgt/Dockerfile.sub | awk '{print $2}')
    WORD=$(grep $CHK_WORD $tgt/Dockerfile.sub | awk '{print $2}' | perl -pe 's/VERSION//' | perl -pe 's/_/-/g')
    while read f;do
      [ -z ${WORD} ] && continue
      if [[ ${f} =~ ${WORD,,}.* ]]; then
        {
          echo ${KEY}
          echo ${BASH_REMATCH[0]} | perl -pe 's/\.sh//g' | grep -Po '(-[0-9]+){1,}' | perl -pe 's/^-//'
        } | xargs -n2 | tr ' ' '='
      else
        :
      fi
    done < <(find $HOME/$INSTALLER_REPO -type f | grep -vP '\.git')
  else
    #何もしないsubファイルを作成してほしいい
    :
  fi
done < <(find $HOME/$ENV_REPO -mindepth 1 -type d | grep -vP '\.git|docker-log|mnt')
<file_sep>あんていしてる
dbeaver

コンテナ起動後、**postgres**ユーザーで実行755なので、実行できる

```
$bash /usr/local/src/script-repo/centos-7-6-18-10-healthcheck-postgres-12-X-with-python.sh
```


そのあとdbeaverに接続


|key|value|
|:-:|:-:|
|Host|localhost|
|Port|5432|
|Database|testdb|
|ユーザー名|postgres|
|パスワード|<PASSWORD>|
<file_sep>CODEBLOCKS_VERSION=X-X
GIT_VERSION=2-24-1
PYTHON_VERSION=3-7-4
<file_sep>|ユーザーＩＤ|ユーザー名|グループＩＤ|グループ名|パスワード|
|:-:|:-:|:-:|:-:|:-:|
|1001|mssql|1001|mssql|mssql_pwd|
<file_sep>DBEAVER_VERSION=X-X-X
ELASTICSEARCH_VERSION=7-5-1
GIT_VERSION=2-24-1
JAVA_VERSION=11
KIBANA_VERSION=7-5-1
MAVEN_VERSION=3-6-3
PYTHON_VERSION=3-7-4
<file_sep># Apache solr
  - 全文検索エンジン

  - バックアップとリストアできる。

  - https://www.slideshare.net/mobile/techblogyahoo/apache-solr-62053171

  - https://academy.gmocloud.com/know/20160106/1509

  - https://qiita.com/n_slender/items/eb629cfbc53d38eac2f1

  - https://qiita.com/reflet/items/add376c6046b4e7048cf

  - https://qiita.com/n_slender/items/93216bae005ac96b75c4

  - https://kshigeru.blogspot.com/2012/01/solr-wikipedia-data-import.html

- そこそこおおきいデータセット
  - https://www.findbestopensource.com/article-detail/free-large-data-corpus
<file_sep>- 事象
```
$ ls -l /usr/local/src/spark-2.4.5-bin-hadoop2.7/sbin/start-master.sh
-rwxr-xr-x. 1 hadoop hadoop 2050  2月  3 04:47 /usr/local/src/spark-2.4.5-bin-hadoop2.7/sbin/start-master.sh

$ start-master.sh
starting org.apache.spark.deploy.master.Master, logging to /usr/local/src/spark-2.4.5-bin-hadoop2.7/logs/spark-hadoop-org.apache.spark.deploy.master.Master-1-docker-container-ubuntu-16-04-postgres-python-vim.out
failed to launch: nice -n 0 /usr/local/src/spark-2.4.5-bin-hadoop2.7/bin/spark-class org.apache.spark.deploy.master.Master --host docker-container-ubuntu-16-04-postgres-python-vim --port 7077 --webui-port 8080
  	at org.apache.spark.SecurityManager.<init>(SecurityManager.scala:79)
  	at org.apache.spark.deploy.master.Master$.startRpcEnvAndEndpoint(Master.scala:1073)
  	at org.apache.spark.deploy.master.Master$.main(Master.scala:1058)
  	at org.apache.spark.deploy.master.Master.main(Master.scala)
  Caused by: java.lang.StringIndexOutOfBoundsException: begin 0, end 3, length 2
  	at java.base/java.lang.String.checkBoundsBeginEnd(String.java:3319)
  	at java.base/java.lang.String.substring(String.java:1874)
  	at org.apache.hadoop.util.Shell.<clinit>(Shell.java:52)
  	... 15 more
  20/05/12 07:25:32 INFO ShutdownHookManager: Shutdown hook called
full log in /usr/local/src/spark-2.4.5-bin-hadoop2.7/logs/spark-hadoop-org.apache.spark.deploy.master.Master-1-docker-container-ubuntu-16-04-postgres-python-vim.out
```

- 原因
  javaのマイクロバージョンのちがい？？イケてる環境もあるので、よくわからん。
```
curl -sSLO https://ftp.jaist.ac.jp/pub/apache/spark/spark-2.4.5/spark-2.4.5-bin-hadoop2.7.tgz
```

```
$ java -version
openjdk version "1.8.0_252"
OpenJDK Runtime Environment (build 1.8.0_252-8u252-b09-1~16.04-b09)
OpenJDK 64-Bit Server VM (build 25.252-b09, mixed mode)
```

- 対策
  - このエラー自体は起きてるらしいし、3系ではなおってるので、切り替える。

- 予防
  - 行ける環境探せばいい
<file_sep># 標準入出力

# ファイル入出力

# 型変換

# データ構造
<file_sep>フォルダ構成関連
- https://upura.hatenablog.com/entry/2018/12/28/225234


ソケットエラー関連
- https://rcmdnk.com/blog/2015/07/03/computer-linux/


データベースクライアントツール
ベンダー問わないのが対応範囲が広いのがすごい。
- https://qiita.com/Ryooota/items/755e249f5241d2c964e6
- https://qiita.com/12345/items/48f6856e32fd618ea307

- 言語別トークナイズ管理マスタgroonga

- apache spark環境似てる。フローが参考になる。
  - http://www.intellilink.co.jp/article/column/bigdata-kk04.html

- 分かち書きpythonによる使用例
  - http://testpy.hatenablog.com/entry/2016/10/04/010000

- グリッドレイアウトこれがいいかなー。簡単そう。
  - https://coliss.com/articles/build-websites/operation/javascript/magic-grid-for-dynamic-grid.html

- nuxt.jsでできるそう。グリッドレイアウト。
  - https://yoshinorin.net/2019/07/20/nuxt-js-photo-gallery-by-vue-magic-grid/

- nuxt.jsインストール
  - https://ja.nuxtjs.org/guide/installation

- magic-gridは単一ファイルに収まりそう
  - https://on-ze.com/archives/7644

- ブログテンプーレトあった
  - https://ulab.hatenablog.com/entry/20191006/1570336147

- axiosの使い方。mvc的な機能分割を提供してくれるプラグイン。
  - https://public-constructor.com/nuxtjs-with-axios/

- nuxtフレームワークでのaxiosライブラリを使用したコンパクトなアプリ
  - https://qiita.com/mgr/items/f2193fd21765be1d34c2

- nuxt.jsでのpost実装例 nuxt.js axios apiでぐぐる
  - https://qiita.com/cortyuming/items/3257ccc7936acf1a7989

- nuxt.jsでのmvc感出てる
  - https://noumenon-th.net/programming/2019/07/15/axios-module/
<file_sep># フォントインストール

- Dockerfileで完結できればいいが、今の所思いつかない。

```
python3: error while loading shared libraries: libpython3.7m.so.1.0: cannot open shared object file: No such file or directory
```

- コンテナ起動後、あたたかみのある手動実行

  - 一般ユーザーで実行

```
mkdir -p ~/.fonts && \
cd ~/.fonts && curl -LO https://github.com/adobe-fonts/source-han-code-jp/archive/2.011.zip && \
unzip 2.011.zip && \
cd ~/.fonts && git clone https://github.com/adobe-type-tools/opentype-svg.git && \
cd source-han-code-jp-2.011 && \
python3 -m venv afdko_env && \
source afdko_env/bin/activate && \
pip3 install afdko && \
cp ../opentype-svg/*.py . && \
cp -r ../opentype-svg/util . && \
cp -r ../opentype-svg/imgs . && \
cp -r ../opentype-svg/fonts . && \
sed -i 's;addSVGtable.py;~/.fonts/source-han-code-jp-2.011/addSVGtable.py;g' commands.sh && \
sed -i 's;for wt in ExtraLight Light Normal Regular Medium Bold Heavy;for wt in ExtraLight Light Normal Medium Bold Heavy;g' commands.sh && \
./commands.sh && \
find ~/.fonts/source-han-code-jp-2.011 -name "*otf" | xargs -I@ cp @ ~/.fonts && \
fc-cache -fv
```
<file_sep>安定している

|key|value|
|:-:|:-:|
|Host|localhost|
|Port|5432|
|Database|testdb|
|ユーザー名|postgres|
|パスワード|<PASSWORD>|
<file_sep>GIT_VERSION=2-24-1
POSTGRES_VERSION=12-0
PYTHON_VERSION=3-7-4
<file_sep># dockerホスト環境
```
[aine💖centos (土  9月 28 19:53:59) ~/unko/x]$cat /etc/redhat-release 
CentOS Linux release 7.7.1908 (Core)
[aine💖centos (土  9月 28 19:56:33) ~/unko]$docker --version
Docker version 19.03.2, build 6a30dfc
```

# ideaで日本語入力はできた
表示位置が微妙。

# dockerコンテナ削除
```
docker ps -qa | xargs -I@ bash -c 'docker stop @ && docker rm @'
```

# dockerイメージ作成
```
time docker build -t centos-7-6-18-10-x . | tee log

```

# dockerコンテナ削除
```
docker images | awk '$1=="<none>"{print $3}' | xargs -I@ docker rmi @
```

# dockerコンテナ作成
```
docker run --privileged --shm-size=8gb --name xxx -itd -v /run/udev:/run/udev -v /run/systemd:/run/systemd -v /tmp/.X11-unix:/tmp/.X11-unix -v /var/lib/dbus:/var/lib/dbus -v /var/run/dbus:/var/run/dbus -v /etc/machine-id:/etc/machine-id -p 28787:8787 centos-7-6-18-10-x
```

```
docker run --privileged --shm-size=8gb --name xxx -itd -v /run/udev:/run/udev -v /run/systemd:/run/systemd -v /tmp/.X11-unix:/tmp/.X11-unix -v /var/lib/dbus:/var/lib/bus -v /var/run/dbus:/var/run/dbus -v /etc/machine-id:/etc/machine-id -v /etc/X11/xorg.conf.d/00-keyboard.conf:/etc/X11/xorg.conf.d/00-keyboard.conf centos-7-6-18-10-x
```

# Xアプリ転送許可設定
dockerコンテナ内のXアプリをdockerホストに転送許可する。 ローカルネットワーク内で存在する全てのマシンからのX転送を許可している。マシン単位で設定もできる。
```
xhost +local:
```

# dockerコンテナ潜入
```
docker exec -it xxx /bin/bash
```

# 課題
X経由のブラウザ日本語入力
ideaのターミナルで絵文字が表示できない。
絵文字フォント設定
<file_sep>#!/usr/bin/env bash

usage(){
cat <<EOS
Usage:
  $0 ENV script-env
EOS
exit 0
}

CHK_WORD=$1;shift
ENV_REPO=$1;shift

[ -z $CHK_WORD ] && usage
[ -z $ENV_REPO ] && usage

while read tgt;do
  if [ -f "$tgt/env-env.md" ];then
    :
  else
    echo "touch $tgt/env-env.md" | bash
  fi
  if [ -f "$tgt/Dockerfile.sub" ];then
    RT="$(grep $CHK_WORD "$tgt/Dockerfile.sub")"
    if [ -z "$RT" ];then
      :
    else
      while read n;do
        echo $tgt $n | awk '{PRE=$1;$1="";gsub("^ ","",$0);print "echo \x27"$0"\x27>>"PRE"/env-env.md"}'
      done < <(echo "$RT" | perl -pe 's/ENV\s{1,}//')
    fi
  else
    :
  fi
done < <(find $HOME/$ENV_REPO -mindepth 1 -type d | grep -vP '\.git|docker-log|mnt')
<file_sep>#!/usr/bin/env bash

usage(){
cat <<EOS
Usage:
  $0 script-env
EOS
exit 0
}

ENV_REPO=$1;shift

[ -z $ENV_REPO ] && usage

while read tgt;do
  echo $tgt | perl -pe 's;.*/;;' | perl -nlE 's/(?:[a-z]+(?:-[0-9]{1,}){1,})(.*)/\1/ and say' | tr '-' '\n' | sed /^$/d
done < <(find $HOME/$ENV_REPO -mindepth 1 -type d | grep -vP '\.git|docker-log|mnt') | sort | uniq | \
  while read tgt;do
    find $HOME/$ENV_REPO -mindepth 1 -type d | grep -vP '\.git|docker-log|mnt' | sed 's;.*/;;' | grep -P "(?<=-)$tgt" | xargs -n3 | nl | \
      while read n {a..c};do
        #echo $tgt $n $(eval echo '$'{a..c}|xargs -n1;)
        eval echo '$'{a..c}|xargs -n1 >docker-build-$tgt-list-$(printf "%02d" $n);
      done
  done

ls docker-build*list* | grep -vP 'list$'
<file_sep>GIT_VERSION=2-24-1
PYTHON_VERSION=3-7-4
RUBY_VERSION=2-7-1
<file_sep>APACHE_SOLR_VERSION=8-5-1
DBEAVER_VERSION=X-X-X
GIT_VERSION=2-24-1
JAVA_VERSION=11
MAVEN_VERSION=3-6-3
PYTHON_VERSION=3-7-4
<file_sep>CODELITE_VERSION=13-0-8
GIT_VERSION=2-24-1
PYTHON_VERSION=3-7-4
<file_sep>#!/usr/bin/env bash

usage(){
  cat <<EOS
Usage:
  $0 script-env
EOS
exit 0
}

REPO=$1

[ -z $REPO ] && usage

while read tgt;do
  #echo $tgt;
  while read n;do
    if [ -f $tgt/$n ];then
      echo "mv $tgt/$n  $tgt/md-$n" #| bash
      echo "git rm $tgt/$n" #| bash
    else
      :
    fi
  done < <(ls *md | grep -v README.md  | perl -pe 's/^md-//;')
done < <(find $HOME/$REPO -mindepth 1 -type d | grep -vP '\.git|docker-log' )
<file_sep>GIT_VERSION=2-24-1
GRADLE_VERSION=6-1
JAVA_VERSION=11
MAVEN_VERSION=3-6-3
PYTHON_VERSION=3-7-4
<file_sep># トラシュー

- 事象

```
fatal: could not read Username for 'https://github.com': No
```

- 原因

  - md-doc.mdの引数にREPO環境変数が設定されていない

- 対応

  - md-doc.mdの自動生成を行う

- 予防

  - ビルド前に実行するようにcronに仕込む

- 事象

```
make[2]: *** No rule to make target `../auto/config.mk'.  Stop.
```

- 原因

  - おそらく同時実行数が多すぎるため。単一実行では行けているので。

- 対応

  - ビルド対象リストを分割し、起動時刻をずらす。

- 予防

  - 時刻別に同時実行数を一覧で確認できるようにする。


- 事象

```
bash: 36-デフォルトユーザー以外を使用している環境のユーザー登録スクリプトの作成.sh: そのようなファイルやディレクトリはありません
使用法: grep [OPTION]... PATTERN [FILE]...
Try 'grep --help' for more information.
```

- 原因
  - フルパスで指定していない

- 対応

  - フルパスで記載

- 予防

  - linterとかあるけど、大量にエラーはかれて精神乱れそう。

- 事象

  - git repoのクローンが終わらない

- 原因
  - 同時にコネクション貼りすぎ

- 対応

  - docker buildできていないやつを再実行するようにスクリプトを修正

- 予防

  - 時刻別に同時実行数を一覧で確認できるようにする。

- 事象

  - font cannot install

```
You are using pip version 19.0.3, however version 20.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
cp: cannot stat ‘../opentype-svg/util’: No such file or directory
The command '/bin/sh -c cd /usr/local/src/$REPO && echo ./$OS_VERSION-config-font.sh | bash' returned a non-zero code: 1

real	5m45.217s
user	0m0.595s
sys	0m0.705s
aine@centos ~/script-env/centos-7-6-18-10-python-pycharm$cd -
```

- 原因
  - I dont know

- 対応

  - free

- 予防

  - not-free
<file_sep># 参考文献

OpenJDKからいんすこ
https://openjdk.java.net/install/index.html

https://jdk.java.net/
https://jdk.java.net/13/

```
cd /usr/local/src && \
curl -LO https://download.java.net/java/GA/jdk13/5b8a42f3905b406298b72d750b6919f6/33/GPL/openjdk-13_linux-x64_bin.tar.gz && \
tar -zxvf openjdk-13_linux-x64_bin.tar.gz
```

# jshell
https://qiita.com/HomMarkHunt/items/6579cc3587972909d85f
https://twitter.com/EclipseJavaIDE/status/1147044351278747648
```
[java@441a10f53644 /]$jshell
|  JShellへようこそ -- バージョン13
|  概要については、次を入力してください: /help intro

jshell>

jshell>

jshell>

jshell>

jshell> System.out.println("Hello World");
Hello World


```

# 絵文字をjavaで表示

https://qiita.com/carimatics/items/48ca30434f192549283c
https://github.com/vdurmont/emoji-java
Mavenからインストール
![](./1.png)
![](./2.png)
![](./3.png)

ディレクトリ構造
```
[java@441a10f53644 ~/IdeaProjects/untitled]$tree
.
|-- lib
|   |-- emoji-java-5.1.1-javadoc.jar
|   |-- emoji-java-5.1.1-sources.jar
|   |-- emoji-java-5.1.1.jar
|   |-- json-20170516-javadoc.jar
|   |-- json-20170516-sources.jar
|   `-- json-20170516.jar
|-- out
|   `-- production
|       `-- untitled
|           `-- emo.class
|-- src
|   `-- emo.java
`-- untitled.iml

5 directories, 9 files
```

javaファイル作成
```emo.java
import com.vdurmont.emoji.EmojiManager;

public class emo {
    public static void main(String[] args) {
        EmojiManager.getForAlias("name_badge");
        System.out.println(EmojiManager.getForAlias("name_badge").getUnicode());
    }
}
```
コンパイル
```
javac -d ../out/production/untitled -classpath /home/java/IdeaProjects/untitled/out/production/untitled:/home/java/IdeaProjects/untitled/lib/emoji-java-5.1.1.jar:/home/java/IdeaProjects/untitled/lib/json-20170516.jar emo.java
```
実行
```
/home/java/jdk-13/bin/java -javaagent:/home/java/idea-IC-192.6603.28/lib/idea_rt.jar=46144:/home/java/idea-IC-192.6603.28/bin -Dfile.encoding=UTF-8 -classpath /home/java/IdeaProjects/untitled/out/production/untitled:/home/java/IdeaProjects/untitled/lib/emoji-java-5.1.1.jar:/home/java/IdeaProjects/untitled/lib/json-20170516.jar emo
```
実行例
```
[java@441a10f53644 ~/IdeaProjects/untitled/src]$/home/java/jdk-13/bin/java -javaagent:/home/java/idea-IC-192.6603.28/lib/idea_rt.jar=46144:/home/java/idea-IC-192.6603.28/bin -Dfile.encoding=UTF-8 -classpath /home/java/IdeaProjects/untitled/out/production/untitled:/home/java/IdeaProjects/untitled/lib/emoji-java-5.1.1.jar:/home/java/IdeaProjects/untitled/lib/json-20170516.jar emo
📛
```
<file_sep># go言語のデータベースある

- https://godoc.org/modernc.org/ql

# 参考文献

- https://github.com/astaxie/build-web-application-with-golang/blob/master/ja/preface.md


# go tool

- https://mattn.kaoriya.net/software/lang/go/20120216093718.htm

# 開発環境

- https://qiita.com/masakurapa/items/fb61b5fc07393059fb28


# トラシュー

- https://qiita.com/mumoshu/items/0d2f2a13c6e9fc8da2a4
<file_sep>#!/bin/bash

usage(){
  cat <<EOS
Usage:
  $0 SHM_SIZE script-env
EOS
exit 0
}

N="$1";shift
REPO="$1";shift

[ -z $N ] && usage
[ -z $REPO ] && usage

while read tgt;do

  grep -r -n -P "$N" $HOME/$REPO/$tgt | grep -P env\.md | awk -v FS=':' -v N=$(echo ${N,,} | perl -pe 's/_/-/g' ) '{FILE_NAME=$1;gsub(/md-env.md/,"env-"N".md",FILE_NAME);print "rm -rf "FILE_NAME}'
  grep -r -n -P "$N" $HOME/$REPO/$tgt | grep -P env\.md |  awk -v FS=':' -v N=$(echo ${N,,} | perl -pe 's/_/-/g' ) -v FILE=$HOME/$REPO/$tgt '{
  print "echo \x27"$3"\x27>>"FILE"/env-"N".md"
}'

done < <(ls -l $HOME/$REPO | grep -P '^d' | awk '{print $9}' | grep -v docker-log)

#ファイル存在チェック
#ls -l $HOME/$REPO | grep -P '^d' | awk '{print $9}' | grep -v docker-log | while read tgt;do echo $HOME/$REPO/$tgt/env-${N,,}.md;done | xargs -I@ ls @
<file_sep># 参考文献

db2のセットアップマニュアル
- https://www.ibm.com/support/producthub/db2/docs/content/SSEPGG_11.5.0/com.ibm.db2.luw.qb.server.doc/doc/t0008875.html


コミニュティエディションでて、無償で検証つくれるようになったよー
- https://www.ibmbigdatahub.com/blog/simplifying-db2-downloads-help-clients-and-developers-get-started?_ga=2.116263366.1982163311.1579705509-1850039665.1572074127&cm_mc_uid=89503398108915720741268&cm_mc_sid_50200000=74238601579705509031

- https://www.ibm.com/cloud/blog/announcements/ibm-db2-developer-community-edition

開発マニュアル
- https://www.ibm.com/support/knowledgecenter/ja/ssw_ibm_i_71/rzaha/udftable.htm

以下はメモ

```
root@858be2c9f9b1:/# chmod 777 /home/software
root@8bb04c92ca56:/# cd /home/software
root@8bb04c92ca56:/home/software# gunzip *.gz
root@8bb04c92ca56:/home/software# tar -xvf v11.5_linuxx64_dec.tar 
root@8bb04c92ca56:/home/software# rm v11.5_linuxx64_dec.tar 
root@8bb04c92ca56:/home/software# chmod 777 server_dec
root@8bb04c92ca56:/home/software# mv server_dec ibm-db2
root@8bb04c92ca56:/home/software# cd ibm-db2
root@8bb04c92ca56:/home/software/ibm-db2# ./db2prereqcheck -v 192.168.127.12 
apt-get -y install libaio1 zlib1g-dev libnuma-dev libpam0g-dev file gcc make
root@8bb04c92ca56:/home/software/ibm-db2# dpkg --add-architecture i386
root@8bb04c92ca56:/home/software/ibm-db2# apt-get update
root@8bb04c92ca56:/home/software/ibm-db2# apt install -y binutils libaio1 libstdc++6:i386 libpam0g:i386

root@8bb04c92ca56:/home/software/ibm-db2# ./db2prereqcheck -v 192.168.127.12 

==========================================================================

Sun Feb  2 23:38:10 2020
Checking prerequisites for DB2 installation. Version "192.168.127.12". Operating system "Linux" 
   
Validating "Linux distribution " ... 
   Required minimum "UBUNTU" version: "16.04" 
   Actual version: "18.04" 
   Requirement matched. 
   
Validating "kernel level " ... 
   Required minimum operating system kernel level: "3.10.0". 
   Actual operating system kernel level: "3.10.0". 
   Requirement matched. 
   
Validating "C++ Library version " ... 
   Required minimum C++ library: "libstdc++.so.6" 
   Standard C++ library is located in the following directory: "/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.25". 
   Actual C++ library: "CXXABI_1.3.1" 
   Requirement matched. 
   

Validating "32 bit version of "libstdc++.so.6" " ... 
   Found the 32 bit "/usr/lib/i386-linux-gnu/libstdc++.so.6" in the following directory "/usr/lib/i386-linux-gnu". 
   Requirement matched. 
   
Validating "libaio.so version " ... 
DBT3553I  The db2prereqcheck utility successfully loaded the libaio.so.1 file. 
   Requirement matched. 
   
Validating "libnuma.so version " ... 
DBT3610I  The db2prereqcheck utility successfully loaded the libnuma.so.1 file. 
   Requirement matched. 
   
Validating "/lib/i386-linux-gnu/libpam.so*" ... 
   Requirement matched. 
DBT3533I  The db2prereqcheck utility has confirmed that all installation prerequisites were met. 


これたたいて
./db2setup

できたレスポンスファイルを使用していんすこ

root@8bb04c92ca56:/home/software/ibm-db2# cp ./db2/linuxamd64/samples/db2server.rsp .
root@8bb04c92ca56:/home/software/ibm-db2# apt install -y vim
root@8bb04c92ca56:/home/software/ibm-db2# chmod u+w db2server.rsp
root@8bb04c92ca56:/home/software/ibm-db2# ./db2setup -r db2server.rsp 


root@b5348375618d:~# ls
db2server.rsp


root@b5348375618d:/home/software/ibm-db2# ./db2setup -r /root/db2server.rsp 

```
<file_sep>SHM_SIZE=2gb
GIT_VERSION=2-24-1
PYTHON_VERSION=3-7-4
<file_sep># 参考文献

- https://www.mlab.im.dendai.ac.jp/~yamada/ir/MorphologicalAnalyzer/mecab.html

- https://javazuki.com/articles/mecab-install.html

- https://github.com/naoa/docker-termextract/blob/master/Dockerfile


# 動作確認

```
$echo みなさんこんにちわ | mecab
みなさん	名詞,代名詞,一般,*,*,*,みなさん,ミナサン,ミナサン
こんにちわ	感動詞,*,*,*,*,*,こんにちわ,コンニチワ,コンニチワ
EOS
```
<file_sep># マイインストーラの実行

- rootユーザーでmy-installer.shを実行

# docker install
- インストール手順公式HP
  - https://docs.docker.com/install/linux/docker-ce/centos/

- より簡単にいんすこできるようになった
  - https://github.com/docker/docker-install

- my-installer.shに組み込んでおきたい部分

# dockerホスト環境構築

- バージョン確認
```
$cat /etc/redhat-release
CentOS Linux release 7.7.1908 (Core)
```

# visudoでdockerグループに属するユーザーはroot権限をもつように修正

- my-installer.shに組み込んでおきたい部分
```
[root♥centos (金 10月 04 20:39:17) /home/aine]$visudo

## Allows people in group wheel to run all commands
%wheel    ALL=(ALL)        ALL
%docker    ALL=(ALL)        ALL
```

# レポジトリ構成

  - script-template
    - プログラム単位のテンプーレトファイルを管理
    - ディレクトリ構成はscript-sketchと同じ

  - script-sketch
    - プログラム単位にディレクトリを切って運用
    - プログラム単位のディレクトリ名はscript-envの単一アプリ名

    - ファイル名は

      - 5桁ゼロうめ連番-プログラム名-用途名-non-alias名-alias名

      - alias名は~/.bashrcに追加するので、短くていい感じの名前をつけてあげる

    - エイリアスにするので、実行権限を付与しておく

  - script-env

    - os名-バージョン-アプリないしソフト名とそのバージョン単一ないし複数-エディタ単一
    - エディタデフォルトはvim

  - script-repo

    - プログラムのインストーラーシェル
    - プログラムのローンチシェル
    - 環境を高速に起動できるように自動化を意識

  - script-search

    - 上記レポジトリ全てを全文検索できるようにする

    - Web化する
      - 全文検索サーバgroonga
        - http://blog.createfield.com/entry/2014/04/21/120023
      - 全文検索サーバfess
        - https://fess.codelibs.org/ja/
        - https://qiita.com/Takumon/items/993609a4fc0fbb70c903
      - 全文検索サーバmroonga
        - https://mroonga.org/ja/docs/install.html

# md-doc.md

- dockerコンテナ操作を記載

# md-dev.md

- 開発マニュアルを記載

# md-env.md

- コンテナ個別の環境を記載

# md-trs.md

- 環境構築の際のトラブルシュートを記載

# md-ref.md

- 参考文献を記載

# md-man.md

- 上記マークダウンファイル以外に該当する内容を記載

# crontabで定期実行スクリプト作成

- 同時実行プロセス数はファイル単位で管理することにした。

- http://dqn.sakusakutto.jp/2012/06/cron_crontab9.html
- https://zenpou.hatenadiary.org/entry/20080715/1216133151
- https://qiita.com/mazgi/items/15e1fe7e130584343810
- https://qiita.com/onomame/items/71646c5517a39bcd01cc

バックアップ

```
$crontab -l>~/script_env/docker-build-crontab
```

編集
```
$vi ~/script_env/docker-build-crontab
```

反映
```
crontab < ~/script_env/docker-build-crontab
```

確認

```
$crontab -l
```

プロセス確認

```
$ps aux | grep cron
```

起動ログの確認

```
$sudo less /var/log/cron
```

最後は手動push

秘密鍵をなくさない保証があれば、自動pushやりたいが、
定期的にOS換えるかもしれないので。今は手動pushでいいか。
- http://tm.root-n.com/unix:command:git:cron_git_push

強制終了

```
su root

ps aux  | grep 'docker build' | awk '{print $2}' | xargs kill
```
<file_sep>GIT_VERSION=2-24-1
PERL_VERSION=5-30-0
PYTHON_VERSION=3-7-4
<file_sep>DBEAVER_VERSION=X-X-X
JAVA_VERSION=11
MAVEN_VERSION=3-6-3
GIT_VERSION=2-24-1
PGROONGA_VERSION=X-X-X
POSTGRES_VERSION=12-X
PYTHON_VERSION=3-7-4
<file_sep>|ユーザーＩＤ|ユーザー名|グループＩＤ|グループ名|パスワード|
|:-:|:-:|:-:|:-:|:-:|
|1001|apache|1001|apache|apache_pwd|
<file_sep>ubuntuはコアダンプ吐くので、centosで


```
$monodevelop 1>$HOME/launch-monodevelop.log 2>&1 &
```
<file_sep>#!/usr/bin/env bash

usage(){
  cat <<EOS
Usage:
  $0 script-env
EOS
exit 0
}

ENV_REPO="$1";shift

[ -z $ENV_REPO ] && usage

#自動生成したDockerfileと既存Dockerfileのうち既存にしかないものを抽出
while read tgt;do
  if [ -f $tgt/Dockerfile.sub.done ];then
    #Dockerfile.sub.doneが存在する場合はDockerfile.subを作成しない
    : #echo 1 $tgt
  elif [ -f $tgt/Dockerfile.sub.undone ];then
    #Dockerfile.sub.undoneが存在する場合は着手したが完了していない状態なので、Dockerfile.subを作成しない。
    : #echo 1 $tgt
  else
    #echo 0 $tgt
    echo "cd  $tgt && comm -23 --nocheck-order <(sort Dockerfile.asis | sed -r '/^$/d') <(sort Dockerfile.auto | sed -r '/^$/d')>Dockerfile.sub"
  fi
done < <(find $HOME/$ENV_REPO -mindepth 1 -type d | grep -vP '\.git|docker-log|mnt')
<file_sep>DBEAVER_VERSION=X-X-X
GIT_VERSION=2-24-1
JAVA_VERSION=11
MAVEN_VERSION=3-6-3
POSTGRES_VERSION=12-0
PYTHON_VERSION=3-7-4
<file_sep>GIT_VERSION=2-24-1
PYTHON_VERSION=3-7-4
SWIFT_VERSION=X-X-X
<file_sep>FROM ubuntu:18.04

ARG OS_VERSION
ARG REPO
ARG DEBIAN_FRONTEND=noninteractive

ARG GIT_VERSION
ARG PYTHON_VERSION

ENV LANG=ja_JP.UTF-8
ENV DISPLAY=:0.0

RUN sed -i 's@<EMAIL>/pub/Linux@g' /etc/apt/sources.list && \
apt update && \
apt upgrade -y

RUN apt install -y git
RUN cd /usr/local/src && git clone https://github.com/ukijumotahaneniarukenia/$REPO.git

RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-install-docker-host-user.sh | bash

RUN cd /usr/local/src/$REPO && echo './$OS_VERSION-install-default-user.sh ' | bash

RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-install-repository-pkg.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-install-dev-pkg.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-install-tool-pkg.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-install-network-pkg.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-install-vim-system.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-install-vim-user.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-install-vim_plug.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-install-python-$PYTHON_VERSION.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-pre-patch-git-$GIT_VERSION.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-install-git-$GIT_VERSION.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-config-dotfile.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-config-locale.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-config-env.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-config-ld.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-config-font-RictyDiminished.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-install-fcitx_mozc.sh | bash

COPY subrun.sh /root/subrun.sh
#RUN bash /root/subrun.sh

RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-install-aws-workspaces-client.sh | bash

USER kuraine
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-install-vim-user.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-install-vim_plug.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-config-dotfile.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-config-env.sh | bash
RUN cd /usr/local/src/$REPO && echo ./$OS_VERSION-config-font-RictyDiminished.sh | bash

WORKDIR /home/kuraine

COPY run.sh /etc/init/run.sh
ENTRYPOINT ["/etc/init/run.sh","ubuntu"]
<file_sep>#!/usr/bin/env bash

yum install -y https://packages.groonga.org/centos/groonga-release-latest.noarch.rpm

yum install -y http://repo.mysql.com/mysql80-community-release-el7.rpm

yum install -y --enablerepo=epel mysql80-community-mroonga

#これはむりだった
#expect -c "
#spawn yum install -y --enablerepo=epel mysql80-community-mroonga
#expect \"Enter password:\"
#send -- \"\n\"
#expect \"Enter password:\"
#send -- \"\n\"
#"
<file_sep>GIT_VERSION=2-24-1
PYTHON_VERSION=3-7-4
RACKET_VERSION=7-5
