2014年8月22日金曜日

raspberry piでroot file systemを2T以上のUSB HDDに移動する

raspberry piでroot file systemを2T以上のUSB HDDに移動するには、以下の手順を実行します。
ログ出力などすべてHDDに出力することによりSDカードを延命化できます。

Root filesystemのUSB HDD移行手順

1.(すでにmountされている場合)unmount
sudo umount /dev/sda1
2. パーティション作成
※ディスク丸ごとを1つのパーティションにする場合。
sudoparted /dev/sda
mklabel gpt
mkpart primary ext4 0 -1s
quit
3. ext4 file system作成
sudo mkfs.ext4 /dev/sda1
4. mountする
cd /media
sudo mkdir usbhdd
sudo mount /dev/sda1 /media/usbhdd
df -h
5. sdカード内容をコピー
※必要に応じてrsyncインストール。
sudo apt-get install rsync 
sudo rsync -axv / /media/usbhdd
6.起動時設定
sudo vi /boot/cmdline.txt
dwc_otg.lpm_enable=0 console=ttyAMA0,115200 console=tty1 root=/dev/sda1 
rootfstype=ext4 elevator=deadline rootwait rootdelay=10
※rootを/dev/sda1に変更とrootdelay追加

/etc/fstabで「/」のデバイスを/dev/sda1に修正します。
sudo vi /media/usbhdd/etc/fstab
proc            /proc           proc    defaults          0       0
/dev/mmcblk0p1  /boot           vfat    defaults          0       2
/dev/sda1  /               ext4    defaults,noatime  0       1
#/dev/mmcblk0p2  /               ext4    defaults,noatime  0       1
# a swapfile is not a swap partition, so no using swapon|off 
from here on, use  dphys-swapfile swap[on|off]  for that
※ /bootのデバイスはRaspbianのバージョンによって異なります(StretchなどではPARTUUID...となっています)。

7.再起動
sudo reboot

※2018/08/21追記 - Raspbian Stretch Lite (version : 2018 June)での上記手順を実行することができます。
※2020/07/13追記 - Raspbian Busterでも上記手順を実行することができます。

2012年2月11日土曜日

LuaでSQL Serverのテーブルを選択する

LuaでSQL Serverのテーブルを選択するには、以下のコードを実行します。
require "luasql.odbc"
env = assert(luasql.odbc())
-- MSSQLというODBC DSNに接続
conn = assert(env:connect("MSSQL", "sa", "password"))
-- クエリーを実行
cur = assert(conn:execute(
  "select company_id, company_name from company"))
-- 返された行を表示
row = cur:fetch ({}, "a")
while row do
  print([[会社ID:]] .. row.company_id .. 
    [[ 会社名: ]] .. row.company_name)
  row = cur:fetch (row, "a")
end
-- 閉じる
cur:close()
conn:close()
env:close()

動作環境
Lua for Windows 5.1.4, Microsoft SQL Server 2008 R2 SP1 Express

2011年6月30日木曜日

H2 Database上でsardineでWebDAVサーバと連携するユーザ定義関数のまとめ

WebDAVサーバ上のリソース情報の取得


WebDAVサーバ上のファイルを列挙する関数を作成する
WebDAVサーバ上のファイルの最終更新日時を取得する関数を作成する
WebDAVサーバ上のファイルの作成日時を取得する関数を作成する
WebDAVサーバ上のファイルのサイズを取得する関数を作成する
WebDAVサーバ上のファイルのコンテントタイプを取得する関数を作成する
WebDAVサーバのディレクトリ上のファイルのURLを列挙する関数を作成する
WebDAVサーバ上のリソースが存在するか調べる関数を作成する
WebDAVサーバ上のディレクトリを列挙する関数を作成する


WebDAVサーバ上のリソースの操作


BLOBをWebDAVサーバ上のファイルとしてアップロードする関数を作成する
CLOBをWebDAVサーバ上のファイルとしてアップロードする関数を作成する
WebDAVサーバ上のファイルをBLOBとして返す関数を作成する
WebDAVサーバ上のファイルをCLOBとして返す関数を作成する
WebDAVサーバ上のファイルをリネームする関数を作成する
WebDAVサーバ上のファイルをコピーする関数を作成する
WebDAVサーバ上のファイルを削除する関数を作成する

2011年4月4日月曜日

H2 DatabaseとSchemaCrawlerでテーブルのカラムを列挙する関数を作成する

H2 DatabaseとSchemaCrawlerでテーブルのカラムを列挙する関数を作成するには、以下のスクリプトを実行します。

create alias if not exists sc_get_columns as $$ 
import java.io.*;
import java.util.*;
import java.sql.*;
import org.h2.tools.*;
import java.net.*;
import schemacrawler.schema.*;
import schemacrawler.schemacrawler.*;
import schemacrawler.utility.*;
@CODE
ResultSet sc_get_columns(String jdbcDriver, String url,
String user, String password, String schemaName,
String tableName)
throws Exception
{
if( jdbcDriver == null ){
throw new Exception("jdbcDriver is not specified.");
}
if( url == null ){
throw new Exception("url is not specified.");
}
if( user == null ){
throw new Exception("user is not specified.");
}
if( password == null ){
throw new Exception("password is not specified.");
}
if( schemaName == null ){
throw new Exception("schemaName is not specified.");
}
if( tableName == null ){
throw new Exception("tableName is not specified.");
}
Class.forName(jdbcDriver);
Connection conn = null;
SimpleResultSet rs = new SimpleResultSet();
rs.addColumn("POS", Types.NUMERIC, 4, 0);
rs.addColumn("NAME", Types.VARCHAR, 4096, 0);
rs.addColumn("TYPENAME", Types.VARCHAR, 4096, 0);
rs.addColumn("DECIMAL_DIGITS", Types.NUMERIC, 4, 0);
rs.addColumn("SIZE", Types.NUMERIC, 10, 0);
rs.addColumn("WIDTH", Types.VARCHAR, 4096, 0);
rs.addColumn("NULLABLE", Types.BOOLEAN, 1, 0);
try
{
conn = DriverManager.getConnection(url, user, password);
SchemaCrawlerOptions options = new SchemaCrawlerOptions();
options.setSchemaInfoLevel(SchemaInfoLevel.maximum());
Database db = SchemaCrawlerUtility.getDatabase(conn, options);
Schema schema = db.getSchema(schemaName);
if( schema != null ){
Table table = schema.getTable(tableName);
if( table != null ){
Column columns[] = table.getColumns();
for(int li=0;li<columns.length;li++){
rs.addRow(columns[li].getOrdinalPosition(),
columns[li].getName(),
columns[li].getType().getTypeName(),
columns[li].getDecimalDigits(),
columns[li].getSize(),
columns[li].getWidth(),
columns[li].isNullable());
}
}
}
}
finally
{
if( conn != null )conn.close();
}
return rs;
}
$$

実行例
select * from
sc_get_columns('org.postgresql.Driver',
'jdbc:postgresql://localhost:5432/postgres',
'postgres', 'postgres', 'public', 'test1');

※以下のjarをCLASSPATH環境変数に追加
schemacrawler-8.5.1.jar, schemacrawler-postgresql-8.5.1.jar

○動作環境
JDK6 Update23, H2 Database 1.2.149 (2011-01-07), SchemaCrawler 8.5.1

○関連情報
・SchemaCrawlerのウェブサイト
http://schemacrawler.sourceforge.net/
・H2 Databaseに関する他の記事はこちらを参照してください。