Ubuntu Proを使ってみる

少し前に個人利用であれば、Proバージョンを無償で使用できるようになった。そこで、このサイトとは別に個人で利用しているサーバーのUbuntuをProにアップグレードしてみる。

Ubuntu Oneアカウント作成

Proバージョンの利用を始めるには、Ubuntu Oneアカウント作成しTokenを発行する必要がある。まだ持っていない場合は、以下のURLにアクセスしてアカウントを作成する。
https://login.ubuntu.com/

ログイン後、トップ画面に戻り、右上メニューのUbuntu Pro dashboadをクリックする。

画面が切り替わり少し待つと以下のような画面が表示されFree Personal Tokenが発行される。

Ubuntu Proにアップグレードする

Ubuntu Proを利用したいサーバー上で以下のコマンドを入力する。

sudo apt update
sudo apt upgrade
# 必要ならここでサーバー再起動
sudo pro attach 先ほどのトークン
sudo apt install ubuntu-advantage-tools
sudo apt update
sudo apt upgrade

AWSのUbuntuを22.04.1にアップグレードする

AWS上のUbuntuをアップグレードしたときの手順を記録しておく。

注意)アップグレード後、phpが動かなくなってしまった。5の設定変更を実施したら再び動くようになった。

1.ファイアウォールの確認と設定

do-release-upgradeをリモートで実行し、アップグレード作業を行う場合は、1022 portの使用が推奨されている。ファイアウォールを実行している場合、事前にportの開放を行う。

sudo ufw allow 1022/tcp comment 'Temp open port ssh tcp port 1022 for upgrade'

2.セキュリティグループの設定

セキュリティグループのインバウンドルールに1022 portの許可を追加する。アップグレード作業にしか使わないportであるため、アクセス範囲は可能な限り狭く設定する。

3.アップグレードコマンドの実行

sudo do-release-upgrade

スクリプトの実行後、サーバーを再起動する。

4.Tera Termでログイン出来るようにする

Ubuntu 22ではssh-rsaが無効になっているため、Tera Termを使ってログインすることが出来ない。そこで下記のコマンドを実行して、ssh-rsaを有効にする。(Tera Termが使えないだけで、他の手段であればログイン出来る。Powershellや他のLinuxサーバーのsshコマンドでログインする。)

sudo su -
cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config_org
sed -i '1s/^/PubkeyAcceptedAlgorithms=+ssh-rsa\n/' /etc/ssh/sshd_config
grep PubkeyAcceptedAlgorithms /etc/ssh/sshd_config
systemctl restart ssh.service

5.php8.1を有効にする

Ubuntu 22ではphp7.4が削除され、php 8.1が標準になっている。以下のコマンドでphp7.4の設定を削除して、php8.1を有効にする。

sudo a2dismod php7.4
sudo a2enmod php8.1
sudo service apache2 restart

6.セキュリティグループの設定

セキュリティグループのインバウンドルールの1022 portの許可を削除する。

Stable DiffusionをWSL上のUbuntu22.04で動かす

環境

Windows 11
WLS2
Ubuntu 22.04
Python 3.10.4

Hugging Faceのアカウント作成

Hugging Faceのアカウント作成し、Tokenを取得する。ユーザーの設定画面のAccess Tokenを開き、New tokenをクリックしてTokenを作成する。後で使用するためコピーしておく。※Email認証がまだの場合はボタンが非活性になっているので注意

作成時の名前は適当で良い。

インストール

pip install diffusers==0.2.4 transformers scipy ftfy

実行

下記の通り実行し、Tokenを入力する。

$ huggingface-cli login

        _|    _|  _|    _|    _|_|_|    _|_|_|  _|_|_|  _|      _|    _|_|_|      _|_|_|_|    _|_|      _|_|_|  _|_|_|_|
        _|    _|  _|    _|  _|        _|          _|    _|_|    _|  _|            _|        _|    _|  _|        _|
        _|_|_|_|  _|    _|  _|  _|_|  _|  _|_|    _|    _|  _|  _|  _|  _|_|      _|_|_|    _|_|_|_|  _|        _|_|_|
        _|    _|  _|    _|  _|    _|  _|    _|    _|    _|    _|_|  _|    _|      _|        _|    _|  _|        _|
        _|    _|    _|_|      _|_|_|    _|_|_|  _|_|_|  _|      _|    _|_|_|      _|        _|    _|    _|_|_|  _|_|_|_|

        To login, `huggingface_hub` now requires a token generated from https://huggingface.co/settings/tokens .
        
Token: 
Login successful
Your token has been saved to /home/ユーザーID/.huggingface/token

Hugging Faceにログインし、以下のページにアクセスして、Access repositoryをクリックする。
https://huggingface.co/CompVis/stable-diffusion-v1-4

cudaの設定が面倒なので、今回はcudaなしで実行する。

from diffusers import StableDiffusionPipeline

pipe = StableDiffusionPipeline.from_pretrained("CompVis/stable-diffusion-v1-4", use_auth_token=True)

prompt = "a photograph of an astronaut riding a horse"

image = pipe(prompt)["sample"][0]

image.save("horse.png")

image

実行結果

Ubuntu 22.04にpyopenjtalkをインストールする

pyopenjtalkの依存関係で使用しているライブラリがPython 3.10に対応していないため、インストール出来なかった。Ubuntu 22.04ではPython 3.10がデフォルトになっている。そこで、仮想環境を構築してPython 3.9で動くようにした。

まず、Python 3.9をインストールする。

sudo apt install software-properties-common
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt install python3.9
sudo apt install python3.9-dev
sudo apt install python3.9-distutils

virtualenvをインストールして、Python 3.9の仮想環境を構築する。この時VSCODEの作業フォルダ内に作成すれば、VSCODE上でも認識されて使用することが可能になる。

pip install virtualenv
virtualenv -p python3.9 p39

Python 3.9の仮想環境を有効にして、pyopenjtalkをインストールする。

source vscode/p39/bin/activate
pip install --upgrade setuptools pip
pip install pyopenjtalk

仮想環境を抜ける場合は下記を実行する。

deactivate

無料のSSL証明書をインストールする(Ubuntu 22.04版)

No-IPドメインでLet’s Encryptの証明書を使うことが出来る。

事前確認

・ドメイン名を取得していること(今回はNo-IPを使用する)
・80、443ポートが外部に開放されていること

Certbotをインストールする

sudo snap install core; sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot

SSL証明書の取得とApacheへの設定の追加

sudo certbot --apache

取得と設定に成功すれば、下記の通り表示される。

Successfully deployed certificate forドメイン名 to /etc/apache2/sites-available/000-default-le-ssl.conf
Congratulations! You have successfully enabled HTTPS on https://ドメイン名

自動更新のタスクもこの処理で設定されるので、特にこれ以上することはないが、念のため下記のコマンドで自動更新のテストが可能となっている。

sudo certbot renew --dry-run

Ubuntu Server 22.04 LTSをインストールする

目的

開発用のサーバーをUbuntu Server 22.04で再構築する。

Ubuntu Serverのインストール

下記からISOファイルをダウンロードして、USBフラッシュドライブに書き込む。
https://jp.ubuntu.com/download

SSHのインストールのチェックを入れるのを忘れずに、他はインストーラーの指示通りに入力する。

MariaDBのインストール

ここではインストールのみ行い、設定は後程行う。

sudo apt install mariadb-server
sudo mysql_secure_installation

Apache、phpのインストール

phpを使用することを前提としたインストールと、設定を行う。

sudo apt install apache2
sudo a2enmod rewrite
sudo a2enmod ssl
sudo a2ensite default-ssl
sudo apt install php libapache2-mod-php php-fpm php-common php-mbstring php-xmlrpc php-gd php-xml php-mysql php-cli php-zip php-curl php-imagick php-intl

.htaccesによる、設定の上書きを有効にする。

sudo vi /etc/apache2/apache2.conf

<Directory /var/www/>
	Options Indexes FollowSymLinks
	AllowOverride all
	Require all granted
</Directory>

sudo service apache2 restart

Webminのインストール

sudo apt install wget apt-transport-https software-properties-common

wget https://download.webmin.com/jcameron-key.asc
cat jcameron-key.asc | gpg --dearmor >jcameron-key.gpg
sudo cp jcameron-key.gpg /etc/apt/trusted.gpg.d/jcameron-key.gpg

sudo apt update
sudo apt install webmin
sudo /usr/share/webmin/changepass.pl /etc/webmin ユーザー名 パスワード

日本語設定

sudo apt install language-pack-ja
localectl list-locales | grep ja
sudo localectl set-locale LANG=ja_JP.UTF-8

Tomcat 9のインストール

sudo apt install tomcat9 tomcat9-admin

Jenkins運用のため、/etc/tomcat9/context.xmlに下記を追記する。

    <Resources cacheMaxSize="102400" />

/etc/tomcat9/server.xmlのAJP/1.3の設定を下記の通り変更する。

    <Connector protocol="AJP/1.3"
               address="localhost"
               port="8009"
               redirectPort="8443"
               secretRequired="false" />

/etc/tomcat9/tomcat-users.xmlに下記を追記する。

  <role rolename="manager-script"/>
  <user username="ユーザー名" password="パスワード" roles="manager-script"/>

/usr/lib/systemd/system/tomcat9.serviceに下記を追記する。

Environment="CATALINA_OPTS=-DJENKINS_HOME=/opt/jenkins/"
ReadWritePaths=/opt/jenkins/

/etc/tomcat9/policy.d/50local.policyに下記を追記する。

grant codeBase "file:${catalina.base}/webapps/jenkins/-" {
    permission java.security.AllPermission;
};
grant codeBase "file:/opt/jenkins/-" {
    permission java.security.AllPermission;
};
sudo systemctl daemon-reload
sudo service tomcat9 restart

Jenkinsのインストール

/opt/jenkinsフォルダを作成し、フォルダにTomcatから書き込み可能な権限を付与する。

jenkins.warファイルをダウンロードし、/var/lib/tomcat9/webapps/に配置する。

ApacheとTomcatの連携の設定

sudo a2enmod proxy
sudo a2enmod proxy_ajp

/etc/apache2/conf-enabled/tomcat.confを作成し、下記の通り記載する。

ProxyPass /jenkins/ ajp://localhost:8009/jenkins/
ProxyPassReverse /jenkins/ ajp://localhost:8009/jenkins/
sudo service apache2 restart

Postfixのインストール

こちらのページにインストールと設定方法を記載した。