CentOS に ptrash をインストールする


:warning: 警告 (2015-07-18 記載)
================================

以下の理由から、`ptrash` の利用は `rm` に比べて危険で不便だと判断したため、私はすでに使っておりません。記事は残しておきますが、ptrash の利用について積極的に推奨は致しません。

* 常に `rm -rf` と同等なので、誤ってディレクトリなどを削除してしまう可能性がある。
* 常に `rm -rf` と同等なので、権限不足で削除できなかった場合にもエラーメッセージが表示されない。
* 誤って削除した場合、[後述の通り](#ptrashコマンドの使い方) 復元できないことがある。

----------------------------------------------------------------------



導入
====
**[ptrash](http://pjp.dgplug.org/tools/ "`ptrash'  moves  the  named  file(s)  to  the trash directory, located under the home directory of a user. It is  a  simple console  based  utility,  I wrote after deleting some files, which I couldn't retrieve  back.  'ptrash'  can  also  restore file(s)  back  to  there  original  location.  It has really proved very much handy to me.")** は、[Fedora](http://ja.wikipedia.org/wiki/Fedora "CentOS の派生元である Red Hat Enterprise Linux (RHEL) の派生元") に公式採用されているごみ箱送りコマンドです。[rm](http://ja.wikipedia.org/wiki/Rm_%28UNIX%29 "rm（アールエム）はPOSIXおよびSingle UNIX Specificationで規定されているコマンドである。rmは「remove」の略であり、ファイルシステムよりファイルを削除するために使用される。AT&T UNIXの最初のバージョンから存在していた。")コマンドはファイルやディレクトリをそのまま削除しますが、`ptrash`コマンドは`~/.trash`に移動します。[^1]

Fedoraの一部となっているptrashですが、[CentOSの標準のYumリポジトリなど](http://wiki.centos.org/AdditionalResources/Repositories "CentOSで利用可能なリポジトリ - CentOS Wiki")には存在しません。そこで、Fedoraの標準のYumリポジトリからソースRPMパッケージを取得し、CentOS上でビルドしてRPMパッケージを作成します。実運用環境と同じバージョンのOSがインストールされている開発環境があれば、ビルドまでは開発環境で行い、作成したRPMパッケージを実運用環境にアップロードしてインストールすると良いでしょう。



リポジトリ定義ファイル (*.repo) のシンタックスハイライト
========================================================
CentOS標準のYumリポジトリで提供されているテキストエディタのうち[vi](http://ja.wikipedia.org/wiki/Vi "vi（ヴィーアイ）は、Emacsと共にUNIX環境で人気があるテキストエディタ。ビル・ジョイによって開発された。名の由来はVIsual editorないしVisual Interfaceとされる。後発のUnix系OSに搭載されているviは、上位互換のVimやnviであることが多い（viコマンドでvimやnviが起動する）。")・[Vim](http://ja.wikipedia.org/wiki/Vim "Vim（ヴィムまたはヴィアイエム）は、vi から派生し、発展した高機能なテキストエディタである。")以外のエディタは、初期状態で`.repo`ファイルのシンタックスハイライトが機能しません。以下のように設定ファイルの編集などを行い、シンタックスハイライトを有効にします。

[gedit](http://ja.wikipedia.org/wiki/Gedit "gedit（ジーエディット）は、GNOMEデスクトップの標準テキストエディタ。通常のテキストエディタとしての機能に加え、複数のプログラミング言語に対応したハイライト表示、コードスニペットの追加といった、プログラム開発者向けの機能も有している。キー操作はWindows系でWindowsに慣れたユーザーにも使いやすい。")
-------------------------------------------------------------------------------
ファイル名が`.repo`で終わるファイルをINIファイルとして開くようにし、一行コメントアウト開始文字に`#`を追加します。

```xml:/usr/share/gtksourceview-*/language-specs/ini.lang
                    <!--##############
                        ## 以上省略 ##
                        ##############-->

  <metadata>
    <property name="mimetypes">text/x-ini-file;application/x-ini-file</property>
    <property name="globs">*.ini;*.repo</property><!-- *.repo を追加 -->
    <property name="line-comment-start">;</property>
  </metadata>

                    <!--##############
                        ##   中略   ##
                        ##############-->

  <definitions>
    <context id="line-comment" style-ref="comment" end-at-line-end="true">
      <start>;</start>
    </context>
    <!-- ここから -->
    <context id="bash-line-comment" style-ref="comment" end-at-line-end="true">
      <start>#</start>
    </context><!-- ここまで -->
    <context id="group" style-ref="keyword">
      <start>^\[</start>
      <end>\]$</end>
    </context>

                    <!--##############
                        ##   中略   ##
                        ##############-->

    <context id="ini">
      <include>
        <context ref="line-comment"/>
        <context ref="bash-line-comment"/><!-- 追加 -->
        <context ref="group"/>
        <context ref="non-standard-key"/>
        <context ref="language"/>
        <context ref="variable"/>
        <context ref="boolean-value"/>
        <context ref="single-quoted-string"/>
        <context ref="double-quoted-string"/>
        <context ref="decimal-number"/>
        <context ref="integer"/>
      </include>
    </context>
  </definitions>
</language>
```

[nano](http://ja.wikipedia.org/wiki/Nano_%28%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BF%29 "nanoは、UNIXを中心としたシステムで使われる、cursesを使ったテキストエディタの一種である。スクリーンエディタの一種でありながら、CUIを用いて編集を行なうことが可能である。スクリーンエディタとして有名なものは既に多数存在するが、このエディタの特色は、その操作方法がWYSIWYGに慣れたユーザにとって分かりやすいため、初心者でも比較的容易に扱うことが可能という点にある。")
-------------------------------------------------------------------------------
[Arch Linux](http://ja.wikipedia.org/wiki/Arch_Linux "Arch Linux（アーチ・リナックス、 /ˈɑːrtʃ -/）は、Linuxディストリビューションの１つであり、「シンプリシティ」、ミニマリズム、エレガンスさ、コードの正しさに焦点を当てて開発されている。「シンプリシティ」(Simplicity、簡潔さ) とは、Arch Linuxの言うところでは「…不必要な追加・修正、あるいは複雑化を伴わない…」ことであり、それは初心者の立場よりも開発者の立場からの見たものだとしている。Arch Linuxは、ローリング・リリースと呼ばれるリリースモデルを採用しており、他のLinuxディストリビューションで見られるような明確な「バージョン番号」や「リリース・スケジュール」を持たない。リポジトリ上のソフトウェアパッケージは日々新しいバージョンへと更新されており、定期的にソフトウェアアップデートを行うことで、システムを常に最新の状態に保つことができる。インストール用のイメージファイルは定期的に更新されているが、これは基本的にシステムパッケージ群の最新スナップショットに過ぎない。")の[nano-syntax-highlighting-git](https://aur.archlinux.org/packages/nano-syntax-highlighting-git/ "nanoのシンタックスハイライト機能を強化する")パッケージを利用します。[^2] [^3]

```sh
# INIファイルのシンタックスハイライトを行う設定ファイルをダウンロード
wget https://github.com/scopatz/nanorc/raw/master/ini.nanorc
# .repo で終わるファイルをINIファイルとして扱うようにする
sed --in-place 's/)\$/|repo)$/' ini.nanorc
# シンタックスハイライトを行う設定ファイル保管場所に移動
sudo mv ini.nanorc /usr/share/nano/
# nanoの個人設定ファイルから読み込むようにする
echo $'\n\n'## INI files$'\n'include "/usr/share/nano/ini.nanorc" >> ~/.nanorc
```

[Emacs](http://ja.wikipedia.org/wiki/Emacs "Emacs（イーマックス）とは高機能でカスタマイズ性の高いテキストエディタである。スクリーン・エディタとしての人気が高く、特にUNIXのプログラマを中心としたコンピュータ技術者に愛用者が多い。")
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
個人設定ファイルを新規作成 (または追記) し、ファイル名が`.repo`で終わるファイルを`conf-mode`で開くようにする設定を追加します。~~[^4]~~

```el:~/.emacs
;; .repo ファイルを Conf モードで開く
(add-to-list 'auto-mode-alist '("\\.repo$" . conf-mode))
```

[Kate](http://ja.wikipedia.org/wiki/Kate "Kate とは KDE のテキストエディタである。頭字語 "Kate" は "KDE advanced text editor" の略である。Kate は KDE リリース 2.2（2002年8月15日）から kdebase パッケージの一部となっている。KDE の一部となっている KParts の機能により、他の KDE アプリケーションに編集コンポーネントとして Kate を組み込むことができる。統合開発環境 KDevelop やウェブ開発環境 Quanta Plus は編集コンポーネントとして Kate を利用している主要な KDE アプリケーションである。")
-------------------------------------------------------------------------------
ファイル名が`.repo`で終わるファイルをINIファイルとして開くようにします。

```xml:/usr/share/kde*/apps/katepart/syntax/ini.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE language SYSTEM "language.dtd">
<language name="INI Files" section="Configuration" extensions="*.ini;*.pls;*.kcfgc;*.repo" mimetype="" version="1.1" kateversion="2.0" author="Jan Janssen (medhefgo@web.de)" license="LGPL"> <!-- extensions属性値に *.repo を追加 -->

                    <!--##############
                        ## 以下省略 ##
                        ##############-->
```



Fedoraのソースリポジトリを追加
==============================
まず[Fedora Project - GPG 鍵の一覧](https://fedoraproject.org/keys)から、[Fedoraの最新安定版](https://fedoraproject.org/wiki/Releases#Current_Supported_Releases "Current Supported Releases  - Releases - FedoraProject") (2014-08-12現在 Fedora 20) のバージョン番号に対応する公開鍵のURLを捜し、取り込みます。

```sh
# Fedora20の公開鍵を取り込む
sudo rpm --import https://fedoraproject.org/static/246110C1.txt
```

以下のようにリポジトリ定義ファイルを新規作成 (または追記) し、リポジトリを追加します。

```ini:/etc/yum.repos.d/fedora.repo
[fedora-source-20]
name=Fedora 20 - $basearch - Source
#baseurl=http://download.fedoraproject.org/pub/fedora/linux/releases/20/Everything/source/SRPMS
mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=fedora-source-20&arch=$arch
failovermethod=priority
enabled=0
```



ビルド
======
ビルドの際、コマンドが見つからなかったりビルドに失敗するようであれば、[rpmbuildコマンド](http://www.rpm.org/max-rpm-snapshot/ch-rpm-b-command.html "rpmbuild Command Reference")や[GCC](http://ja.wikipedia.org/wiki/GNU%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%A9%E3%82%B3%E3%83%AC%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3 "GNU Compiler Collection（グニューコンパイラコレクション）は、GNUのコンパイラ群である。略称は「GCC（ジーシーシー）」。GNUツールチェーンの中核コンポーネント。")をインストールします。

```sh
sudo yum install rpm-build gcc
```

途中、`rpm`コマンドで署名を検証しています。`ptrash-1.0-8.fc20.src.rpm: rsa sha1 (md5) pgp md5 OK`などと表示されれば問題ありません。署名の検証ができなかったときは、`pgp`が返りません。[^5]

```sh
# ソースRPMパッケージの取得
yumdownloader --source --enablerepo=fedora-source-20 ptrash --destdir ~/rpmbuild/SRPMS
# 署名の検証
rpm --checksig ~/rpmbuild/SRPMS/ptrash-*.src.rpm
# ビルドに必要なパッケージのインストール
sudo yum-builddep ~/rpmbuild/SRPMS/ptrash-*.src.rpm
# ビルド
rpmbuild --rebuild --clean ~/rpmbuild/SRPMS/ptrash-*.src.rpm
```



インストール
============

```sh
# インストール
sudo rpm --upgrade --verbose --hash $(ls -v --reverse ~/rpmbuild/RPMS/*/ptrash-[0-9]*.rpm | head --lines=1)
# ソースRPMパッケージの削除
ptrash ~/rpmbuild/SRPMS/ptrash-*.src.rpm
```

RPMパッケージ (*.rpm) をアップロードし、実運用環境にもインストールします。



ptrashコマンドの使い方
======================
`ptrash`コマンドは、`rm`コマンドと同様に、複数のファイルを指定したりワイルドカードを利用することができます。

| コマンド                                      | 効果 |
|-----------------------------------------------|------|
| `ptrash file1`                                | ファイル、またはディレクトリ`file1`を`~/.trash`に移動します。`rm -rf file1` (`rm --recursive --force file1`) と同等で、ディレクトリの場合や書き込み権限が無い場合でも警告なしに移動します。 **ごみ箱 (`~/.trash`) に同名のファイルが存在する場合は上書きされ、同名のディレクトリが存在する場合は統合されます。** |
| `sudo ptrash file2`                           | 親ディレクトリに書き込み権限が無い場合、`sudo`コマンドを使って、rootユーザーとして削除することが多いと思います。CentOSの初期設定では[sudoers](http://linuxjm.sourceforge.jp/html/sudo/man5/sudoers.5.html "sudoers ポリシー・モジュールは、デフォルトの sudo 用ポリシー・プラグインであり、このモジュールによってユーザがどんな sudo 権限を持っているかの判定が行われる。ポリシーの運用は /etc/sudoers ファイルによって行われるが、 LDAP を使用することも可能である。")の _always_set_home_ フラグが _on_ となっているため、この場合削除したファイル・ディレクトリは`/root/.trash`に移動されることになります。 |
| `ptrash -i file1`                             | `file1`がファイルの場合に、移動するか問い合わせます (プロンプトを表示します)。`rm -di` (`rm --dir --interactive=always`) などとは異なり、`file1`がディレクトリの場合は問い合わせずに移動します。 |
| `ptrash -r file1` `ptrash --restore file1`    | `~/.trash/.trashdb`に記録されている情報をもとに、ごみ箱 (`~/.trash`) 内のファイル・ディレクトリ`file1`を元の場所に戻します。 **前述のとおりディレクトリを統合したりしているため、精度は期待できません。** |
| `ptrash -d file1` `ptrash --delete file1`     | ごみ箱 (`~/.trash`) 内のファイル・ディレクトリ`file1`を削除します。 |



参考にさせていただいたページ
============================
[^1]: [パトラーーーーーッシュ ptrash - toshi_hirasawaの日記](http://d.hatena.ne.jp/toshi_hirasawa/20130201/1359713681)
[^2]: [nano (日本語) - ArchWiki](https://wiki.archlinux.org/index.php/Nano_%28%E6%97%A5%E6%9C%AC%E8%AA%9E%29#.E3.82.B7.E3.83.B3.E3.82.BF.E3.83.83.E3.82.AF.E3.82.B9.E3.83.8F.E3.82.A4.E3.83.A9.E3.82.A4.E3.83.88)
[^3]: [37.nanoエディタの設定ファイル、nanorcをいじる](http://www.garunimo.com/program/linux/linux37.xhtml)
[^4]: ~~[Emacsのカスタマイズ - uotsal powered by FSWiki.com](http://uotsal.fswiki.com/wiki/Emacs%A4%CE%A5%AB%A5%B9%A5%BF%A5%DE%A5%A4%A5%BA)~~ _(リンク切れ)_
[^5]: [＠IT：rpmコマンドで警告が表示される](http://www.atmarkit.co.jp/flinux/rensai/linuxtips/487warningrpm.html)