スパースバンドルディスクイメージでは、ファイルを削減しても容量が増えません。
そのため、削減した分の領域を再利用できるように以下のコマンドを実行する必要があります。
$ hdiutil compact filename.sparseimage
いろいろIT系のことをメモしてます。
スパースバンドルディスクイメージでは、ファイルを削減しても容量が増えません。
そのため、削減した分の領域を再利用できるように以下のコマンドを実行する必要があります。
$ hdiutil compact filename.sparseimage
SELinuxが有効な状態ではディレクトリやファイルのリソースにはタイプが付与されており、通常のtar コマンドでは現在のタイプを保持したままコピーすることはできない。そのため、starコマンドを使用する必要がある。
$ sudo yum install star
starを入れた後、コピー元のディレクトリに移動し、
# star cvf – . -H=exustar -xattr | (cd コピー先; tar xvf -)
とするとコピーできる。
gitで管理されているファイルを普通にrmコマンドで削除してからcommitしようとすると次のようなメッセージが出てコミットの対象外になってしまいます。
$ git status
# On branch master
# Changes to be committed:
# (use “git reset HEAD <file>…” to unstage)
#
# modified: HogehogeApp/static/css/bootstrap.css
# new file: HogehogeApp/static/css/bootstrap.css.map
# modified: HogehogeApp/static/css/bootstrap.min.css
略
#
# Changed but not updated:
# (use “git add/rm <file>…” to update what will be mmitted)
# (use “git checkout — <file>…” to discard changes in working ectory)
#
# deleted: HogehogeApp/static/css/base.css
# deleted: HogehogeApp/static/css/changelists.css
# deleted: HogehogeApp/static/css/dashboard.css
# deleted: HogehogeApp/static/css/forms.css
略
解決策は簡単で数が少ないときは、deletedで示されたファイルを
$ git rm HogehogeApp/static/css/base.css
としてからcommitすればOKなのですが、数が多いと都度rmするのは大変なので、
$ git status | grep deleted | awk ‘{print $3}’ | xargs git rm
$ git commit
と一括で削除してからcommitしましょう。
Macではファイル名にスペースが含まれる場合があるので、そのままでは簡単に変更できない。
また、iTunesでは同じフォーマットでも拡張子によってオーディオブック形式になり倍速再生が可能になったりする。
変更したいファイルが同一のフォルダにある場合は次のコマンドで一括変更が可能。(例:m4a → m4b)
$ for i in *.m4a; do mv “$i” “${i%.m4a}.m4b”; done
inの後ろはlsではなく*にするのがポイント。lsではスペースが上手く処理できない。
古いCentOSやFedoraには標準状態ではMTAとしてsendmailが導入されています。
sendmailは非常に歴史は古いですが使い勝手が悪いため、Postfixがインストールされていない場合は、以下のインストール手順でインストールします。
# yum install postfix
postfixのインストールに成功したら、sendmailの削除を行います
(順序を間違えると依存関係でcrontabsなど必要なソフトまで削除される)
# yum remove sendmail
サーバー内のサービス用のアカウント(wwwとかftpとか)のエラーメールは全てrootに届くようにaliasが設定されている。
これを適切な管理者に設定しておかないとエラーメールがローカルに貯まってしまう。
/etc/aliasesの最下行に
root: hoge@hogehoge.com
といった管理者のメアドを追加し、
# newaliases
コマンドを実行して、設定内容を反映させておく。
以下のように設定を変更します。
グローバルインターフェースにてSMTPをlistenする
(以下、diffの形式で変更点を記載しています。)
# diff main.cf.org main.cf
115,116c115,116
< #inet\_interfaces = $myhostname, localhost
< inet\_interfaces = localhost
—
> inet\_interfaces = $myhostname, localhost
> #inet\_interfaces = localhost
IPv4のみ使用するように設定
119c119
< inet\_protocols = all
—
> inet\_protocols = ipv4
メールボックスの形式としてMaildirを使用
419c419
< #home\_mailbox = Maildir/
—
> home\_mailbox = Maildir/
不必要なバナー表示を行わない
570a571
> smtpd\_banner = $myhostname ESMTP
送信元ホスト名やサイズのチェックを行う。
676a678,686
>
> disable\_vrfy\_command=yes
> smtpd\_helo\_required=yes
> mailbox\_size\_limit=1024000
> message\_size\_limit=1024000
postfixの起動設定を以下のコマンドで確認
# /sbin/chkconfig –list postfix
現在のランレベルがonになっていることを確認する。
以下のコマンドでpostfixのプロセスを起動させる
# /etc/init.d/postfix start
なお、プロセスが起動しないと、mailコマンドでメール送信しようとした時に以下のエラーが出るので注意。
$ postdrop: warning: unable to look up public/pickup: No such file or directory
サーバーを管理する際にGNU Screenを使うと作業を中断せずにサーバから一時的に切断することが出来て便利です。
しかし、rootで作業したままセッションを切断すると、ユーザーのアカウントが何らかの原因で使われた際に即rootになれるので危険です(sudo使えって話かもしれませんが^^;)
そのため、GNU Screenにパスワードを設定します。
まず、一旦screenを起動します。
$ screen
次に暗号化パスワード作成します。
$ ctrl-a :password
New screen password: 入力
Retype new password: 確認のために再入力
デフォルトのコマンド文字はctrl-aですが、.screenrcでコマンド文字を変更している場合はctrl-aの部分を設定したコマンド文字に変更してください。
コマンド文字の後で「:」を打つと画面下に文字入力できますので、「password」と打ち込んで、設定するパスワードを確認も含めて2度打ち込んでください。
$ ctrl-a ]
$ erNqsdebEHp
ctrl-aの後]を入力すると、画面に暗号化されたパスワードが表示されますので、これをメモしておきます。そして、.screenrcに
password erNqsdebEHp
を記入すると、再度screenにアタッチする際にパスワードを聞いてくるようになります。
急にParallels Toolsがおかしくなって、Xの起動時に画面が真っ暗になって起動しなくなりました。
Parallels Toolsを再インストールしようとしても、「処理」メニューには「Parallels Toolsの再インストール」ってメニューは 表示されるものの、選択してもイメージはマウントされず、困り果ててました。
いろいろ調べたところ、以下のコマンドでParallels Toolsをアンインストール出来ました。
$ sudo /usr/lib/parallels-tools/install -r
uninstallに成功後に再起動すると、再度「処理」メニューに「Parallels Toolsのインストール」が表示されるようになり、一からインストールすることが出来ました。
HomebrewはMac用のパッケージマネージャーです。ソースファイルをダウンロードしてきて、都度コンパイル&インストールを実施します。
似たようなもので有名なものにMacPortsなどがありますが、HomebrewはMacPortsとは異なり、あらかじめOSにインストールされているソフトを
極力利用するように設計されているため、MacPortsに比べて短時間で準備が完了します。
また、rubyで作成されているので、rubyが分かる人には設定ファイルなどが読みやすいという利点もあります。
インストールにはXcodeが必要ですので、あらかじめMac AppStoreからインストール(無料です)しておいて下さい。
Xcodeのインストールが出来ていれば、Homebrewのインストールは以下のコマンドを打つだけで完了します。
# ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)”
(例としてパッケージ名にemacsを指定しています。)
$ brew -v
$ brew search
$ brew install emacs
$ brew list
$ brew uninstall emacs
$ brew –config
$ brew update
$ brew outdated
$ brew upgrade
$ brew info emacs
$ brew edit emacs
Homebrew CaskとはGoogle Chromeなど主にバイナリで配布されていてインストールが面倒なソフトを素早くインストールするためのHomebrewの拡張コマンドです。
以下のコマンドを実行することで、cask拡張をHomebrewに追加することができます。
$ brew tap caskroom/cask
Homebrew Caskの使い方はCaskを使わない場合と似ています。
$ brew cask search
$ brew cask install google-chrome
$ brew cask list
$ brew cask uninstall google-chrome
$ brew cask info google-chrome
$ brew cask edit google-chrome
Google Chromeを使っていると、フォームに入力した内容が勝手に記録されて、次回以降の同じフォームへの入力時には前回入力した内容が表示されて入力が楽になる「オートコンプリート」機能があります。
非常に便利な機能なのですが、間違って入力した場合に項目を消すにはどうすればいいのか分かりませんでした。
ググったところ、ChromeのサポートページにはShift+Deleteで削除できると書いてあったのですが、Macで同じように試しても削除できません。
調べたところ、Mac用のChromeの場合は、削除したいオートコンプリートの項目をカーソルキーで選択しておいてから、「shift – fn – delete」の組み合わせを押すと削除できました。
mysqlのログローテートで少しはまったのでメモしておきます。
mysqlではサーバーのエラーログの他にクエリーログやスロークエリーログなどがあり、これらを一日一回logrotateを用いてローテーションさせたいと思いました。
CentOSには /etc/logrotate.d/mysqld が用意されており、内容を確認すると、
# cat /etc/logrotate.d/mysqld
# This logname can be set in /etc/my.cnf
# by setting the variable "err-log"
# in the [safe_mysqld] section as follows:
#
# [safe_mysqld]
# err-log=/var/log/mysqld.log
#
# If the root user has a password you have to create a
# /root/.my.cnf configuration file with the following
# content:
#
# [mysqladmin]
# password = <secret>
# user= root
#
# where "<secret>" is the password.
#
# ATTENTION: This /root/.my.cnf should be readable ONLY
# for root !
# Then, un-comment the following lines to enable rotation of mysql's log file:
以下略
のように記載がありましたので、その通り実行しました。
まず、mysqladminを用いてflush-logsコマンドを実行するための専用ユーザー(reload)を作成します。
$ mysql -u root -p mysql
> GRANT RELOAD ON *.* TO 'reload'@'localhost' IDENTIFIED BY 'password';
次に、そのユーザーの情報を/root/.my.cnfに記載します。
# cat - > /root/.my.cnf
[mysqladmin]
user=reload
password=<secret>
^C
# chmod 600 /root/.my.cnf
最後に、/etc/logrotate.d/mysqld に次のように記載します。
(保存ファイル数などは目的に合わせて変更してください)
/var/log/mysql/mysqld.log /var/log/mysql/slow.log /var/log/mysql/query.log {
daily
missingok
rotate 4
compress
delaycompress
notifempty
create 640 mysql mysql
sharedscripts
postrotate
# just if mysqld is really running
if test -x /usr/bin/mysqladmin && \
/usr/bin/mysqladmin ping &>/dev/null
then
env HOME=/root/ /usr/bin/mysqladmin flush-logs
fi
endscript
}
重要なのは
env HOME=/root/ /usr/bin/mysqladmin flush-logs
この部分で、パッケージインストール時点で用意されていたファイルには
env HOME=/root/
の記述がありませんでした。
logrotateはanacronから起動されるのですが、anacronは /etc/cron.d/0hourlyに記載された内容に従って、cronが/etc/cron.hourly/0anacronを読み込んで実行されます。
しかし、ここで /etc/cron.d/0hourly に
# cat /etc/cron.d/0hourly
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
01 * * * * root run-parts /etc/cron.hourly
とHOME=/の記述があるために、rootユーザーのHOMEが/と認識されてしまいます。
/直下に.my.cnfを置くことでも対応可能でしょうが、上記のようにenvコマンドを用いることで対応できますので、今回はこのように記載しました。