2013-10-30

sudoを使わない理由

概要
弊ブログを見て戴いている方には
「なんでこの人はLinux使っているのにsudo使ってないんだろう」
という疑問を持つ方がいるかもしれない。
このエントリは、そんな疑問を持った人に対する私なりの回答である。

sudoとは
sudoというのは、最近のLinuxディストリビューションではかなりデフォルト導入率の高い[1]、「他のユーザとしてコマンドを実行する」ためのコマンドである。
また、他のユーザとしてコマンドを実行する時に【自ユーザのパスワードをcredentialとして使用する】のも大きな特徴。

古くからUNIXでは、su(substitute user)というコマンドで、ターミナル上での実行ユーザの切り替えを行ってきたが、最近ではAndroidでroot権限が必要な場合にsuをインストールする手順があるので、こっち経由で知っている人も多いかもしれない。
sudoを使うと、sudo以降にタイプしたコマンドを、(suでユーザ変更することなく)自分以外のユーザで実行できるということである。

sudoが嫌いな理由
ここからは自分がsudoを使わずにsuを使う理由を並べていく。
  • 毎回sudoって打つのが面倒
使い勝手の面ではこれが最大の嫌いな理由である。例えば「あーaptで更新したいなー」と思った時に
$ sudo apt-get update
[sudo] password for hogehoge:
$ sudo apt-get upgrade
必要なステップは3つ。ただし事前に認証済みで、認証が残っていればパスワードは聞かれないので2つ。この2つだったり3つだったり感。
一方で、普通にsuして同じコマンドを実行する場合は
$ su -
パスワード:
# apt-get update
# apt-get upgrade
必要なステップは常に3つ(パスワード入力を1とするなら4つ)だが、コマンド打ってる途中にパスワードを入れるという混乱が起こらないのでこっちのがいいなぁ。

  • 一般ユーザのパスワードに他ユーザの履歴が混じって記録される
いまどきのインタラクティブシェルは大概コマンドの履歴を保持する機能を持っていて、すぼらなユーザが「あの時どんな引数使ったかなぁ」なんて時にhistoryコマンドで実行履歴を参照されるので、最近実行したコマンドは引数含めて確認が簡単にできる。
のはいいのだが、sudo使うとsudoコマンドの履歴も一般ユーザのhistoryに残るので、root権限の必要なコマンドが一般ユーザの履歴に残る。更に、【sudoは認証に自ユーザのパスワードを使うので、どんなに重要なコマンドであってもそのユーザが実行できてしまう】状態になる。個人的にはセキュリティ考えると一般ユーザでログインされた時点で全部クラックされたも同然なのでなんで問題にならないんだろうと前から思っているのだが。

sudoを使うメリット
では、sudoを使うメリットとは何なんだろうか。
  • 実行履歴をロギングできる
sudo自体は2通りのロギングの仕組みを持っている。syslogのファシリティを設定することでsyslogに渡す事もできるし、sudo自体のログ機構も使うことができる。特に大事な設定を変更する場合は監査目的で保持したほうが良い場合があるので、そういった場面ではコマンド履歴をロギングできるというのは非常に有用であると思う。[2]

なので、企業内でsudoを使うというのは妥当な理由があると思う。そもそもsudoを使わないとできない操作はchrootとか使えばいくらでも代替できるので、クリティカルなサーバでは存在しないのではないかとも思うが。

sudoを使うメリット?
sudoの使い方と合わせて合理的っぽい理由として書かれている利点に

  • ssh/telnetでrootログインされる心配がない
というのがあるが、これ本当だろうか。心配がないというのは本当なんだが、(インターネット経由での)telnet自体はもう使われないとしてsshログインに話を限定すると、

  • 大抵の場合、sshdはデフォルトでrootログインを許可していない(PermitRootLoginの設定)
  • 外部公開する場合、sshdは公開鍵認証にするのが普通なので、それが破れている時点でrootを破られてもsudoersされてる一般ユーザを破られても大して変わらないのではないか
  • sshdの脆弱性を突かれる可能性はあるが、opensshとsudoだとsudoの方がセキュリティパッチ当たる頻度が高いのでsudo使うほうが危なくないか

というのが個人的な意見である。

sudoじゃなくてsuでrootユーザになれるようにする
最近のLinuxディストリビューションでは、インストール時にも一般ユーザの設定しかしないし、実際にインストール後にsu -しようとしてもパスワードが一致しない。これは設定されていないrootのパスワードに合わせる方法が存在しないからである。ということで、rootのパスワードを設定することでsuからrootになれるようにするのが、インストール後最近一番最初にやることになっている。
でもどうやって?sudoを使って。

rootユーザのパスワードを設定するのはroot権限が必要。でもrootユーザのパスワードが設定されていないのでsu - rootができない。ならばsudoを使うしかない。
$ sudo passwd root
New UNIX password:
Retype new UNIX password:
んで、sudoグループに入っているとsudoが使えてしまう(sudoersの設定による)ので、sudoグループから抜ける。
まずはどのグループに入ってるか確認
$ id -a
uid=1000(hogehoge) gid=1000(hogehoge) groups=1000(hogehoge),27(sudo),111(fuse),122(kvm),123(libvirt)
rootになってusermod。
$ su - root
# usermod -G hogehoge,fuse,kvm,libvirt hogehoge
C-dで戻って
$ id -a
uid=1000(hogehoge) gid=1000(hogehoge) groups=1000(hogehoge),111(fuse),122(kvm),123(libvirt)
sudoできなくなったことを確認
$ sudo apt-get update
[sudo] password for hogehoge: 
hogehoge は sudoers ファイル内にありません。この事象は記録・報告されます。
以上。


[1] Ubuntuがデフォルトで使っていたからという理由が一番大きそうだが
[2] ちゃんと活用できれば、の話だが

2013-10-20

ibusではなくfcitxを使う

(2014/06/21更新)
このエントリの内容ですが今やると一部思い通りにならないので、新しくエントリ書きました。参考になれば幸いです。
LMDE UP8(MATE)での日本語入力にfcitxを使う

概要
ここ最近ではデスクトップLinux上の日本語入力にibusとmozc(Google日本語入力のオープンソースプロダクト)を組み合わせて使っていましたが、ibusの1.5に伴う仕様変更がどうもインパクトが超大きい[1]みたいなので、とりあえずibusの代替としてfcitxを使ってみます。環境はDebian GNU/Linuxのtesting(かつLMDE)。

手順
# apt-get install fcitx fcitx-mozc
(20140222更新  im-configがインストールされていない場合はim-configパッケージをインストールしておく。)
# im-config -c
20140222追加 # apt-get install  fcitx-config-gtk fcitx-config-gtk2 fcitx-frontend-gtk2 fcitx-frontend-gtk3 mozc-utils-gui

Xを抜けてログインし直す。
設定→Fcitx設定を選ぶ。
mozcがあるはず。
オンオフのキーに最初Ctrl+SpaceのUNIXでおなじみの組み合わせが指定されていますが、私の場合Eclipseの補完とかぶるので全角半角にしました(結果的に2つ全角半角を指定していることになっていますが)
mozcの設定はGNOMEタスクトレイのキーボードアイコンを右クリック→Mozcツール→設定ツールから。
元々設定した値がそのまま設定されていました。手順は以上。

参考サイト
Fcitxのテストのお願い - いくやの斬鉄日記 http://blog.goo.ne.jp/ikunya/e/a5c2a00e25564c61d322c4c73b7a81da
Debian -- sid の fcitx パッケージに関する詳細 http://packages.debian.org/ja/sid/fcitx

追記(2013/11/06)
Fcitxを使い始めて1週間ほど経つものの、万全ではない感は感じている。
というのは、一旦Fcitxが起動してMozcに切り替われば何の問題もないのだけど、結構な頻度で「Mozcって表示されるけど日本語入力ができない」状態に陥っていて、手元で試す限りでは原因も(確実な)回避策も見つかっていない。設定が関係している可能性もあるし。

このエントリの前半で記載したように、Fcitxへの切り替えに「半角/全角」キーを使っているのだけど、その時に「Mozc」と表示されるけど英字入力のままになってしまうけど、何回か試すとMozcで処理できるようになっている時があるので、そうなるまで「半角/全角」キーを何回も押して試すという残念な回避方法でしのいでいる。
一旦Mozcに移れば基本的には問題ないので、できるだけこれを保てるように、Mozcで英字を打っておいてF10キーで半角英数に変換するというこちらも残念なワークアラウンド。

追記(2013/11/17)
どうもターミナルから起動したアプリでFcitxが起動できなくて若干困り中。
気休めにQtでの設定をしてみる。
# apt-get install qt4-qtconfig
qtconfigで起動したQt設定ツールの「インターフェース」タブからデフォルトのインプットメソッドを「fcitx」に設定する。これでQtのアプリでもFcitxが使える・・・ようになるのかなぁ。

そいでもって、GTK側のアプリは環境変数GTK_IM_MODULEの値を見ているようで、自分とこの環境だと~/.bashrcに書いてあったので、他とまとめて

export GTK_IM_MODULE=fcitx
export XMODIFIERS=@im=fcitx
export QT_IM_MODULE=fcitx

と変更。

[1] キーボードの配列とIMが紐付けられてしまって変更できなくなった。英語配列のキーボードだとmozc使えないらしい。

2013-07-18

そういう人達である、と認識することと、受け流すこと

いくつかの国の人と触れ合ったので
先日、ガイアの夜明け[1]で、外国人観光客を受け入れるという趣の放送をしていた。
ものすごく大雑把にまとめると、

  • 大阪に外国人観光客を誘致する活動の一環として、シンガポールのTV局に番組を作ってもらったり、マレーシアに売り込みに行ったり。古い町並みが残る地域を台湾の女性が旅したり。
  • 富士山の御殿場口が人気ないので、砂駆け下りとかで何とかしよう。
  • 鳥取の境港を大きな客船が寄港できるように整備したので売り込もう。

くらいの内容だった。
我々日本人は、悲しいかな外国人慣れしていない民族であることは間違いないので、普段触れ合う人達はみな日本で生まれ育ち、日本語で会話をする。これが日常。異文化と接することが少ない。
ただ、外貨を得る為の手段として、観光は非常に有効な手段であり、そう思う理由もたくさんある。

  • アジアのライジング・サンと呼ばれ、短期間で経済発展を遂げた
  • 国土が南北に長く、四季がある
  • 独自文化がまだ色濃く残っている

ライジング・サンはフィリピンに行った時に本当によく言われた。個人的にはライジングはもう終わって日没に入っていると思うので意外だったのだが。
北海道は北欧並の雪質でスノーリゾートが楽しめる(オーストラリア人に人気のニセコがいい例)し、沖縄は温暖。林檎が美味しい。桜も咲く。
茶道や芸者など、日本固有の文化もある。音楽とかのポップカルチャーは日本以外では成立し得ないのではないか。

仕事で海外から来る人を除けば、わざわざ物価の高い日本に来てまで旅行者が期待するのは「日本でないと体験できないこと(日本らしさ)」なので、このあたりを自覚してビジネスに繋げられれば観光立国も夢ではないのかもしれないと思う。

ただ、それを武器にするにはこれらのストロングポイントを知ってもらうことがまず第一。そのあたりの経験の無さが普段日本人としか接しない我々の弱点だと思う。基本的に相手は日本の場所すら知らないくらいの認識で行かないとビジネスにはならないし相手の満足にも程遠い。おもてなしゼロ。

ここからが本題

先に挙げた台湾女性客は大阪のレトロな町並みを楽しんで、女性向け雑貨屋で化粧筆?か何かを買って満足していった。一方で、境港に客船で寄港した韓国人観光客は、セルフでどんぶり飯の上に具材を盛り付けて食べる海鮮丼を日本語の説明しか受けなかったからわからなかったと帰国後にクレームを付けた。
ここに国民性が出ている。韓国人は常に自分たちが良いサービスを受けられると思っているし、そうされなかったら何しても問題ないと思っている。簡単に言うと、常に「何か不都合があったらとりあえず自分たち以外が悪い」マインドなんである。評価する機会があったら必ず最低の評価を付ける。
確かに、ご飯の上に自分たちで盛り付けるところの写真も無いし、もちろん韓国語メニューもあるはずがない。
このお店では、クレーム(英語のclaimではなくてcomplainだったんだと思う)を受けたことで、盛り付ける写真と韓国語の説明を準備するようになった(ようだ)。これは失敗を繰り返さないという意味で大事なこと。[2]
日本軍がひどい植民地支配をしていたにも関わらず東南アジアの国から尊敬される理由の一つが「改良を継続すること」。不都合があったら修正するのは当たり前。だけどもそれを絶えず続ける事は難しい。だけど我々日本人はそれを常日頃から習慣にしていて苦手な事ではない。このレストランの対応は日本人にできるやり方を表していて、大事なことだと感じた。

また、大事なことは、外国人の国民性を理解して、真に受けないように受け流すこと。地球上の全ての人が日本人と同じ教育を受けて、育ってきた訳ではない事を覚えておくこと。

ちなみに、知り合いの韓国人は(議会が総理大臣を指名する)総理大臣制を知らなかった(大統領制しか知らなかった)。戦後すぐの日本が食べるものもなく、社会が不安定な時代があった事も知らなかった。もちろん全員が隣国の事をそこまで知らない事はないけど、現実としてそれも国民性。そういう人達なんだという事を理解して、深く考えないことがビジネスをしていく上で一番大事。

[1] http://www.tv-tokyo.co.jp/gaia/backnumber3/preview_20130716.html
[2] 歴史を勉強するのは失敗を繰り返さない為。だから間違った歴史を教えないことが重要。間違った歴史を教えると、そこから生まれる歪を誤魔化すために不整合が止まらなくなる。

2013-07-08

IPv4の色々なアドレスについて(覚書)

もうグローバルアドレスとしては在庫がなくなっているIPv4ですが、いくつかある特殊なアドレスが今どうなっているか確認したので覚書。

IPv4のPrivate Address
RFC1918 Address Allocation for Private Internets[1]
  • 10.0.0.0/8
  • 172.16.0.0/12
  • 192.168.0.0/16
IPv4のISP Shared Address(LSN用)
RFC6598 ISP Shared Address[2]
  •  100.64.0.0/10
IPv4のLink Local Address
RFC6890 Special-Purpose IP Address Registries[3]
  • 169.254.0.0/16

他にも色々な定義がRFC6890にある。

[1] http://tools.ietf.org/html/rfc1918
[2] http://tools.ietf.org/html/rfc6598
[3] http://tools.ietf.org/html/rfc6890

2013-06-06

myPhone A818g Duoを買った

端末使用目的

長いこと使い続けているHTC Desire(UK)がもうそろそろお役御免でもいいかなと思って、以下の点を気にしながら値段が安かったので買ってみることに。主に海外でのモバルーとちょっとした用途。

  • 画面が小さい、重くない
  • そんなに遅くない
  • OSは新しめ
  • SDが付く
  • できれば2SIM

というわけで、実際のmyPhone A818g Duoのスペックを。

  • 3.5インチ画面(非IPS) 320x480(HVGA)
  • 3.2Mpxカメラ、リアカメラ・フロントカメラ
  • MT6577 (Cortex-A9 2Core 1GHz)
  • RAM 474MB(たぶん512MBのうちいくばくか共有)
  • ストレージ 0.98GB+1.55GB MicroSDHCで拡張可能
  • デュアルSIMスロット(SIM1:UMTS/GSM、SIM2:GSM)
  • Android OS 4.1.1 JRO03C
  • Google Playストア あり
  • Dual Band 3G(900/2100?)
  • ボタンは音量上下、電源と画面下に左からメニュー、ホーム、戻るの電子ボタン

ということで、今の煌びやかなフラッグシップ端末と比べると申し訳ないくらい貧弱感はありますがこれでいいんです。お値段はPHP3990(日本円でいくらかはアベノミクス中なので各自計算していただきたいのですが買ったときレートは10000円弱(9000円強))です。
ちょっと手間だったのは日本語ロケールを選べなかったのでMore Locale2を入れて無事に日本語化。毎度お世話になります。ちなみにモトヤが入ってたので日本語ロケールの場合は中華フォントにはなりません(4.1ですし)。

ちなみに、A818シリーズは同じ筐体を使っているようで、A818iというもっと廉価(PHP1000安い)なモデルもありますがこちらはCPUが1コアでOSがGingerbreadなので購入するつもりであればよくご確認を。

というわけでざっと使用感とか。

さすがに触ってない端末を買うのは怖かったので、購入前に「Can I touch this?」と聞いたら快くおねぇさんが実物を出してくれました。海外で端末を買ったのは初めてですがこれが一般的みたいで良かったです。
購入前にチェックしたのは、ホームボタンで一覧を出した後のスクロールの速さとかいくつかのアプリの起動速度とか。普通に使う分にはなんら困らなさそうだったのですんなり購入へ(まぁ解像度もちっちゃいし有利かもしれませんが)。

スクリーンショットの取得は音量下と電源同時押し2秒くらいキープ。
あとは3G電波をDesire並みにつかんでくれるかと、壊れるかどうか(やたら日本人のmyPhone評が壊れるばっかりなので)。できるだけ長く使えることを期待しています。


2013-03-18

MediaPad(S7-301u)にカスタムROMを入れる

古い方のMediaPad

HUAWEIの7インチタブレットMediaPadは2011年に発売されて、当時の7インチタブレットとしては多分初めての1280x800解像度とAndroid3.2を搭載して発売されました。

結局日本の認証機関を通っているものの国内で発売はされずという悲しい結末を迎えることがほぼ間違いありません。

発売後ほどなくしてS7-301uを購入(輸入)したのですが、月日が流れ、その後提供されたICSをもってしても最新ではないので徐々に何とかしたい欲が生まれてくるものです。(外にも持ち歩いているのですが出番はあまりないイメージ。図書館で動画見る時に使ったりはしましたが)

ちなみに.、ファームウェアは英語と中国語(簡体字)で提供されています。中身はそれぞれ違うので要注意。
英語(Softwareの中) http://www.huaweidevice.com/worldwide/technicaIndex.do?method=gotoProductSupport&productId=3779
中国語(軟件下載の中) http://www.huaweidevice.com/cn/technicaIndex.do?method=gotoProductSupport&productId=3807

カスタムROMの種類(Android4.2ベース)

このエントリ記載時点の情報として、2つのカスタムROMを記載します。
AOKP for MediaPad Unofficial Nightlies(4.2.2)
http://forum.xda-developers.com/showthread.php?t=2131218

CM10.1 for Huawei Mediapad(4.2.2)
http://forum.xda-developers.com/showthread.php?t=2045808

どちらもBluetoothが動かないという点があります。他にHDMI周りとUSBストレージ(マウントポイントが特殊だから?)とWi-Fiテザリングができないという点もあるようなので導入するつもりの方はご確認を。自己責任です。

CM10.1を入れる

ということでCM10.1の方を入れてみることにします。記載されている主な手順は以下。

  1. HUAWEIのストックROM(4.0.3)を入れておく
  2. TWRPかCWMのインストールが必要。自動インストーラのZIPをPCにダウンロードして、展開。install_recovery.cmdを実行して表示される指示に従う(WindowsのPCが必要ですね・・・)
  3. CyanogenMod 10 for Huawei MediapadとGoogle appsをダウンロードして、内蔵又は外付けSDに配置。
  4. TWRPかCWMを起動して、バックアップに同意します(これでストックROMのフルバックアップが取れます)
  5. もし以前のCM10又はParanoidAndroidをflashしたい場合はこのパートをスキップ、もしストックROMかAOKPから来た場合は、Wipeを選んでFactory Resetを選んで操作に同意。
  6. backを押してインストールを選択、ダウンロードしたROMのzipを見つけたら選んで操作に同意
  7. backを押してインストールを選択、ダウンロードしたGappsのzipを選んで操作に同意
  8. システムを再起動してCM10.1を楽しんでね
注意点
  • TWRP/CWMリカバリーはcm10/pa/aokpと同じように使える。HUAWEIのストックROMの内蔵メモリはデータと共有でマウントされている。でもカスタムROMリカバリはデータとメディアだけでマウントするオプションがある。だからストックROMにはこれらのリカバリーで内蔵ROMでバックアップしてFactory Resetでワイプする。でもそれらはcm10/paみたいなカスタムROMではしないことなんだ。
Gappsはリンクが張られていたものよりも新しいものがあったので、以下からダウンロードして保存。
http://goo.im/gapps/gapps-jb-20130301-signed.zip


Windows用USBドライバーをインストール

http://www.huaweidevice.com/worldwide/downloadCenter.do?method=toDownloadFile&flay=software&softid=Mzk1MzA=


これであってるかわからないけど他に該当するのがなさそうなので・・・
ドライバーと一緒にHiSuiteというユーティリティもインストールされます。使う機会あるかな・・・

自動実行リカバリインストーラを実行
USBドライバ(ユーティリティ)をインストールしたら、自動実行インストーラを実行します。


前々からTWRPの評判がいいみたいなので今回使ってみることに。



キーを押すとMediaPadが再起動します。再起動したら電源を落としてTWRPに入ります。

TWRPで操作(スクショなし)

TWRPを起動する為に電源を落とすんですが、このときに「高速ブート」が有効になっていると何をしてもリカバリーに入れないので、電源を落とす前に設定から高速ブートをOFFにしておきます。

TWRPに入る時は以下の手順。

  1. タブレットの電源を切る(高速ブートは切っておく)
  2. 音量下ボタン(音量ボタンの電源ボタンから遠いほう)を押しながら電源ボタン長押しで電源投入
  3. 「ブルッ」と振動するので、電源ボタンだけ離す(音量下ボタンは押しっぱなし)
  4. 「HUAWEI MediaPad」が表示
  5. 一瞬ブラックアウト
  6. もう一度「HUAWEI MediaPad」が表示
  7. もう一回ブラックアウト
  8. 「TEAMWIN」ロゴが表示されたら音量下ボタンを離す
  9. しばらく待つとTWRP起動
で、バックアップを取得、再起動。もう一回TWRPでフルワイプ、Factory Reset、再起動。
CM10.1とGappsをInstallから選んでインストール(TWRPは2つ同時に入れられますね)、再起動。

ようこそで完了。



2013-03-08

使ってないperlの関連パッケージを削除する

Perlプログラマーの方、お元気でしょうか。
普段プログラマーをしておりますが、新人の時にテストツールをシェルで作ってと言われ、テスト結果のログ解析をする必要があったので急ごしらえでperlでログ解析部分を書いて依頼、まったくPerlとは縁のない日々を過ごして参りました。

そんな前段はさておき、プライベートでもPerlのコードを書くことはないし、これからもないだろうなとは思ったものの、今動いているものから完全にPerlを削除をするのは難しかろう点も事実ですので、ディスクの節約の為にPerlで作られてる部分の必要ないところをじゃんじゃん消し抵抗と思います。Debianです。

現状把握。

それではいったいどの程度のPerlで作られているパッケージがインストールされているのか、面倒なのでlibほにゃららperlというパッケージの数を調べてみましょう。

$ dpkg -l | grep -E  lib.*perl | wc -l
 結果
78
うーん。 多い。実際にはdpkgの結果は1パッケージで2行表示されるので39パッケージがインストールされるという事ですが、それでも多い。perl書かへんのに・・・

削除。

全部いっぺんに削除しようとしたらlinux-imageとか削除されそうになったので1つ1つ消していきます。(apt-get remove --purge libほにゃららperlで)
gnome2は使ってない事が前提。

消せたもの

libalgorithm-diff-perl
libalgorithm-diff-xs-perl
libalgorithm-merge-perl
libanyevent-perl
libapt-pkg-perl
libauthen-ntlm-perl
libcairo-perl
libclass-accessor-perl
libconfig-file-perl
libdigest-hmac-perl
libevent-execflow-perl
libevent-perl
libevent-rpc-perl
libfile-fcntllock-perl
libfont-afm-perl
libglib-perl
libgnome2-canvas-perl
libgnome2-perl
libgnome2-vfs-perl
libgtk2-perl
libhtml-form-perl
libhtml-format-perl
libhtml-template-perl
libhttp-daemon-perl
libintl-perl
libio-socket-inet6-perl
libio-string-perl
liblist-moreutils-perl
libmailtools-perl
libmusicbrainz-discid-perl
libpango-perl

libparse-debianchangelog-perl

libperl5.14
libpod-plainer-perl
libregexp-assemble-perl
libsocket6-perl
libsub-name-perl
libtext-charwidth-perl
libtext-unidecode-perl
libtext-wrapi18n-perl
libtie-ixhash-perl
libwebservice-musicbrainz-perl
libxml-libxml-perl
libxml-namespacesupport-perl
libxml-sax-base-perl
libxml-sax-expat-perl
libxml-sax-perl
libxml-simple-perl

libyaml-tiny-perl

消せなかったもの

libclass-isa-perl
libdpkg-perl
libencode-locale-perl
liberror-perl
libfile-copy-recursive-perl
libfile-listing-perl
libhtml-parser-perl
libhtml-tagset-perl
libhtml-tree-perl
libhttp-cookies-perl
libhttp-date-perl
libhttp-message-perl
libhttp-negotiate-perl
libio-socket-ssl-perl
liblocale-gettext-perl
liblwp-mediatypes-perl
liblwp-protocol-https-perl
libnet-dbus-perl
libnet-http-perl
libnet-ssleay-perl
libswitch-perl
libtext-iconv-perl
libtimedate-perl
liburi-perl
libuuid-perl
libwww-perl
libwww-robotrules-perl
libxml-parser-perl
libxml-twig-perl