読者です 読者をやめる 読者になる 読者になる

Azureの小ネタ (改)

~Azureネタを中心に、色々とその他の技術的なことなどを~

mavenでJettyをさくっと動作させるまで

mavenでJettyを実行するところまでの備忘録。実行には、jetty-maven-pluginを使います。

必要なもの

  • Java 8
  • Maven 3.3
  • Windows (環境でやってます)

Javaを設定しJAVA_HOMEを設定後、パスに追加する。mavenを解凍し、maven/bin もパスに追加する。

ちなみに、maven-jetty-pluginは以下を参照。

WebApps プロジェクト作成

以下のmvnコマンドを実行すると、test-serverフォルダが作成される

$ mvn archetype:generate -DarchetypeArtifactId=maven-archetype-webapp -DgroupId=test.webapp -DartifactId=test-server -Dpackage=test.webapp -DinteractiveMode=false

以下のように出力される

[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] >>> maven-archetype-plugin:2.3:generate (default-cli) > generate-sources @ standalone-pom >>>
[INFO]
[INFO] <<< maven-archetype-plugin:2.3:generate (default-cli) < generate-sources @ standalone-pom <<<
[INFO]
[INFO] --- maven-archetype-plugin:2.3:generate (default-cli) @ standalone-pom ---
[INFO] Generating project in Batch mode
[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating project from Old (1.x) Archetype: maven-archetype-webapp:1.0
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: basedir, Value: c:\Workspace\eclipse\ws-p\ztest
[INFO] Parameter: package, Value: test.webapp
[INFO] Parameter: groupId, Value: test.webapp
[INFO] Parameter: artifactId, Value: test-server
[INFO] Parameter: packageName, Value: test.webapp
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] project created from Old (1.x) Archetype in dir: c:\Workspace\eclipse\ws-p\ztest\test-server
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 13.457 s
[INFO] Finished at: 2015-08-23T18:19:26+09:00
[INFO] Final Memory: 13M/193M
[INFO] ------------------------------------------------------------------------

ディレクトリ構成は以下のとおり。

C:.
└─src
    └─main
        ├─resources
        └─webapp
            └─WEB-INF

pom.xml の作成

以下のpom.xmlを用意する。jetty.versionは適宜修正。

dependencyは、以下を追加する。 * jetty-server * jetty-webapp

pluginには、以下を追加する。 * jetty-maven-plugin

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>test.webapp</groupId>
  <artifactId>test-server</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>test-server Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <properties>
    <jetty.version>9.3.2.v20150730</jetty.version>
  </properties>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.eclipse.jetty</groupId>
      <artifactId>jetty-server</artifactId>
      <version>${jetty.version}</version>
    </dependency>
    <dependency>
      <groupId>org.eclipse.jetty</groupId>
      <artifactId>jetty-webapp</artifactId>
      <version>${jetty.version}</version>
    </dependency>
  </dependencies>
  <build>
    <finalName>test-server</finalName>
    <plugins>
      <plugin>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-maven-plugin</artifactId>
    <version>${jetty.version}</version>
      </plugin>
    </plugins>
  </build>
</project>

インストール&実行

インストールを実行すると色々追加される。

mvn install
C:.
├─src
│  └─main
│      ├─resources
│      └─webapp
│          └─WEB-INF
└─target
    ├─classes
    ├─maven-archiver
    └─test-server
        ├─META-INF
        └─WEB-INF
            ├─classes
            └─lib

jettyを実行する。

mvn jetty:run

ログが表示され http://localhost:8080/ にアクセスしてHello Worldが表示されればOK。

[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building test-server Maven Webapp 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] >>> jetty-maven-plugin:9.3.2.v20150730:run (default-cli) > test-compile @ test-server >>>
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ test-server ---
[WARNING] Using platform encoding (MS932 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ test-server ---
[INFO] No sources to compile
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ test-server ---
[WARNING] Using platform encoding (MS932 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory c:\Workspace\eclipse\ws-p\ztest\test-server\src\test\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ test-server ---
[INFO] No sources to compile
[INFO]
[INFO] <<< jetty-maven-plugin:9.3.2.v20150730:run (default-cli) < test-compile @ test-server <<<
[INFO]
[INFO] --- jetty-maven-plugin:9.3.2.v20150730:run (default-cli) @ test-server ---
[INFO] Configuring Jetty for project: test-server Maven Webapp
[INFO] webAppSourceDirectory not set. Trying src\main\webapp
[INFO] Reload Mechanic: automatic
[INFO] Classes = C:\Workspace\eclipse\ws-p\ztest\test-server\target\classes
[INFO] Logging initialized @4335ms
[INFO] Context path = /

仮想マシンのディスクを拡張する Linux編

前回は、Windows 仮想マシンのディスクを拡張したので、今回はLinux 仮想マシンでも同様に拡張してみたいと思います。

各ディストリビューションによって挙動が違うことが予想されることから、UbuntuとCentOSでそれぞれ試してみたいと思います。

Ubuntu 14.04 LTS

最新ではありませんが、Long Term Support ということで 14.04 で試してみます。さくっとUbuntu Server 14.04 LTS で仮想マシンを作成し、追加のディスクをアタッチしておきます。以下の通り、Linux仮想マシンのルートパーティションは、Windowsと違い30GBと小容量です。

以下は df の結果(余分なもの除く)

azureuser@disktestubu:~$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1        29G  946M   27G   4% /
/dev/sdc1        30G   44M   28G   1% /data

この時点で、パーティションの状況は以下の通り。

azureuser@disktestubu:~$ lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0  29.3G  0 disk
└─sda1   8:1    0  29.3G  0 part /
sdc      8:32   0    30G  0 disk
└─sdc1   8:33   0    30G  0 part /data

次に仮想マシンを停止した後、Update-AzureDiskで、OS/Dataディスクを30G → 256GB と増やし、再度起動します。 なんとOSディスクは勝手に拡張されてますが、Dataディスクのほうはそのままです。クラウド上の仮想マシンですから、ルートパーティションを外部から操作することは出来ませんし、アンマウントすることも出来ませんから、勝手に拡張されるのは悪いことではないかもしれません。

azureuser@disktestubu:~$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       252G 1003M  241G   1% /
/dev/sdc1        30G   44M   28G   1% /data

/dev/sdc も256GBに拡張されていることが分かりますが、パーティションは自動拡張されません。

azureuser@disktestubu:~$ lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0   256G  0 disk
└─sda1   8:1    0   256G  0 part /
sdc      8:32   0   256G  0 disk
└─sdc1   8:33   0    30G  0 part /data

次にパーティションを拡張します。拡張方法は、fdisk/parted などコマンドで行います。アンマウントできるなら、アンマウントしたほうがよいでしょう。ここではインストールされているparted 2.3 を使いマウントしたまま実施してみました。パーティションの拡張後は、resize2fsでファイルシステムのサイズを変更して完了です。

詳細は割愛しますが、parted (resizepart) -> reboot -> resize2fs でいけました。サイズを大きくしすぎるとresize2fsで時間がかかりますのでご注意を。あと、事後にe2fsck とかもしたほうがよいでしょう。

以下が拡張後のdfの結果です。パーティション拡張時、既存のデータについてどうなるか不明なので念のためバックアップはお勧めします。ファイル1つ置いておいたら、無事でしたけども。

azureuser@disktestubu:/$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       252G 1003M  241G   1% /
/dev/sdc1       252G   60M  242G   1% /data

CentOS 6.6

次にシャチカビリティ高めのCentOS 6.6で試してみます。Ubuntuの場合と同じく、仮想マシンを作成し、Dataディスクをアタッチしておきます。

[azureuser@disktestcent ~]$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1        29G  2.4G   25G   9% /
/dev/sdc1        30G   44M   28G   1% /data

lsblkするとsdaには2つパーティションがあります。

[azureuser@disktestcent ~]$ lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0     11:0    1  4.3M  0 rom
sda      8:0    0   30G  0 disk
├─sda1   8:1    0   29G  0 part /
└─sda2   8:2    0 1000M  0 part

よく見るとスワップ用のパーティションぽいですが、AzureのCentOS仮想マシンには、デフォルトでスワップは設定されていませんので、盲腸のようなパーティション見たいです(不思議)

[azureuser@disktestcent ~]$ sudo parted /dev/sda print
Model: Msft Virtual Disk (scsi)
Disk /dev/sda: 32.2GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End     Size    Type     File system     Flags
 1      1049kB  31.2GB  31.2GB  primary  ext4            boot
 2      31.2GB  32.2GB  1049MB  primary  linux-swap(v1)

ここは事前にさくっと消しておいて、仮想マシンを停止させます。同様にUpdate-AzureDisk で拡張します。

さてCentOSはUbutuのように勝手にルートパーティション(/dev/sda1)は拡張されません。またアンマウントできないため、必然的にマウントしたまま作業することになりますがいくつか問題がありました。

  • CentOS 6.6 の parted 2.1 には、resizepartコマンドがない
  • resizeコマンドはあるが、マウントしたままだとエラーが起きる
  • fdisk でやってみたら、二度と起動しなくなった(やりかたが間違ってた可能性もあり)

というわけで、resizepart コマンドがサポートされているparted が必要です。しょうがないので、parted 3.2をソースからビルドして対応しました。Development toolやいくつかの*-devel パッケージを定義インストールして対処してください。

Parted - GNU Project - Free Software Foundation

ちなみにUbuntuのpartedは2.3なのにreizepart コマンドがありますが、ソースからビルドした2.4にはresizepart コマンドが無くて難儀しました。バックポートしたんでしょうか。また、CentOS 7系はparted 3.1 が入っているらしいので多分そのままで問題ありません。

手順は同様に、parted (resizepart) -> reboot -> resize2fs でOKでした。

[azureuser@disktestcent ~]$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       252G  2.8G  237G   2% /

データディスクについてはOSディスク同様実施できるかと思います(力つきた)

以上

仮想マシンのディスクを拡張する

2015年3月に、仮想マシンのOSディスク容量が127GBから緩和されています。詳細は以下のURLを参照していただくとして、最大1TBまで増加させることができます。

ただしポータル等から仮想マシンを作成すると、依然OSディスク容量は127GB(Windowsの場合)のままです。オンプレで作成したVHDをアップロードして使用する場合なら問題ありませんが、Azureで予め準備されているイメージを利用している場合、どうすればよいのでしょうか?

同時期にリリースされた Azure PowerShell v0.8.15(3月にリリースされた版)の履歴を見てみると、

github.com

なにやら、ResizedSizeInGB パラメータが追加されていますので、これで変更できるようです。

Add 'ResizedSizeInGB' pramater for the following cmdlets
Update-AzureDisk
Set-AzureOSDisk
Set-AzureDataDisk (DiskName parameter is also added along with ResizedSizeInGB)
続きを読む