Linux」カテゴリーアーカイブ

2019年9月
« 8月    
1234567
891011121314
15161718192021
22232425262728
2930  

最近の投稿(電子情報)

アーカイブ

カテゴリー

MySQLでトラブル対応

仕事で動かしているサーバが動いていないとの連絡が入り、システムが動いていない。

他の方との共同のネタなので、サーバーの更新は慎重に行っているけど、今回は MySQL が落ちているのが原因。サーバーの定期的な更新作業後あたりから動かなくなっているので、最近更新されたパッケージを確認し、MySQL が含まれていたのでパッケージを一つ前のバージョンに落とそうと対応を行った。

しかしダウングレードでパッケージの不整合が出る中、無理やりダウングレードをおこなって MySQL を起動させようとするが、”mysqld got signal 11 ; This could be because you hit a bug.” といったメッセージで起動しない。

四苦八苦するも原因がつかめず、以前の状態に戻そうとバックアップ時に作成しておいたパッケージのバージョン情報を確認すると、パッケージが更新されて動かなくなったのではなく、パッケージが消されていたことが判明。原因を誤解していた。

OSの更新作業の中で、MySQL のメジャー更新で使っていたバージョンが標準パッケージから外されたみたい。メジャー更新すればいいのだろうけど、運用不安もあるので、MySQL の本家で公開しているパッケージを入れて、無事復旧。

長期運用とはいえ、更新は慎重に作業せねば。

gcj (GNU Compiler for Java) の使い方

いつもは Java を使わないけど、久々に java のプログラムの動作実験と思い、サーバ機に gcj (GNU Compiler for Java)を入れて使おうとしたら、コンパイラ javac とバイトコードインタプリタ java のつもりでコマンドを探すけど、見つからない。

gcj を見つけて “gcj HelloWorld.java” ってやってみたけど動かない。あらためて確認したら、バイトコード生成もできるし、直接機械語も生成できるけど、色々とオプション指定がいるみたい。なるほど。

// HelloWorld.java
public class HelloWorld {
  public static void main(String[] args) {
    System.out.println("Hello World!");
  }
}
# 機械語を直接生成する場合
$ gcj -o HelloWorld --main=HelloWorld HelloWorld.java
$ ls
HelloWorld  HelloWorld.java
$ ./HelloWorld
Hello World!

# バイトコードを生成して動かす場合
$ gcj -C HelloWorld.java
$ ls
HelloWorld.class HelloWorld.java
$ gij HelloWorld
Hello World!

プロセス状態 I (Idle Kernel Thread)

自宅のサーバの状態を見ていたら、青:sleep 灰:total の間の差が大きい。

変なプロセス走っていないかと心配したら、ps ax の出力でのステータスがIとかI< となっている項目。日本語のマニュアルを見ても意味不明。

英語のマニュアルを見たら、”Idle Kernel Thread”らしい。

緊急連絡システムのOS更新など

緊急連絡システムのOSが、Ubuntu/trusty でそろそろ、サポート期間に近づいているので、OS の更新を行った。

Ubuntu 更新

更新自体は、do-release-upgrade コマンドで、xenial に更新が進む。

$ sudo do-release-upgrade

しかしながら、openssh-server が、更新でエラーがでて、かなり悩んだ。解ってみれば、単純なミスで、自作の /etc/init.d/script を書いてあったけど、その insserv ヘッダで、ssh をコピーしてヘッダ部の # Provides: sshd の行を書き換えてなかった。

このおかげで、insserv が、ssh はすでに登録されている…と勘違いしていた。

緊急連絡システムの文字コードUTF-8 に変更

Ubuntu の更新をかけたら、php5 が使えなくなったため、php7.0 に更新を行うが、これに合わせ、取り扱い文字コードを EUC-JP から UTF-8 に変更を行った。

緊急連絡システムは、内部でデータベースを利用せず、テキストファイルですべてを管理しているが、最初は利用組織毎の設定ファイルや、データファイルをエディタでチマチマと修正を始めたけど、大量の組織のため、途中で断念。perl でファイル名や記載時のエンコーディングを修正するスクリプトを書いて一発変換。

あとは、プログラム中のエンコーディング依存の部分を修正し、送信できることを確認してひとまず移行作業完了。

Ubuntuを最新版にアップグレード(メモ)

Azure 上のサーバから、ubuntu を最新版にアップグレードするために、do-release-upgrade を実行せよとのメールが来た。Debian を使っていると、”aptitude update ; aptitude safe-upgrade”を定期的に実行して、大幅アップグレードの時には、/etc/apt/sources.list.d/* を触ってアップグレードを行っているけど、こういうプログラムがあるみたい。

管理している他のサーバは、すでに Ubuntu 16.04 xenial を導入済みで、最初に Azure を使い始めたこのサーバだけ、未だに Ubuntu 14.04 trusty 。

# lsb_release -a        # 現在の情報の確認
# do-release-upgrade -c # 更新が可能かチェック
# do-release-upgrade -s # 更新を実行

ただし、”do-release-upgrade -s” を実行したら、途中で ssh のコネクションが切れておかしくなる可能性があるから、以下のようなメッセージが表示される。Azure 上のサーバなので、1022 のポートを開けたりといった手間が必要そうだし、もう少し状況確認が必要かな。Ubuntu は慣れないなぁ…

SSH経由で実行していますが、続けますか? 

このセッションはSSH上で実行されているようです。アップグレードをSSH越しに行うことは推奨されません。アップグレードに失敗した時の復元が困難になるからです。 

続行する場合、追加のSSHデーモンをポート '1022' で起動します。 
本当に作業を進めてよろしいですか? 

続行する[yN] 

iPadでlinux仕事-Shelly Pro

仕事用の Surface Pro のキーボードがクソで、「T」の反応がダメダメなので、Bluetooth キーボードを購入。以前に、iOS,Windowsといった複数接続に切り替え可能で、接続相手に合わせてキーアサインも変更してくれる小型キーボードを購入していたけど、小さすぎてメールを打ったり、Linux サーバを触るときに、思うように打てずあんまり使わなくなっていた。

今回、Logicool の K380 を購入したけど、Mac のキーボードと同じ配列で複数のBluetooth接続を切り替えられるもの。OSに合わせてキーアサインを切り替える機能はない。

やはり、いつも使っているキーボードと同じなので、手に馴染む。それならばということで、iOS に ssh ターミナルソフト入れたら、Linux 仕事で違和感なく使えるか試したくなった。

日本語が使えるiOS用sshクライアント

以前に、ある程度日本語が使えるということで Termius という無料アプリを使っていたけど、emacs で漢字をつかっていると、文字位置がずれるので今ひとつ。

Shelly - SSH Client

今回、”iOS ssh 日本語”で検索をかけたら、この記事が比較や有料ソフトの値段なども記載してあってわかりやすかった。

最終的に入れたのは、Shelly Pro となりました。

実際に、ベッドで寝ながら複数のサーバ更新作業をやったけど、Ctrl-Caps交換ができないし、iPad は記号が英字キーボードの配置なので、キートップを確認しながらになったけど、まあまあ使える。

K380 には、iOS のキー配置も刻印されているので、便利。

ただし、iPad に入れて、”Pro” にアプリ内課金でバージョンアップ(¥600)したけど、iPhone に 同じく Shelly を入れたら、バージョンアップしようとしたら、¥480 の課金の画面が出てきた。値段も違うし、タブレット版とスマホ版は別物扱いしてるんだろうなぁ。

次の出張では、iPad mini とキーボードだけ…を試そうかな。


php5からphp7に移行

自宅サーバにて、毎朝 apache2 が止まる症状が続いた。調べてみると、php5 との相性が悪いみたい。

んで、当然ながら、他の管理しているサーバも動かないものが出てきた。ということで、職場の関連サーバも php7 に移行作業を行った。
Ubuntu(trusty) は、PHP5 で問題なし。

moodleサーバは、切り替えたら色々と表示されたな。

切り替えたら、アップロードできるファイルサイズ上限が2MBに減ってしまっていた。

(( /etc/php/7.0/apache2/php.ini ))
upload_max_filesize = 400M
post_max_size = 450M
memory_limit = 500M
# upload_max_filesize < post_max_size < memory_limit で要設定

(( apache 再起動 ))
$ sudo /etc/init.d/apache2 restart

OpenDNSによるセキュリティ対策

先日参加した、高専機構の情報担当者研修では、新しく導入された統一システムの機能説明や今後について色々と説明を受けた。

でも、興味深かったのは、OpenDNSとも呼ばれているCisco Umbrella 。DNSを使ったセキュリティ対策で、ブラックリストに掲載されているホストへの問い合わせがあったらブラックな正規IPアドレスを返さないことで怪しいホストに接続させない。また、怪しいか判断が困難なグレーゾーンのホスト名なら、OpenDNSのProxyのアドレスを返し、ユーザを怪しいサイト接続させず、実際はOpenDNSが怪しいサイトに接続しグレイな内容を分析して、最終的にブラック/グレイ/ホワイトを判断するというシステム。

設定は、DNS サーバのアドレスを、208.67.222.222 にするだけ。

学校では色々と問題がありそうだし、自宅でこの機能を試してみる。

(( /etc/bind9/named.conf.options ))
options {
    :
    forwarders {
        # Google public DNS
        #8.8.8.8;
        #8.8.4.4;
        # OpenDNS (Cisco Umbrella)
        208.67.222.222 ;
        208.67.220.220 ;
    };
    :
};

動作確認は、https://welcome.opendns.com にアクセスして、以下の表示になればいい。

Wikipedia の説明を見ると、以前はブラックなアドレスを引くと、Yahooの広告ページにリダイレクトされるので….といったことが書いてあるけど、今はどうなんだろ。”nslookup www.xxx”で、いかにも怪しいサイトのアドレスをひいたけど、同じだな。Cisco に OpenDNS が買収されてるから、変な広告はなくなったと思うんだけど。

サーバのメンテナンス

Azureサーバのバックアップ

管理しているAzureサーバだけど、クラウドだし簡単には落ちないとバックアップ処理を真面目にしてなかったけど、そろそろ対策をと設定を行った。

  • 各仮想サーバの定時処理で、主要データディレクトリを .tar.gzでバックアップ
  • 自室のサーバで、RAID-NAS上に仮想サーバのバックアップを rsync
  • 仮想サーバの容量逼迫を防ぐために、2月以上は削除。自室サーバは空き容量をみて削除時期を考えよう。

差分バックアップを加える(2017/10/19追記)

バックアップ処理、2週間おきに設定していたけど、いざという時のためにもう少し頻繁にバックアップを取りたい。
そこで、1週間毎に差分バックアップを取るように、処理を追加する。

MovableTypeの記事を復活

サーバ故障による移行作業で、CMS を MovableType から WordPress に変更したけど、古い記事の移行ができていなかった。自宅サーバも同様の移行作業を行い、過去記事の吸出しがうまくいったので、同様に電子情報の過去記事を吸い出し、WordPress にインポート。

# メモ

((追記))

古い記事を抽出する際に、preタグ内の空白が削除されてらぁ。おかげで、プログラムのコードのインデントが消えてしまってる。(x_x;;

自宅で監視カメラを動かしてみた

今度の週末は、家族旅行の予定。 だけど、子どもがその間、最近病院に連れて行った婆ちゃん猫を 心配している。

そこで、使っていなかったWebカメラで、急遽、監視カメラを動かしてみた。 奥さんからは、解像度低いじゃんとツッコミを受けるが、 もともとのWebカメラの性能だと思うし…

余りにも他愛もないコードだけど、 この手のお遊びプログラムは、 学生さんに「こんなこと簡単にできるよ」と見せることも多いので、 PHPコードに改良&コメント付けをしておく。

1307120855_320x240.jpeg

監視カメラを動かすまで

fswebcamが一番簡単に使えそうだったので…

(( fswebcamをインストール))
$ sudo aptitude install fswebcam

fswebcamの出力をそのまま画像形式で返すプログラム。

(( webcam.php ))
<?php
// 画像形式、キャッシュさせない
header( "Content-Type: image/jpg" ) ;
header( "Cache-Control: no-store, no-cache, must-revalidate" );
// 連続読み出し用にファイルロック
$flock = fopen( "/var/www-support/.webcam.lock" ,
                (file_exists( "/var/www-support/.webcam.lock" )
                 ? "rb+" : "wb+" )) ;
if ( flock( $flock , LOCK_EX ) ) {
   system( "/usr/bin/fswebcam -q -d /dev/video1"
           ." -p YUYV"    // 画像形式
           ." -D 0"       // delay
           ." -S 3"       // skip frame
           ." -r 320x240" // 解像度
         //." -r 640x480"
           ." --title \"tsaitoh.net's webcam\""
           ." --jpeg 75 -" ) ;
   fclose( $flock ) ;
}
?>

webcam.php の出力画像を、連続で読み出すように、 JavaScriptで設定を書き加える。 <meta http-equiv=”refresh” content=”5″> みたいな方法だと、reload の度に画像がちらつくので、JavaScriptで reload させることになった。

(( index.php ))
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" id="sixapart-standard">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="viewport" content="width=320,height=320,initial-scale=1"/>
<title>自宅監視カメラ</title>
<script type="text/javascript">
<!--
var count = 0 ;
function reload() {
   count = (count + 1) % 100 ;
   // 画像を更新(キャッシュ画像を使わないように番号付)
   var img = document.getElementById( "image" ) ;
   img.src = "webcam.php?"+String(count) ;
   img.id  = "image" ;
   // 動きの少ない相手用に確認表示
   var txt = document.getElementById( "text" ) ;
   txt.innerText = "自宅監視カメラ: "+String( count ) ;
}
// -->
</script>
</head>
<body>
<p align="center">
   <img id="image" src="webcam.php" onload="reload()" />
   <div id="text"></div>
</p>