Apache Tomcat 9がWindows 10で起動できない問題

Webサイトにアクセスして自動でボタンをポチポチするものを作ろうとしているけれど、Web系舐めていた。全然わからない。今までサーバー立ててApache入れるくらいでHTML少しいじって表示変わるの見てWeb系簡単だと思っていたのに動的なサイト作ろうと思ったらすごく難しかった。

やりたいことのためにApache Tomcatをインストールする必要がありそうだとわかったのでWindows 10にインストールしたらlocalhostにアクセスしても表示されない。exeでインストールするだけでできるものじゃなかった。

環境と使ったもの

Windows 10
apache-tomcat-9.0.20.exe
tomcat-native-1.2.21-openssl-1.1.1a-win32-bin
TCPView

問題

Tomcat 9をインストールしてブラウザからlocalhost:8080にアクセスしてもつながらない

やったこと

  1. jdk-11.0.3_windows-x64_bin.exeのインストール
  2. Tomcat 9のインストール
  3. 環境変数のユーザー変数に追加
    JAVA_HOME
    C:\Program Files\Java\jdk-11.0.3
  4. 環境変数のシステム変数に追加
    Path
    C:\Program Files\Java\jdk-11.0.3\bin

出たエラー

tomcatをインストールしたフォルダのlogsフォルダでcatalina.[日付].logを確認する。

NOTE: Picked up JDK_JAVA_OPTIONS:  --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
10-Jun-2019 22:20:25.800 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version name:   Apache Tomcat/9.0.20
10-Jun-2019 22:20:25.803 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server built:          May 3 2019 22:26:00 UTC
10-Jun-2019 22:20:25.803 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version number: 9.0.20.0
10-Jun-2019 22:20:25.804 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name:               Windows 10
10-Jun-2019 22:20:25.804 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Version:            10.0
10-Jun-2019 22:20:25.804 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Architecture:          amd64
10-Jun-2019 22:20:25.804 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Java Home:             C:\Program Files\Java\jdk-11.0.3
10-Jun-2019 22:20:25.804 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Version:           11.0.3+12-LTS
10-Jun-2019 22:20:25.805 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Vendor:            Oracle Corporation
10-Jun-2019 22:20:25.805 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE:         C:\tomcat9
10-Jun-2019 22:20:25.805 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME:         C:\tomcat9
10-Jun-2019 22:20:25.814 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.lang=ALL-UNNAMED
10-Jun-2019 22:20:25.814 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.io=ALL-UNNAMED
10-Jun-2019 22:20:25.815 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
10-Jun-2019 22:20:25.815 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.config.file=C:\tomcat9\conf\logging.properties
10-Jun-2019 22:20:25.815 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
10-Jun-2019 22:20:25.816 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djdk.tls.ephemeralDHKeySize=2048
10-Jun-2019 22:20:25.817 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.protocol.handler.pkgs=org.apache.catalina.webresources
10-Jun-2019 22:20:25.818 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dignore.endorsed.dirs=
10-Jun-2019 22:20:25.819 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.base=C:\tomcat9
10-Jun-2019 22:20:25.820 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.home=C:\tomcat9
10-Jun-2019 22:20:25.820 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.io.tmpdir=C:\tomcat9\temp
10-Jun-2019 22:20:25.822 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [C:\Program Files\Java\jdk-11.0.3\bin;C:\Windows\Sun\Java\bin;C:\Program Files\Java\jdk-11.0.3\bin;(一部省略)]
10-Jun-2019 22:20:26.064 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-nio-8080"]
10-Jun-2019 22:20:26.150 SEVERE [main] org.apache.catalina.util.LifecycleBase.handleSubClassException Failed to initialize component [Connector[HTTP/1.1-8080]]
        org.apache.catalina.LifecycleException: Protocol handler initialization failed
                at org.apache.catalina.connector.Connector.initInternal(Connector.java:983)
                at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:136)
                at org.apache.catalina.core.StandardService.initInternal(StandardService.java:533)
                at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:136)
                at org.apache.catalina.core.StandardServer.initInternal(StandardServer.java:1059)
                at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:136)
                at org.apache.catalina.startup.Catalina.load(Catalina.java:584)
                at org.apache.catalina.startup.Catalina.load(Catalina.java:607)
                at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
                at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
                at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
                at java.base/java.lang.reflect.Method.invoke(Method.java:566)
                at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:304)
                at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:474)
        Caused by: java.net.BindException: Address already in use: bind
                at java.base/sun.nio.ch.Net.bind0(Native Method)
                at java.base/sun.nio.ch.Net.bind(Net.java:461)
                at java.base/sun.nio.ch.Net.bind(Net.java:453)
                at java.base/sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:227)
                at java.base/sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:80)
                at org.apache.tomcat.util.net.NioEndpoint.initServerSocket(NioEndpoint.java:248)
                at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:222)
                at org.apache.tomcat.util.net.AbstractEndpoint.bindWithCleanup(AbstractEndpoint.java:1119)
                at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:1132)
                at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:557)
                at org.apache.coyote.http11.AbstractHttp11Protocol.init(AbstractHttp11Protocol.java:74)
                at org.apache.catalina.connector.Connector.initInternal(Connector.java:980)
                ... 13 more



エラー1

The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path

これはTomcat Native Connectorのtcnative-1.dllがないせいらしい。Tomcatの公式ページへ行き、Apache Tomcat® - Tomcat Native Downloads から「Native 1.2.21 Windows Binaries zip (recommended) 」をダウンロードする。
解凍してtomcat-native-1.2.21-openssl-1.1.1a-win32-bin\bin\x64の中のtcnative-1.dllをTomcatをインストールしたbinフォルダに入れる。
なくても問題ないけれど、Tomcat9w.exeを起動してJavaタブのJava Optionsの一番下に追加する。

-Djava.library.path=c:\tomcat9\bin

f:id:ultra-genma:20190610224716p:plain



エラー2

Caused by: java.net.BindException: Address already in use: bind

アドレス(localhost127.0.0.1)が使われていると出る。Portの8080が使われているようなのでTCPViewというMicrosoftのツールで調べるとFirefoxのプロセスが8080でたくさんあったのでサーバーの設定を変更する。
Tomcatをインストールしたフォルダの中のconfフォルダにあるserver.xmlテキストエディタで開き、Connector portを他とかぶらない適当な80などの値にする。

<Connector port="80" protocol="HTTP/1.1"
       connectionTimeout="20000"
       redirectPort="8443" />



これでブラウザからlocalhostにアクセスするとTomcatのページが表示される。
f:id:ultra-genma:20190610225701p:plain



参考

・エラー1
eclipse - What does "The APR based Apache Tomcat Native library was not found" mean? - Stack Overflow

・エラー2
eclipse - How do I resolve the "java.net.BindException: Address already in use: JVM_Bind" error? - Stack Overflow

Tomcat Native Connector - 1.2
Apache Tomcat® - Tomcat Native Downloads

・TCPView v3.05
TCPView for Windows - Windows Sysinternals | Microsoft Docs

HTMLのボタンからPythonスクリプトでBrythonを使ってSeleniumをimportすることはできなかった

初めてHTMLとPythonとBrythonとSeleniumを使った。すべて初めてでなんにもわからなかった。 言葉の使い方すらあってるかわからない。

やろうとしたこと

  1. 自動でウェブサイトにアクセスしてボタンを押すPythonスクリプトをつくる
  2. 指定した時間にPythonスクリプトを実行する
  3. そのスクリプトに画面をつけるため、ブラウザからボタンを押してPythonスクリプトを実行するようにする

環境

windows 10 python selenium brython chromewebdriver

1について

自動でウェブサイトにアクセスするものの作り方を調べたらPythonSeleniumでできることがわかった。自分が見たいサイトと同じところにアクセスするものを作っている人がいたのでここまではすぐ出来た。 一部困ったところは以前はJavaScriptのボタンがなかったからSeleniumで楽にボタンを押すことが出来たみたいだったが、今は変わっていてボタンの押し方がわからなかったことだった。これはxPath FinderというFirefoxのアドオンを使ってボタン名を取得できたのですぐにやりたいことができるようになった。

2について

Pythonでパソコンの時刻を取得する方法はdatetimeをimportすれば良いことがわかった。またPythonでタイマーアプリ作ってるものなどを参考にして、スクリプトを実行したあと指定時間になるまでループし続けて待つ処理を追加した。

3について

Pythonスクリプトは"from Selenium import webdriver"を行って自動でブラウザが起動させることができた。これをブラウザから実行したかったので調べたら、PythonはBrythonを使ってHTMLのボタンから実行することができることがわかった。ここでBrythonとかPhantomJSとかJavaScriptとかDjangoとかいろいろ単語出てきたけれど一つもわからなすぎてとりあえずPython、Brython、HTMLだけを選択してつくることにしたが、ここから地獄だった。

最初は簡単にHTMLの入力欄とボタンを作って、文字を入力してボタンを押すとその文字を表示する画面を作った。ここまではうまく出来た。HTMLのボタンを押すと、Pythonに書いたhello()メソッドでreturn 'Hello'し、ブラウザにHelloが表示されるものだった。

このあとボタンを押してブラウザを起動できるようにするため、"from Selenium import webdriver"のたった一行を追加するだけでボタンが無反応になってしまって何が原因か全くわからなくなってしまった。デバッグ方法もわからないのでひたすら"brython selenium html"の単語を混ぜてググりまくった。全く情報が出てこなかったのでpythonデバッグ方法を調べ始めたけれどこれも全く知りたいことが出てこなくてもうほかの方法で作るしかないかと思ってDjangoとかAjaxとか調べ始めた。

それでもBrythonは諦めたとしてもなんでたった一行importするだけで動かなくなるのか原因しりたくていろいろ考えていたら、たまたまブラウザの開発者モードがあることを思い出した。試しにFirefoxでF12で開いていろいろいじっていたら偶然Consoleタブにエラーが出ることがわかった。 そしたらそこに

Traceback (most recent call last):
ImportError: No module named selenium brython.js:5887:9

と出ていた。デバッグ方法がわかってとてもラッキーだった。

ImportErrorだとわかったので「"ImportError: No module named selenium" brython」でググったらたった3件だけヒットし、BrythonではSeleniumを実行できないって書かれていたのでようやく諦めがついた。

また最初から別の方法をググらなきゃいけなくなった。

Raspberry Pi 3 Model B+のグッズがそろったので起動してみる

2019/3/24にRaspberry Pi 3 Model B+が届いたとブログを書いてからすでに1か月以上経ってやっとACアダプタとヒートシンクがそろった。

特に用途は決まっていないけれどModel Aやラズパイ2ではデスクトップとして使えなかったので、最新のものでは毎日夜のネットサーフィンはラズパイだけでできないか試してみる。可能であればブラウザでプログラミング動画再生しながらHTMLの勉強とかできたら嬉しい。

f:id:ultra-genma:20190502233936j:plain
買ったもの
f:id:ultra-genma:20190502234011j:plain
ヒートシンクを付けてmicroSDカードを挿したところ

買ったもの

Raspberry Pi 3 Model B+
470円
2日ほどで到着
NTTXストアで5670円で2200円引きクーボンと3000円分dポイント使用した。とても安い。amazonだと今は5130円。


・5V 3AのACアダプタ
429円
2週間半ほどで到着
激安で評価は☆1だけれど最安値を攻めてみたら問題なく届いたし無事使えた。アダプタはちょっと大きいけれどケーブルにスイッチがついているところが良い。


f:id:ultra-genma:20190512191450j:plain
届いたところ(ウケる)

f:id:ultra-genma:20190512191544j:plainf:id:ultra-genma:20190512191549j:plainf:id:ultra-genma:20190512191553j:plain f:id:ultra-genma:20190512191617j:plainf:id:ultra-genma:20190512191620j:plain 箱はかわいそうな感じだったけれど問題なく使えた

・アルミニウムヒートシンク Raspberry Pi用 6枚入り
187円
3週間ほどで到着
2セット分で6枚とおまけのLED基板付きで送料無料。デスクトップとして使っていたら、付けていても結構熱くなったので夏はファンの方が良いかもしれない。



OS

Raspbian Stretch with desktop (recommended softwareが入ってない方)
Version: April 2019
Release date: 2019-04-08
Kernel version: 4.14


デスクトップとして普通のパソコンのように使った結果

◎問題なく使える
・デスクトップの解像度設定FullHD
・ネットサーフィン
・テキスト編集
・プログラミング
ここまでできるので一応目的は達成している

△使える
you tube再生 高解像度の再生は難しくデフォルトでは360pでの再生になる。720pの倍速再生でも一応は平気。1080pは厳しい。
デスクトップの解像度設定を1280x720にしていたほうが軽いという意見もあったけれど、画面は結構狭く感じる。

✕だめ
・ゲーム
Linuxでゲームやろうとする人多くないはず。


オフィスソフトはまだ試していないけれどいまはほとんどGoogle sheetで足りているのですぐには使うことはない。
あと動画ファイルの再生を確認して追記したい。

byobuやtmuxを起動しようとして「tmux: need UTF-8 locale (LC_CTYPE) but have ANSI_X3.4-1968」が出たとき

byobuをインストールしたので起動しようとしたところ
tmux: need UTF-8 locale (LC_CTYPE) but have ANSI_X3.4-1968
というものが出て起動できなかった。
localeの設定を変更してうまく起動するようになった。

手順

byobuを実行するとUTF-8になっていないと出る

$ byobu
または
$ tmux
tmux: need UTF-8 locale (LC_CTYPE) but have ANSI_X3.4-1968

localeの確認するとUTF-8があるので大丈夫かと思ったけれどこれではだめらしい

$ locale -a
C
C.UTF-8
POSIX

locale.genを編集する

$ sudo vi /etc/locale.gen

"en_US.UTF-8 UTF-8"の#を消す

# en_US.ISO-8859-15 ISO-8859-15
en_US.UTF-8 UTF-8
# en_ZA ISO-8859-1

sudo付きでlocale-genを実行する
locale-genは/etc/locale.genで定義された各ロケールに対してlocaledefを呼び出すシェルスクリプトらしい

$ sudo locale-gen
Generating locales (this might take a while)...
  en_US.UTF-8... done
Generation complete.

localeを再度確認すると"en_US.utf8"が入っている

$ locale -a
C
C.UTF-8
POSIX
en_US.utf8

これでbyobuコマンドが使えるようになる

参考

My Ubuntu server shows tmux: need UTF-8 locale (LC_CTYPE) but have ANSI_X3.4-1968 when I try to run tmux. How can I fix it? - Ask Ubuntu

Kindle本GWセールで気になったもの 2019年5月9日(木)まで

Kindle本GWセール 40%OFF以上 期間:2019年4月25日(木) 18時00分~2019年5月9日(木) 23時59分(日本時間)

ゲノム解析は「私」の世界をどう変えるのか? 生命科学のテクノロジーによって生まれうる未来 Kindle
60%引き 648円


・世界でもっとも強力な9のアルゴリズム Kindle
50%引き 1080円


Ubuntuスタートアップバイブル
50%引き 1960円


・低レベルプログラミング Kindle
40%引き 3110円


・世界標準MIT教科書 Python言語によるプログラミングイントロダクション 第2版:データサイエンスとアプリケーション Kindle
50%引き 2484円


・コンピュータの構成と設計 第5版 上 Kindle
50%引き 2,268円


・コンピュータの構成と設計 第5版 下 Kindle
50%引き 2,268円


フェイスブック 若き天才の野望 Kindle
50%引き 972円


・闘うプログラマー[新装版] ビル・ゲイツの野望を担った男達 Kindle
50%引き 972円


プログラミングコンテストチャレンジブック [第2版] ~問題解決のアルゴリズム活用力とコーディングテクニックを鍛える~ Kindle
59%引き 1440円


・詳解UNIXプログラミング 第3版 Kindle
40%引き 5378円


・プログラミングの心理学 【25周年記念版】 Kindle
50%引き 1404円


・ARCoreとUnityではじめるARアプリ開発 Kindle
55%引き 1361円


・世界で闘うプログラミング力を鍛える本 コーディング面接189問とその解法 Kindle
50%引き 2052円


プログラミングコンテスト攻略のためのアルゴリズムとデータ構造 Kindle
50%引き 1933円


・プログラムはなぜ動くのか 第2版  知っておきたいプログラムの基礎知識 Kindle
50%引き 1296円


・コンピュータはなぜ動くのか 知っておきたいハードウエア&ソフトウエアの基礎知識 Kindle
50%引き 1296円


・30日でできる! OS自作入門 Kindle
58%引き 1728円


技術書典6に行った

池袋で行われた技術書典6に行った

日時 2019/04/14 (日) 11:00〜17:00 場所 池袋サンシャインシティ2F 展示ホールD(文化会館ビル2F) techbookfest.org

以前は秋葉原で前回から池袋になったようだけれど、ついでに買い物とかしたいので秋葉原に戻してほしい。今回から最初の入場は1000円かかるようになったようで、この1000円は書籍代に使いたかったので13時に行った。

チェックしていったサークルはこちら

配置 サークル名 備考
ス10 虎の穴ラボ
ス03 株式会社メディアドゥ 無料配布
ス04 さくらのナレッジ レンサバ関連、ネットで見れるぽい
あ03 湊川あいの、わかば家。
い14 Raspberry Pi|もくもく会|
い25 おこめやエレクトロニクス ニキシー管
う06 Guri-Tech BLEセパレートキーボード
う13 電脳律速 UEFI|BIOSの機能や仕組み、株とPython
う24 シス管系女子会
う26 馬場研究所 自作PCLinuxルータに改造
う27 海洋軟件 UEFI読本
う37 へにゃぺんて フルスクラッチによる自作OS
う65 はましぎじゅつ モータードライバの作り方
え10 morihi-soc ハニーポットで得たログを分析
え40 はてな技術書典部 Hatena|Tech|Book
お29 旅するエンジニア フリーランス・リモートワークの旅するエンジニア
か05 理ろぐ ブログで知って気になっていた
か10 インターステラ株式会社 スクレイピング
か30 YATAYA2000 Live2D
け38 オライリー
け42 Outlaw Tech|VRM、Unity、3Dアバター
け74 きりみんちゃんねる フリーランスを完全に理解できる本
こ19 モザイク研究所 量子プログラミング言語Q#
こ20 SoNeO:Automata IBM|QとBlueqatでゼロから始める量子コンピュータ
こ21 マイナビ ディープラーニング
さ02 くるみ割り書房 React

いくつか欲しいものも売り切れていて買えなかったけれど欲しかった量子系やフリーランスの本を買った。また興味はあったものでも内容が薄かったりすぐやめてしまいそうなものはごめんなさいした。量子系は数学だらけで難しそうなので時間をかけて読みたい。

  • モザイク研究所
    f:id:ultra-genma:20190414224852j:plain

  • 旅するエンジニア、虎の穴ラボ f:id:ultra-genma:20190414224901j:plain とらのあなは無料配布でvol.1とvol.1.5は電子書籍無料らしい
    旅するエンジニアは旅のところ以外に興味があったのですぐに読んでみた。やっぱりフリーランスは楽しそうだし難しそう。でもいろいろイベント行ったり知り合い作るところから始めるのは楽しそう。

apt、apt-get、aptitudeの違い

サーバ立てたときなどいろいろパッケージをインストールするときにaptとapt-getとaptitudeがよく出てくるけども名前も書き方も似てるし違いがよくわから無かったので少し調べた。APTファミリーと言われるほど大きなプロジェクトで、思想の違いなどでいろいろ派生があるらしい。Debianでは現在aptが推奨されているようなので今後はaptを使っていこうと思った。

aptとapt-getとaptitudeの違い

APT: Advanced Package Toolの略

調べて見つけたものを並べただけで特になにかに注目して分類したわけではない

apt apt-get aptitude
違い apt-getの設計上のミスを修正 設計にミスあり APTの外部プロジェクトとして生まれたGUIをもったもの(未完成)
使用推奨 x x
アップグレード方法 apt upgrade apt-get upgrade aptitude safe-upgrade
アップグレードのパッケージ選択規則 緩い 現在のパッケージ構成を変えないため厳しい 緩い
フルアップグレード apt-get dist-upgrade apt full-upgrade aptitude dist-upgrade
自動的にインストールされたパッケージの追跡 ユーザが手作業でこのコマンドを実行するべきではないためコマンドなし apt-get autoremoveで不要になった自動パッケージを削除 不要な自動パッケージを見つけ次第自動的に削除するためコマンドなし

aptとaptitude

書き方 aptコマンド aptitudeコマンド
インストール apt install foo aptitude install foo
検索 apt search foo aptitude serarch foo
インストールされたパッケージのリスト apt list aptitude search ~i
削除 apt remove foo aptitude remove foo
逆依存関係のリスト apt rdepends foo aptitude search ~Dfoo
パッケージの優先度の情報 apt policy foo/apt-cache policy foo aptitude versions foo
fooのパッケージ情報 apt show foo aptitude show foo
fooのソースをダウンロード apt source foo aptitude source foo
fooのソースのダウンロードと.debパッケージのビルド apt source --compile foo なし

参考

Debian管理者ハンドブック
https://debian-handbook.info/browse/ja-JP/stable/sect.apt-get.html

Debian wiki
https://wiki.debian.org/Aptitude#apt_vs_aptitude