https://wiki.archlinux.org/api.php?action=feedcontributions&user=Nona&feedformat=atom
ArchWiki - User contributions [en]
2024-03-29T02:38:27Z
User contributions
MediaWiki 1.41.0
https://wiki.archlinux.org/index.php?title=Vagrant&diff=315766
Vagrant
2014-05-20T04:38:47Z
<p>Nona: add missing {</p>
<hr />
<div>[[Category:Virtualization]]<br />
{{Related articles start}}<br />
{{Related|VirtualBox}}<br />
{{Related|Libvirt}}<br />
{{Related|KVM}}<br />
{{Related articles end}}<br />
<br />
[http://www.vagrantup.com Vagrant] is a tool for managing and configuring virtualised development environments.<br />
<br />
Vagrant has a concept of 'providers', which map to the virtualisation engine and its API. The most popular and well-supported provider is Virtualbox; plugins exist for {{ic|libvirt}}, {{ic|kvm}}, {{ic|lxc}}, {{ic|vmware}} and more.<br />
<br />
Vagrant uses a mostly declarative {{ic|Vagrantfile}} to define virtualised machines. A single Vagrantfile can define multiple machines.<br />
<br />
See also [[Wikipedia:Vagrant]].<br />
<br />
== Installing Vagrant ==<br />
<br />
Install {{Pkg|vagrant}} from the [[official repositories]].<br />
<br />
== Plugins ==<br />
<br />
Vagrant [https://news.ycombinator.com/item?id=4408754 has a middleware architecture] providing support for powerful plugins.<br />
<br />
Some popular Vagrant plugins are available from the aur, such as {{AUR|vagrant-vbguest}}. Other plugins can be installed with Vagrant's built-in plugin manager:<br />
<br />
$ vagrant plugin install vagrant-vbguest<br />
<br />
=== vagrant-kvm ===<br />
<br />
This plugin supports [[KVM]] as the virtualisation provider.<br />
<br />
Vagrant installs a self-contained rainbow environment in /opt which [https://github.com/adrahon/vagrant-kvm/issues/14 interacts with the system ruby in Arch in confusing ways]. As of vagrant 1.4.3, this invocation will install vagrant-kvm successfully:<br />
<br />
$ CONFIGURE_ARGS="with-libvirt-include=/usr/include/libvirt with-libvirt-lib=/usr/lib" vagrant plugin install vagrant-kvm<br />
<br />
=== vagrant-lxc ===<br />
<br />
First install {{Pkg|lxc}} from the official repositories, then:<br />
<br />
$ vagrant plugin install vagrant-lxc<br />
<br />
Next, configure lxc and some systemd unit files per [https://github.com/fgrehm/vagrant-lxc/issues/109#issuecomment-21274392 this comment]. The plugin can now be used with a {{ic|Vagrantfile}} like so:<br />
<br />
VAGRANTFILE_API_VERSION = "2"<br />
<br />
Vagrant.configure("2") do |config|<br />
<br />
config.vm.define "main" do |config|<br />
config.vm.box = 'http://bit.ly/vagrant-lxc-wheezy64-2013-10-23'<br />
<br />
config.vm.provider :lxc do |lxc|<br />
lxc.customize 'cgroup.memory.limit_in_bytes', '512M'<br />
end<br />
<br />
config.vm.provision :shell do |shell|<br />
shell.path = 'provision.sh'<br />
end<br />
end<br />
end<br />
<br />
The {{ic|provision.sh}} file should be a shell script beside the {{ic|Vagrantfile}}. Do whatever setup is appropriate; for example, to remove puppet, which is packaged in the above box:<br />
<br />
rm /etc/apt/sources.list.d/puppetlabs.list<br />
apt-get purge -y puppet facter hiera puppet-common puppetlabs-release ruby-rgen<br />
<br />
== Base Boxes for Vagrant ==<br />
<br />
Here is a list of places to get all sorts of vagrant base boxes for different purposes: development, testing, or even production.<br />
<br />
* An well maintained up-to-date [https://github.com/terrywang/vagrantboxes/blob/master/archlinux-x86_64.md Arch Linux x86_64] base box for Vagrant<br />
<br />
* [http://vagrantbox.es/ vagrantbox.es]<br/>A List of vagrant base boxes. Initiated by Gareth Rushgrove [https://twitter.com/garethr @garethr] hosted on Heroku using Nginx. See the story here: [http://www.morethanseven.net/2012/07/01/The-vagrantbox.es-story/ The Vagrantbox.es Story].<br />
<br />
* Opscode [https://github.com/opscode/bento bento]<br/>We all know what bento means in Japanese, right? In this case, they are '''NOT''' lunch boxes '''BUT''' extremely useful base boxes which can be used to test cookbooks or private chef (Chef Server and Client). Distributions included: Ubuntu Server, Debian, CentOS, Fedora and FreeBSD.<br />
<br />
* [http://puppet-vagrant-boxes.puppetlabs.com/ Puppet Labs Vagrant Boxes]<br/>Pre-rolled vagrant boxes, ready for use. Made by the folks at Puppet Labs.<br />
<br />
* [http://cloud-images.ubuntu.com/vagrant/ Vagrant Ubuntu Cloud Images]<br/>It has been there since Jan, 2013. For some reason Canonical has NOT officially promoted it yet, may be still in beta. Remember these are vanilla images, NOT very useful without Chef or Puppet.</div>
Nona
https://wiki.archlinux.org/index.php?title=Creating_Packages_(%E6%97%A5%E6%9C%AC%E8%AA%9E)&diff=296021
Creating Packages (日本語)
2014-02-03T10:11:03Z
<p>Nona: fix typo</p>
<hr />
<div>[[Category:About Arch (日本語)]]<br />
[[Category:Package management (日本語)]]<br />
[[Category:日本語]]<br />
[[cs:Creating Packages]]<br />
[[en:Creating Packages]]<br />
[[es:Creating Packages]]<br />
[[fr:Standard_paquetage]]<br />
[[it:Creating Packages]]<br />
[[ru:Creating Packages]]<br />
[[sk:Creating Packages]]<br />
[[tr:Paket_oluşturma]]<br />
[[zh-CN:Creating Packages]]<br />
{{Related articles start (日本語)}}<br />
{{Related2|Arch Build System (日本語)|Arch Build System}}<br />
{{Related2|Arch User Repository (日本語)|Arch User Repository}}<br />
{{Related2|makepkg (日本語)|makepkg}}<br />
{{Related2|pacman (日本語)|pacman}}<br />
{{Related2|PKGBUILD (日本語)|PKGBUILD}}<br />
{{Related|Patching in ABS}}<br />
{{Related articles end}}<br />
<br />
この記事は、Arch Linux の ports 風の[[Arch Build System (日本語)|ビルドシステム]]を使ってパッケージを自作するユーザーの助けになることを目的としています。この記事の扱う範囲は PKGBUILD ({{ic|makepkg}} によって読み込まれるパッケージ定義ファイル) の書き方についてです。すでに PKGBUILD が用意できている場合、[[makepkg (日本語)|makepkg]] の項目を参照してください。パッケージの質を向上させるためのルール・方法などの説明は [[Arch Packaging Standards (日本語)|Arch Packaging Standards]] を参照してください。<br />
<br />
==概要==<br />
<br />
Arch Linux のパッケージは、[[makepkg (日本語)|makepkg]] ユーティリティーと [[PKGBUILD (日本語)|PKGBUILD]] に記載された情報からビルドされます。{{ic|makepkg}} が実行されると、カレントディレクトリの {{ic|PKGBUILD}} を見て、ソースをコンパイルするか必要なファイルをダウンロードするかの指示に従ってパッケージファイル ({{ic|pkgname.pkg.tar.xz}}) が作成されます。こうして出来上がったパッケージはバイナリとインストールの実行スクリプトが含まれ、[[pacman (日本語)|pacman]] でインストールできるものになります。<br />
<br />
Arch のパッケージは、以下のファイルが tar アーカイブ、つまり 'tarball' にまとめられ、xz で圧縮されたものです。<br />
<br />
* インストールするバイナリやファイル。<br />
* {{ic|.PKGINFO}}: pacman でパッケージ管理や依存解決をするために必要なすべての情報が書かれたファイル。<br />
* {{ic|.MTREE}}: ファイルのハッシュとタイムスタンプ。ローカルデータベースに含めることで pacman はパッケージの整合性を検証することができます。<br />
* {{ic|.INSTALL}}: 任意のファイル。インストール/アップグレード/削除の後に実行される ({{ic|PKGBUILD}} で指定された場合のみ存在する)。<br />
* {{ic|.Changelog}}: パッケージメンテナによるパッケージの更新についての覚え書き (必ず付属するとは限らない)。<br />
<br />
== 準備 ==<br />
<br />
=== ソフトウェアの準備 ===<br />
<br />
まず、必要なツールがインストールされているか確認してください。 {{Grp|base-devel}} があれば十分です。このグループには '''make''' などのコンパイルに必要なツールが含まれています。<br />
<br />
# pacman -S base-devel<br />
<br />
{{Pkg|pacman}} で提供される [[makepkg (日本語)|makepkg]] はパッケージ作成で最も重要なツールの一つです。makepkg は以下を行います:<br />
# 依存パッケージがインストールされているかどうか確認する。<br />
# ソースをサーバーからダウンロードする。<br />
# 圧縮されたソースファイルを展開する。<br />
# fakeroot 環境でコンパイルし、インストールする。<br />
# バイナリやライブラリから不要シンボルを除去する (symbol stripping)。<br />
# パッケージのメタデータを生成する。<br />
# fakeroot 環境をパッケージに圧縮する。<br />
# パッケージファイルを出力先ディレクトリに保存する。デフォルトでは作業ディレクトリ。<br />
<br />
=== インストールのダウンロードとテスト ===<br />
<br />
パッケージにしたいソフトウェアのソース tarball をダウンロードして、展開してください。その後ソフトウェアの作成者の指示に従ってプログラムをインストールしてください。ソフトウェアをコンパイル・インストールするのに必要なコマンド・手順を全て手控えておきましょう。''PKGBUILD'' ファイルの中で同じコマンドを使うことになります。<br />
<br />
ほとんどのソフトウェアは3ステップでビルドします:<br />
<br />
./configure<br />
make<br />
make install<br />
<br />
プログラムが正しく動作するか確認すると良いでしょう。<br />
<br />
== PKGBUILDの作成 ==<br />
<br />
パッケージ作成に必要な情報は全て <code>PKGBUILD</code> に書かれています。<code>makepkg</code> は実行されると、カレントディレクトリに <code>PKGBUILD</code> ファイルがあるか探し、そこに書かれていることに従ってソフトウェアのソースコードをコンパイルします。{{ic|PKGBUILD}} に書かれている指示は、[[Wikipedia:ja:Bash|Bash]] として実行可能である必要があります。コンパイルが無事終了すれば、出来上がったバイナリと、バージョンや依存パッケージなどのパッケージのメタデータが <code>''パッケージ名''.pkg.tar.xz</code> にまとめられます。このパッケージファイルは <code>pacman -U ''パッケージファイル''</code> でインストールすることができます。<br />
<br />
新しいパッケージを作るには、まず空の作業ディレクトリを用意します ({{ic|~/abs/''パッケージ名''}} が推奨です)。このディレクトリにファイル {{ic|PKGBUILD}} を作成します。プロトタイプとして、{{ic|/usr/share/pacman/PKGBUILD.proto}} や、類似パッケージの {{ic|PKGBUILD}} が使えます。オプションを変更するだけなどの場合、後者が便利になるかもしれません。<br />
<br />
===PKGBUILD の変数を定義する===<br />
<br />
PKGBUILD のサンプルは {{Ic|/usr/share/pacman/}} にあります。{{ic|PKGBUILD}} で利用できる変数は [[PKGBUILD (日本語)|PKGBUILD]] の記事で説明されています。<br />
<br />
パッケージをビルドするために必要な以下の三つの変数は、''makepkg'' によってあらかじめ定義されます:<br />
; {{ic|startdir}}: {{ic|PKGBUILD}} のあるディレクトリへの絶対パスです。{{ic|$startdir/src}} や {{ic|$startdir/pkg}} として {{ic|$srcdir}} や {{ic|$pkgdir}} の代わりに使われていましたが、今ではこれらが一致する保証はありません。この変数を使うことは非推奨です、使うべきでありません。<br />
; {{ic|srcdir}}: {{ic|makepkg}} がソースファイルを展開、またはコピーしてくるディレクトリです。<br />
; {{ic|pkgdir}}: build() が終わった後、{{ic|makepkg}} はここに生成されたファイルをパッケージに入れます。ここがパッケージのルートディレクトリになります。<br />
これらの変数は全て''絶対''パスなので、適切にこれらの変数を使う限り作業ディレクトリについて心配する必要はありません。<br />
<br />
{{Note|''makepkg''、そして {{ic|build()}} と {{ic|package()}} 関数は対話式になるようにはなっていません。特にビルドログを有効にして ({{ic|-l}})、これらの関数で対話式のユーティリティやスクリプトを呼び出すと ''makepkg'' が破壊される可能性があります ({{Bug|13214}} を参照)。}}<br />
<br />
{{Note|現在のパッケージメンテナの他に、以前のメンテナが貢献者として記載されることがあります。}}<br />
<br />
=== PKGBUILD の関数 ===<br />
<br />
5つの関数が存在し、全て存在する場合ここに記載している順番どおりに実行されます。関数が存在しないときは、スキップされます。<br />
<br />
{{Note|{{ic|package()}} 関数は省略できません、この関数は全ての PKGBUILD で必須になります。}}<br />
<br />
==== 関数 {{ic|pkgver()}} ====<br />
<br />
pacman 4.1 から採用され、makepkg の実行中に pkgver 変数を更新することができます。{{ic|pkgver()}} はソースが取得・展開されたすぐ後に実行されます。<br />
<br />
[[VCS PKGBUILD Guidelines (日本語)|git/svn/hg などのパッケージを作成する]]ときにこの関数は特に便利です。なぜならビルドプロセスは同じままでも、ソースは毎日・毎時間更新される可能性があるからです。昔は日時を pkgver フィールドに入れていたため、ソフトウェアが更新されていなくても、makepkg はバージョンが変更されたと考えてリビルドをしていました。この関数では {{ic|git describe}}, {{ic|hg identify -ni}} などのコマンドが有用です。PKGBUILD を投稿する前に、{{ic|pkgver()}} 関数がビルドを停止させないかテストしてください。<br />
{{Note|pkgver には空白やハイフン ({{ic|-}}) を含めることができません。sed を使って対処してください。}}<br />
<br />
==== 関数 {{ic|prepare()}} ====<br />
<br />
Pacman 4.1 から {{ic|prepare()}} 関数が導入されました。この関数では、パッチなどの、ソースをビルドする前の準備に使われるコマンドを実行します。この関数は build 関数の前、パッケージの展開の後に実行されます。展開が省略された場合 ({{ic|makepkg -e}})、{{ic|prepare()}} は実行されません。<br />
<br />
{{Note| ({{ic|man PKGBUILD}} より) この関数は {{ic|bash -e}} モードで実行されるため、コマンドのどれかが0以外のステータスコードで終了したときこの関数は終了します。}}<br />
<br />
====関数 {{ic|build()}} ====<br />
<br />
さて、{{ic|PKGBUILD}} ファイルの中に {{ic|build()}} 関数を定義しなくてはなりません。この関数、<code>build()</code> は [[Wikipedia:ja:Bash|Bash]] の文法を使って、ソフトウェアを自動的にコンパイルします。そして {{ic|pkg}} ディレクトリを作成しここにソフトウェアをインストールします。これによって ''makepkg'' はファイルシステムをふるいにかけることなくファイルをパッケージにまとめることができます。<br />
<br />
{{ic|build()}} 関数はまず展開されたソースコードのディレクトリに入ります。''makepkg'' は {{ic|build()}} を実行する前にカレントディレクトリを {{ic|srcdir}} に移動するので、ほとんどの場合最初のコマンドは以下のようになるでしょう:<br />
<br />
cd "$pkgname-$pkgver"<br />
<br />
{{ic|/usr/share/pacman/PKGBUILD.proto}} ファイルでは上のコマンドの代わりに次のコマンドを使うことを提案しています:<br />
<br />
cd "$srcdir/$pkgname-$pkgver"<br />
<br />
ただし、{{ic|$srcdir}} は絶対パスなので違いはありません。<br />
<br />
そして、手動でソフトウェアをコンパイルをするのと同じコマンドを書き連ねます。{{ic|build()}} 関数は、煎じ詰めて言えば手でコンパイルするのに必要な操作を自動化したものなのです。今パッケージしているソフトウェアが configure を使っているのなら、{{ic|1=--prefix=/usr}} を使うのが良いでしょう。(多くのソフトウェアがファイルをインストールするのに使う) {{ic|/usr/local}} ディレクトリは、手動でインストールする場合のみに限って使われるべきです。すべての Arch Linux パッケージは、{{ic|/usr}} ディレクトリを使うべきです。{{ic|/usr/share/pacman/PKGBUILD.proto}} に書かれているように、次の2行はだいたい以下のようになるでしょう:<br />
<br />
./configure --prefix=/usr<br />
make<br />
<br />
{{Note|何もビルドする必要がないソフトウェアの場合は、{{ic|build()}} 関数は使用しないでください。{{ic|build()}} 関数は不要ですが、{{ic|package()}} 関数は必須です。}}<br />
<br />
=== 関数 {{ic|check()}} ===<br />
<br />
ここでは {{Ic|make check}} などのテストを動作させます。ソフトウェアが正しくビルドできたか確認したり依存関係が問題ないか調べるのに役立つので {{ic|check()}} を記述することは推奨されています。<br />
<br />
テストの必要のないユーザー(や、時にはテストを通過させるようにパッケージを修正できないメンテナ)は、PKGBUILD や makepkg で {{Ic|!check}} オプションを指定する (もしくは {{ic|--nocheck}} フラグを付けて {{ic|makepkg}} を呼び出す) ことで、これをスキップできます。<br />
<br />
=== 関数 {{ic|package()}} ===<br />
<br />
最後に、コンパイルされたファイルを、''makepkg'' がファイルを読み込むことができる(そしてパッケージを作成する)ディレクトリに置きます。デフォルトでは {{ic|pkg}} ディレクトリです。このディレクトリは単なる fakeroot 環境です。すなわち、このディレクトリはインストール先のファイルシステムの <code>/</code> (root ファイルシステム) に相当します。インストールするファイルは全て {{ic|pkg}} 以下に、ディレクトリ構造を保ったまま置かれる必要があります。例えば、ファイルを <code>/usr/bin</code> にインストールさせたい場合は <code>${pkgdir}/usr/bin</code> にファイルを置きます。数ダースのファイルを手動でコピーしなくてはならない場合はほとんどありません。ほとんどのソフトウェアでは、代わりに {{ic|make install}} を呼び出すことでコピーが行われます。ソフトウェアを {{ic|pkg}} ディレクトリに正しくインストールするために、最後の行は以下のようになるでしょう:<br />
<br />
make DESTDIR="$pkgdir/" install<br />
<br />
{{Note|ときどき {{ic|Makefile}} で {{ic|DESTDIR}} が使われていない場合があります。このときは {{ic|prefix}} を使ってください。パッケージのビルドに ''autoconf''/''automake'' が使われているときは、{{ic|DESTDIR}} を使ってください。これはマニュアルに[https://www.gnu.org/software/automake/manual/automake.html#Install 文書化]されています。もし {{ic|DESTDIR}} が使えなければ、{{ic|1=make prefix="$pkgdir/usr/" install}} を試してください。それでもだめなら、"{{ic|make <...> install}}" によって実行されるインストールコマンドをもっと調べる必要があります。}}<br />
<br />
稀に、一つのディレクトリの中にすべてのファイルが置かれ、ソフトウェアをそこから実行するようにされていることがあります。こうした場合には、そのディレクトリを {{ic|$pkgdir/opt}} にコピーするのが賢明です。<br />
<br />
多くの場合では、{{ic|pkg}} 下のサブディレクトリはインストールプロセスで自動的に作られます。しかし、そうでない場合は ''makepkg'' は大量のエラーを吐いて失敗します。この場合、必要なサブディレクトリを {{ic|build()}} 関数内で {{ic|mkdir -p}} コマンドを実行することで、インストール作業の前にあらかじめ生成してください。<br />
<br />
昔のパッケージでは {{ic|package()}} 関数はなく、この操作は {{ic|build()}} でまとめて行われていました。{{ic|PKGBUILD}} に {{ic|build()}} がない場合は、{{ic|build()}} 全体が ''fakeroot'' で実行されます。{{ic|package()}} が定義されている場合、{{ic|build()}} は {{ic|makepkg}} を実行したユーザで実行され、{{ic|package()}} だけが ''fakeroot'' で実行されます<br />
<br />
また、{{ic|makepkg --repackage}} は {{ic|package()}} だけを呼び出します。パッケージの {{ic|depends}} 変数をだけ変更したときなどに、ソースを再コンパイルせずパッケージを作成ができ、時間を節約することができます。<br />
<br />
{{Note|{{ic|package()}} は PKGBUILD で唯一の必須関数です。プログラムをインストールするのに必要なのがファイルをディレクトリにコピーするだけの場合、{{ic|build()}} 関数ではなく {{ic|package()}} 関数にコマンドを記述してください。}}<br />
<br />
== PKGBUILD とパッケージのテスト ==<br />
<br />
{{ic|build()}} 関数を記述している間、バグがないことを確認するために変更をテストしたくなるかもしれません。{{ic|PKGBUILD}} ファイルが含まれているディレクトリで {{ic|makepkg}} コマンドを実行してすることでテストすることができます。フォーマットが正しい {{ic|PKGBUILD}} なら、makepkg はパッケージを作成します。{{ic|PKGBUILD}} が壊れていたり未完成だと、エラーを吐きます。<br />
<br />
makepkg は問題なく終了すると、作業ディレクトリに {{ic|pkgname-pkgver.pkg.tar.xz}} という名前のファイルを作成します。このパッケージは {{ic|pacman -U}} コマンドでインストールすることができます。ただし、パッケージファイルが作られたというだけでは完全に機能するとは言えません。あるいはディレクトリだけでファイルが全く含まれていない可能性もあります (例えば、prefix が間違って指定されているとか)。pacman の query 関数を使うことでパッケージに含まれているファイルのリスト、パッケージが必要とする依存パッケージを {{ic|pacman -Qlp [package file]}} と {{ic|pacman -Qip [package file]}} でそれぞれ表示することができます。<br />
<br />
パッケージが問題ないようでしたら、これであなたの作業は終了です!ただし、{{ic|PKGBUILD}} ファイルを公開するつもりならば、{{ic|depends}} の中身を何度もチェックするべきです。<br />
<br />
また、パッケージバイナリが完璧に''動く''ことを確認しましょう!全ての必要なファイルが含まれているが、(システムの他の部分と問題を起こすような)度しがたい設定オプションによってクラッシュするパッケージを公開するのは迷惑です。勿論、あなた自身のためだけにパッケージをコンパイルするのなら、品質保証について心配しすぎる必要はありません。誤りによって苦しむのはあなただけなのですから。<br />
<br />
===パッケージの正常性のテスト===<br />
<br />
パッケージが機能するかテストした後 [[namcap]] を使ってエラーがないか確認してください:<br />
$ namcap PKGBUILD<br />
$ namcap ''<package file name>''.pkg.tar.xz<br />
<br />
Namcap は以下を行います:<br />
# PKGBUILD の中身を見て、よくある間違いやパッケージファイルの階層に不必要な・間違って置かれたファイルがないか確認します。<br />
# {{ic|ldd}} を使ってパッケージ内の全ての ELF ファイルをスキャンし、必要な共有ライブラリがあるパッケージが {{Ic|depends}} に欠けていることや、推移的な依存として省略できるパッケージを自動で報告します。<br />
# 欠けている、もしくは不要な依存パッケージのヒューリスティック検索。<br />
などなど。パッケージを namcap でチェックする習慣を実践することでパッケージを投稿した後に単純な間違いを修正する手間が省けます。<br />
<br />
== AUR にパッケージを送信する ==<br />
<br />
[[Arch User Repository (日本語)#パッケージを投稿する]] に、投稿する方法について詳しい説明があります。<br />
<br />
== 要約 ==<br />
<br />
#パッケージにしたいソフトウェアのソース tarball をダウンロードする。<br />
#パッケージのコンパイルを試行し任意のディレクトリにインストールする。<br />
#プロトタイプの {{ic|/usr/share/pacman/PKGBUILD.proto}} をコピーして {{ic|PKGBUILD}} に名前を変更して一時的な作業ディレクトリに置く -- {{ic|~/abs/}} が推奨。<br />
#パッケージの必要に応じて {{ic|PKGBUILD}} を編集する。<br />
#{{ic|makepkg}} を実行して作られたパッケージが正しくビルドされているか確認する。<br />
#正しくビルドされるまで、前の2つの手順を繰り返す。<br />
<br />
=== 注意点 ===<br />
<br />
* パッケージのビルドプロセスを自動化する前に、''あらかじめ''何をするのか''正確に''わかっている場合(その場合あなたはそもそもこの文章を読まないと思いますが)を除いて、少なくとも一度は手動でビルドを行なって下さい。残念ながら、大勢のプログラムの作者が "{{ic|./configure}}; {{ic|make}}; {{ic|make install}}" のビルド3ステップに従っているにもかかわらず、これがいつも上手く行くとは限りません。下手をすると、全てを問題なく動かすにはパッチを適用する必要がある場合も考えられます。大雑把に言うと: プログラムをソース tarball からコンパイルして、規定の一時サブディレクトリにインストールすることができない場合、パッケージングを試行する必要さえありません。{{ic|makepkg}} にはソースの問題を解決してくれるような妖精の粉はないからです。<br />
* In a few cases, the packages are not even available as source and you have to use something like {{ic|sh installer.run}} to get it to work. You will have to do quite a bit of research (read READMEs, INSTALL instructions, man pages, perhaps ebuilds from Gentoo or other package installers, possibly even the MAKEFILEs or source code) to get it working. In some really bad cases, you have to edit the source files to get it to work at all. However, {{ic|makepkg}} needs to be completely autonomous, with no user input. Therefore if you need to edit the makefiles, you may have to bundle a custom patch with the {{ic|PKGBUILD}} and install it from inside the {{ic|prepare()}} function, or you might have to issue some {{ic|sed}} commands from inside the {{ic|prepare()}} function.<br />
<br />
== より詳細なガイドライン ==<br />
{{Package Guidelines (日本語)}}<br />
<br />
==参照==<br />
* [https://bbs.archlinux.org/viewtopic.php?id=91408 How to correctly create a patch file]</div>
Nona
https://wiki.archlinux.org/index.php?title=Core_Utilities_(%E6%97%A5%E6%9C%AC%E8%AA%9E)&diff=293305
Core Utilities (日本語)
2014-01-17T06:43:09Z
<p>Nona: add missing "する"</p>
<hr />
<div>[[Category:System administration (日本語)]]<br />
[[Category:Command shells (日本語)]]<br />
[[en:Core Utilities]]<br />
[[it:Core Utilities]]<br />
[[zh-CN:Core Utilities]]<br />
{{Article summary start|概要}}<br />
{{Article summary text|GNU/Linux システムのいわゆる''コア''ユーティリティのヒントとコツ。}}<br />
{{Article summary heading|関連項目}}<br />
{{Article summary wiki|Bash}}: Bourne シェルの後継, Linux 標準<br />
{{Article summary wiki|Zsh (日本語)}}: Bourne/C シェルの後継、機能豊富な対話式シェル<br />
{{Article summary wiki|General Recommendations (日本語)}}<br />
{{Article summary wiki|GNU Project}}<br />
{{Article summary end}}<br />
<br />
この記事では ''less'', ''ls'', ''grep'' などの GNU/Linux システムの''コア''ユーティリティを扱っています。この記事の扱う範囲は GNU {{Pkg|coreutils}} パッケージに含まれているユーティリティに留まりません。ユーティリティに関連する様々なヒント・小技、その他便利な情報を載せています。<br />
<br />
== cat ==<br />
<br />
[[Wikipedia:ja:cat (UNIX)|cat]] (''catenate'') はファイルを連結して表示する標準の Unix ユーティリティです。<br />
<br />
* ''cat'' はシェルにビルトインされていないため、多くの場合で[[wikipedia:ja:リダイレクト (CLI)|リダイレクション]]を使ったほうが便利です (例: スクリプト、もしくはパフォーマンスが必要な場合)。実際 {{ic|< ''file''}} は {{ic|cat ''file''}} と全く同じです。<br />
<br />
* 複数行をファイルに追加するときは以下のようなコンストラクトが使われます:<br />
<br />
{{bc|<br />
$ cat << EOF >> ''path/file''<br />
''first line''<br />
...<br />
''last line''<br />
EOF<br />
}}<br />
<br />
* ファイルの行を逆順で cat する必要がある場合、[[Wikipedia:tac (Unix)|tac]] (''cat'' reversed) という名前のユーティリティがあります。<br />
<br />
== cron ==<br />
<br />
[[Wikipedia:ja:cron|cron]] は Unix ライクなコンピュータオペレーティングシステムにおける時間基準のジョブスケジューラです。<br />
<br />
[[cron|メインの記事]]を参照してください。<br />
{{Note|''systemd'' は様々な ''cron'' のユースケースを処理することが可能です。[[systemd/cron_functionality|関連記事]]を見て下さい。}}<br />
<br />
== grep ==<br />
<br />
[[Wikipedia:ja:grep|grep]] ([[Wikipedia:ja:ed|ed]] の ''g/re/p'', ''global/regular expression/print'' から) は Unix のために書かれたコマンドラインの文章検索ユーティリティです。''grep'' コマンドはファイルや標準入力から与えられた正規表現と一致する行を検索し、プログラムの標準出力に表示します。<br />
* Remember that ''grep'' はファイルを処理できるので、{{ic|cat ''file'' <nowiki>|</nowiki> grep ''pattern''}} のようなコンストラクトは {{ic|grep ''pattern'' ''file''}} に置き換えられます<br />
<br />
* VCS のソースコードを grep する場合、Perl によって書かれた {{Pkg|ack}} という名前の最適化されたユーティリティが存在します。[http://beyondgrep.com/ 公式ウェブサイト] を参照してください。<br />
<br />
=== 出力のカラー化 ===<br />
<br />
''grep'' のカラー出力は画面が美しくなるだけでなく [[Wikipedia:ja:正規表現|regexp]] や ''grep'' の機能を学ぶのにとても便利です。<br />
<br />
''grep'' のデフォルトカラーを使うには、以下のエントリをシェルの設定ファイルに書いて下さい。例えば [[Bash]] を使っている場合:<br />
{{hc|~/.bashrc|2=alias grep='grep --color=auto'}}<br />
また、{{ic|GREP_OPTIONS}} [[Environment Variables|環境変数]]を設定することも可能ですが、これを使うと ''grep'' を使うスクリプトを壊してしまう可能性があるので注意してください [http://brainstorm.ubuntu.com/idea/24141/]:<br />
export GREP_OPTIONS='--color=auto'<br />
ファイルの行番号を出力に含めたいときは、{{ic|-n}} を追加してください:<br />
alias grep='grep -n --color=auto'<br />
<br />
環境変数 {{ic|GREP_COLORS}} を使ってデフォルトとは異なる色を指定することもできます。<br />
<br />
== ip ==<br />
[[wikipedia:Iproute2|ip]] を使うことで Linux の [[Wikipedia:ja:Internet Protocol|IP]] ソフトウェアスタックにおけるネットワークデバイス・IP アドレス・ルーティングテーブルなどの情報を表示することができます。様々なコマンドを加えることで、オブジェクトの操作や設定をすることも可能です。<br />
<br />
{| class="wikitable" border="1" cellpadding="5" cellspacing="0"<br />
! オブジェクト !! 用途 !! man ページ<br />
|-<br />
| ip addr || プロトコルアドレス管理 || ip-address <br />
|-<br />
| ip addrlabel || プロトコルアドレスラベル管理 || ip-addrlabel<br />
|-<br />
| ip l2tp || tunnel ethernet over IP (L2TPv3) || ip-l2tp <br />
|-<br />
| ip link || ネットワークデバイス設定 || ip-link <br />
|-<br />
| ip maddr || マルチキャストアドレス管理 || ip-maddress<br />
|-<br />
| ip monitor || netlink メッセージの監視 || ip-monitor<br />
|-<br />
| ip mroute || マルチキャストルーティングキャッシュ管理 || ip-mroute<br />
|-<br />
| ip mrule || マルチキャストルーティングポリシー db のルール<br />
|-<br />
| ip neigh || neighbour/arp テーブル管理 || ip-neighbour<br />
|-<br />
| ip netns || プロセスネットワーク名前空間管理 || ip-netns<br />
|-<br />
| ip ntable || neighbour テーブル設定 || ip-ntable<br />
|-<br />
| ip route || ルーティングテーブル管理 || ip-route<br />
|-<br />
| ip rule || ルーティングポリシーデータベース管理 || ip-rule<br />
|-<br />
| ip tcp_metrics || TCP Metrics の管理 || ip-tcp_metrics<br />
|-<br />
| ip tunnel || トンネル設定 || ip-tunnel<br />
|-<br />
| ip tuntap || TUN/TAP デバイスの管理<br />
|-<br />
| ip xfrm || IPSec ポリシーの管理 || ip-xfrm<br />
|}<br />
<br />
全てのオブジェクトで help コマンドが利用可能です。例えば、{{ic|ip addr help}} と入力すればアドレスオブジェクトで利用できるコマンド構文が表示されます。<br />
<br />
[[Network Configuration (日本語)]] の記事では実際問題として ''ip'' コマンドを様々な作業でどうやって使えばいいのか解説しています。<br />
<br />
{{Note|もしかしたら [[Wikipedia:ifconfig|ifconfig]] コマンドの方が親しみがあるかもしれません。このコマンドは Linux の旧バージョンでインターフェイス設定に使われていました。現在 Arch Linux では廃止されているため、代わりに ''ip'' を使って下さい。}}<br />
<br />
== less ==<br />
<br />
[[Wikipedia:ja:less|less]] はテキストファイルの中身を一画面単位で表示のに使われるターミナルページャプログラムです。[[Wikipedia:ja:more (UNIX)|more]] や [[Wikipedia:pg (Unix)|pg]] といった他のページと同じですが、''less'' はより高度なインターフェイスと完全な [http://www.greenwoodsoftware.com/less/faq.html feature-set] を提供します。<br />
<br />
=== 環境変数を使った出力のカラー化 ===<br />
<br />
以下の行をシェルの設定ファイルに加えて下さい:<br />
<br />
{{hc|~/.bashrc|2=<br />
export LESS=-R<br />
export LESS_TERMCAP_me=$(printf '\e[0m')<br />
export LESS_TERMCAP_se=$(printf '\e[0m')<br />
export LESS_TERMCAP_ue=$(printf '\e[0m')<br />
export LESS_TERMCAP_mb=$(printf '\e[1;32m')<br />
export LESS_TERMCAP_md=$(printf '\e[1;34m')<br />
export LESS_TERMCAP_us=$(printf '\e[1;32m')<br />
export LESS_TERMCAP_so=$(printf '\e[1;44;1m')<br />
}}<br />
<br />
値は好きなように変更してください。参照: [[Wikipedia:ANSI_escape_code#Colors|ANSI escape code]]。<br />
<br />
=== wrappers を使った出力のカラー化 ===<br />
<br />
''less'' でシンタックスハイライトを有効にすることができます。まず、{{Pkg|source-highlight}} をインストールし、次に以下の行をシェルの設定ファイルに追加してください:<br />
{{hc|~/.bashrc|<nowiki><br />
export LESSOPEN="| /usr/bin/source-highlight-esc.sh %s"<br />
export LESS='-R '<br />
</nowiki>}}<br />
<br />
コマンドラインインターフェイスを頻繁に使う場合 {{Pkg|lesspipe}} をインストールすると良いかもしれません。<br />
<br />
ページャを使ってアーカイブの中の圧縮されたファイルを表示することができるようになります:<br />
<br />
{{hc|$ less ''compressed_file''.tar.gz|2=<br />
==> use tar_file:contained_file to view a file in the archive<br />
-rw------- ''username''/''group'' 695 2008-01-04 19:24 ''compressed_file''/''content1''<br />
-rw------- ''username''/''group'' 43 2007-11-07 11:17 ''compressed_file''/''content2''<br />
''compressed_file''.tar.gz (END)<br />
}}<br />
<br />
''lesspipe'' はファイルタイプに関連付けられたコマンドの代替として (例えば {{Pkg|html2text}} で HTML を回覧する)、アーカイブ以外のファイルも ''less'' のインターフェイスに接続します。<br />
<br />
''lesspipe'' を有効にするにはログインしなおすか、{{ic|/etc/profile.d/lesspipe.sh}} を実行してください。<br />
<br />
=== もうひとつのページャとしての Vim ===<br />
<br />
[[Vim]] (''visual editor improved'') にはテキストファイル・圧縮ファイル・バイナリ・ディレクトリの中身を表示するスクリプトが含まれています。次の行をシェルの設定ファイルに追加することでページャとして使うことが可能です:<br />
{{hc|~/.bashrc|2=alias less='/usr/share/vim/vim74/macros/less.sh'}}<br />
<br />
また、''less.sh'' マクロの代替も存在し、{{ic|PAGER}} 環境変数として使えます。{{AUR|vimpager-git}} をインストールしてシェルの設定ファイルに以下を加えて下さい:<br />
{{hc|~/.bashrc|2=<br />
export PAGER='vimpager'<br />
alias less=$PAGER<br />
}}<br />
<br />
これで {{ic|PAGER}} 環境変数を使うプログラム、[[git]] などはページャとして ''vim'' を使うようになります。<br />
<br />
== locate ==<br />
<br />
[[Wikipedia:locate (Unix)|locate]] はファイルシステム上のファイルを探します。''updatedb'' やデーモンによって生成しインクリメンタルエンコードを使って圧縮した、事前に作ったファイルのデータベースを使って検索を行います。''find'' よりも圧倒的に高速ですが、データベースの定期的な更新が必要です。<br />
<br />
[[locate|メインの記事]]を参照してください。<br />
<br />
== ls ==<br />
<br />
[[Wikipedia:ja:ls|ls]] (''list'') は Unix や Unix ライクなオペレーティングシステムで使われる、ファイルを一覧するコマンドです。<br />
<br />
カラー出力はシンプルなエイリアスで有効にできます。{{ic|~/.bashrc}} ファイルには {{ic|/etc/skel/.bashrc}} からコピーされた次のエントリが既に含まれているはずです:<br />
alias ls='ls --color=auto'<br />
次のステップはカラーになった ''ls'' 出力をさらに向上させることです; 例えば、壊れた (孤立した) シンボリックリンクを赤色で表示するようにします。以下をシェルの設定ファイルに追加してください:<br />
{{hc|~/.bashrc|eval $(dircolors -b)}}<br />
<br />
== man ==<br />
<br />
[[Wikipedia:ja:manページ|man]] (''manual page'') はオンラインのソフトウェアドキュメントの一つで基本的に Unix や Unix ライクなオペレーティングシステムで使われます。(ライブラリやシステムコールを含む) コンピュータプログラム、正式の標準・規則、さらに抽象的な概念などをカバーしています。[[Man Pages]] を見て下さい。<br />
<br />
== mkdir ==<br />
<br />
[[Wikipedia:ja:mkdir|mkdir]] (''make directory'') はディレクトリを作成するコマンドです。ディレクトリと階層全体を作るには、{{ic|-p}} スイッチを使って下さい。そうしないとエラーが表示されます。{{ic|-p}} スイッチをデフォルトで使うようにすることもできます。<br />
alias mkdir='mkdir -p -v'<br />
{{ic|-v}} スイッチはメッセージを有効にします。<br />
{{Tip|一時ディレクトリが欲しいときは代わりに [[Wikipedia:Temporary file|mktemp]] (''make termporary'') を使って下さい: {{ic|mktemp -p}}。<br />
}}<br />
<br />
== mv ==<br />
<br />
[[Wikipedia:ja:mv_(UNIX)|mv]] (''move'') はファイルやディレクトリを移動したり名前の変更をするコマンドです。危険なコマンドになる可能性があるので範囲に制限をしたほうが賢明です:<br />
alias mv=' timeout 8 mv -iv'<br />
このエイリアスは8秒後に ''mv'' を中止し、3つ以上のファイルの削除を確認し、進行中の操作を表示し、(スペースから始まるコマンドを無視するようシェルが設定されている場合) シェルの history ファイルに操作を保存しません。<br />
<br />
== rm ==<br />
<br />
[[Wikipedia:ja:rm_(UNIX)|rm]] (''remove'') はファイルやディレクトリを削除するコマンドです。使い方によっては危険性があるので範囲に制限をかけると良いでしょう:<br />
alias rm=' timeout 3 rm -Iv --one-file-system'<br />
このエイリアスは3秒後に ''rm'' を中止し、3つ以上のファイルの削除を確認し、進行中の操作を表示し、複数のファイルシステムに影響を与えず、(スペースから始まるコマンドを無視するようシェルが設定されている場合) シェルの history ファイルに操作を保存しません。たった1つのファイルでも確認が必要ならば {{ic|-I}} の代わりに {{ic|-i}} を使って下さい。<br />
<br />
== sed ==<br />
<br />
[[Wikipedia:ja:sed (コンピュータ)|sed]] (''stream editor'') は文章をパース・変換する Unix ユーティリティです。<br />
<br />
ここに ''sed'' を使ったワンライナーの [http://sed.sourceforge.net/sed1line.txt 一覧] があります。<br />
<br />
{{Tip|より強力に sed を置き換えるものとして [[Wikipedia:ja:AWK|AWK]] や [[Wikipedia:Perl|Perl]] 言語があります。}}<br />
<br />
== seq ==<br />
<br />
'''seq''' (''sequence'') は連続する数字を生成するユーティリティです。シェルに内蔵されている代替があるので、[[Wikipedia:seq|Wikipedia]] で説明されているように使うと良いでしょう。<br />
<br />
== shred ==<br />
<br />
[[Wikipedia:Shred_(Unix)|shred]] は完全にファイルやディレクトリを削除するコマンドです。使い方によっては大変危険なので範囲は限るべきです:<br />
alias shred=' timeout 3 shred -v'<br />
このエイリアスは3秒後に ''shred'' を中止し、進行中の操作を表示し、(スペースから始まるコマンドを無視するようシェルが設定されている場合) シェルの history ファイルに操作を保存しません。<br />
<br />
== sudo ==<br />
<br />
[[Wikipedia:ja:Sudo|Sudo]] (''as superuser do'') はユーザーが他のユーザー (通常はスーパーユーザー、もしくは root) のセキュリティ特権を使ってプログラムを実行することができる、Unix ライクなコンピュータオペレーティングシステムのためのプログラムです。[[Sudo (日本語)]] を見て下さい。<br />
<br />
== 参照 ==<br />
<br />
* [http://www.reddit.com/r/commandline/comments/19garq/a_sampling_of_coreutils_120/ A sampling of coreutils] [http://www.reddit.com/r/commandline/comments/19ge6v/a_sampling_of_coreutils_2040/ , part 2] [http://www.reddit.com/r/commandline/comments/19j1w3/a_sampling_of_coreutils_4060/ , part 3] - Overview of commands in coreutils</div>
Nona