2011年11月20日日曜日

MySQLのテーブルを一括削除するワンライナー

モデル定義からテーブルを自動生成できるフレームワークでガチャガチャやってると、
外部キー制約とかに引っかかってうまく消えなくなったりする。

無理やり片っ端から消すワンライナー。
mysql -Br -u【ユーザ名】 -p【パスワード】 【スキーマ名】 -e "show tables;" | tail -n +2 | xargs -i{} mysql -u【ユーザ名】 -p【パスワード】 【スキーマ名】 -e "SET FOREIGN_KEY_CHECKS=0; drop table {};"

バッチモードで実行することで枠線なし、tailの行数を+2指定する事で「Tables_of_【スキーマ名】」の行を削り取る。
あとは外部キー制約外し→drop tableのコンボをひたすら叩き込む。

必要であればtailとxargsの間でgrepとかで必要なテーブルのみに絞り込む。
(というか絞り込まないんだったらdrop databaseでいいじゃんって話ではある)

MySQLの文字コードをUTF-8に(Ubuntu)

my.cnfを編集するとバージョンアップの時に面倒なので、
/etc/mysql/conf.d 以下に、以下の内容でファイルを作る。
[client]
default-character-set=utf8

[mysqld]
default-character-set=utf8
skip-character-set-client-handshake
ファイル名は一応 charset.cnf とかそれっぽい名前にした。

2011年11月17日木曜日

linux版chromeでメモリ開放ボタンが出るようにする

/usr/bin/google-chrome の最後の行

exec -a "$0" "$HERE/chrome" "$@"

exec -a "$0" "$HERE/chrome" "--purge-memory-button" "$@"
こうする。

2011年11月7日月曜日

DjangoのModelFormにidを追加する

普通にModelからModelForm作ってas_pとかしてもidは含まれない。
でもちょっとした理由によりModelFormにまとめて扱いたかったので
何とかしてみた。

Modelがこんな感じだとして
class Person(models.Model):
    name = models.CharField("名前",max_length=50)
    birthday = models.DateField("誕生日")
ModelFormには「id」って名前でフィールドを追加すればいいっぽい。
class PersonForm (forms.ModelForm):
    id = forms.DecimalField()

    class Meta:
        model = Person
        fields = ('name','birthday','id')
しばらく「pk」でやってて詰まってた。

2011年11月3日木曜日

Linkstation FW1.54でSSHできるようにした

LS-CHLv2をFW 1.54にした。

標準ファームウェアだともちろんtelnetもsshも使えないので
とにかくrootで繋げられるようにする。

前提は以下。

  • シリアルコンソールは無し
    (ケーブルはあるけど加工が面倒くさくてやってない)
  • 箱は開ける
  • 母艦はUbuntu 11.10 Linkstationのディスクが読み書きできる

1.箱開けてディスクを取り出し、母艦に繋ぐ。

2.パーティションが3つ認識されるのでルートパーティションを探す。etcがあるやつ。

3./etc/init.d/sshd.sh をsudoでエディタで開き、

強制的にフラグを変更する行を追加する。
[ -f /etc/nas_feature ] && . /etc/nas_feature

[ -f /etc/nas_feature ] && . /etc/nas_feature
SUPPORT_SFTP=1
/etc/nas_feature を書き換えても再起動すると書き戻されてしまう。


4./etc/sshd_config をsudoでエディタで開き、二ヶ所変更。

#PermitRootLogin yes
PermitRootLogin no
↓ yesの方を有効にする。
PermitRootLogin yes
#PermitRootLogin no

#PermitEmptyPasswords no
↓ yesの行を追加する。
#PermitEmptyPasswords no
PermitEmptyPasswords yes

5./etc/shadow をsudoでエディタで開き、
rootのパスワードを消す。
オーナーの書き込み権限も無いのでパーミッション振ってから。
sudo chmod o+w shadow 
root:$1$$??????????????????????:11009:0:99999:7:::

root::11009:0:99999:7:::
6.アンマウントしてlinkstationに繋ぎ戻す。

7.ユーザ名rootでssh接続。パスワード無しでログイン出来る。

8.迅速にrootパスワードを変更。
passwd
ユーザ追加などは適宜。