[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
以下のようなものを作る。
書いたコードは以下の感じ。
<div style="color: white;"> <div style="border: #0000FF 5px double; border-radius: 5px; background-color: #3333ff; width: 500px; position: relative; height: 2em;"> ベースとなる何か <span style="border: #0000AA 3px double; border-radius: 3px; background-color: #5555aa; position: absolute; right: 0px;">ぼたん</span> </div> </div>
考えなければならない点は4つ。
内側の span (つまりボタンになる span) を書く。これで配置を絶対配置にする。ただし、外側の要素の poistion を static 以外にしておく必要がある。外側の要素が static ではないなら外側の要素に対して絶対配置になるが、そうでなければページ全体に対する絶対配置となる。とりあえず、 relative が他への影響が最も少ないので relative にしておくのが良い。
position が absolute に指定されているため、親要素の右端からの距離が 0px になる。
position:absolute の場合、インライン要素にしておかないと高さについても設定しなければならず面倒なので注意。
上述の通り。内側の absolute における位置基準にするために relative にする。
absolute な要素に対しては合わせて高さを調整してくれない。その為、適切な高さに再設定してやる必要がある。ここでは 2em に設定している。
「サーバの稟議が通った!サーバが届くぞ!」という喜びの声。そして、届くサーバ15台……「えっ、これ全部に Ubuntu Server をインストールするの?」
インストール用の CD を15台に入れては抜いて入れては抜いてをしなくて済む方法としてネットワークインストールがある。が、インターネットで見つかった手順書は若干古いものが多かった。ので、実際にやった時の記録。
以下のような構成になる。
┏━━━━┓ ┃ルーター┃ ┗━┯━━┛┏━━━━━┓ ├───┨PXE サーバ┃ │ ┗━━━━━┛ │ ┏━━━━━━┓ ├───┨新しいサーバ┃ │ ┗━━━━━━┛ │ ...
PXE サーバと新しいサーバ群は同じネットワーク上にある必要がある。
まず、ルーターが DHCP サーバを兼ねていたらルーターの DHCP サーバ機能をオフにする。これは PXE サーバが DHCP サーバになるためである。
以下の手順で実施する。
まず、 DHCP サーバをインストールする。
# apt-get install isc-dhcp-server
設定ファイルを編集する。 /etc/dhcp/dhcpd.conf である。末尾に以下を記述する。
# subnet と netmask でネットワークを指定。 # range は新しいサーバに付与する IP アドレスの最小値/最大値を入れる。 subnet 192.168.237.0 netmask 255.255.255.0 { range 192.168.237.2 192.168.237.12; } # DNS サーバの IP アドレスを入れること option domain-name-servers 192.168.1.1 ; # ネットワークインストールのメディアへのパス filename="ubuntu/install/netboot/pxelinux.0";
設定したのでサーバを再起動するのだが、再起動した後にログを見ると不穏なメッセージが載っている。
# service isc-dhcp-server restart
# cat /var/log/apt/isc-dchp-server6.log
Please Create and configure /etc/dhcp/dhcpd6.conf to fix the problem.
どうにも /etc/dhcp/dhcpd.conf ではなく /etc/dhcp/dhcpd6.conf という名の config ファイルが必要らしい。インストール直後に配置されるのは /etc/dhcp/dhcpd.conf だというのに。内容は /etc/dhcp/dhcpd.conf と同じでよいので複製する。
# cp /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd6.conf
# service isc-dhcp-server restart
tftp サーバのセットアップをおこなう。さほど注意点はない。
とりあえずインストール。
# apt-get install tftpd-hpa
設定を行う。 /etc/default/tftpd-hpa を編集し、以下の二行を追記。
RUN_DAEMON="yes" OPTIONS="-l -s /var/lib/tftpboot"
インストールイメージを入手する。
$ cd
$ wget http://releases.ubuntu.com/14.04.4/ubuntu-14.04.4-server-amd64.iso
DHCP の設定と tftp の設定で記述した場所に iso イメージを配置する。
# mount -t iso9660 -o loop /home/ubuntu/ubuntu-14.04.4-server-amd64.iso /var/lib/tftpboot/
新しいサーバを起動し、ブートメニューから PXE ブートを選択。インストールを開始できる。何台でもやれる。
PXE ブートと preseed.cfg を使って Ubuntu 14.04 LTS のインストールを自動化する
ピクシー、と発音する。Preboot Execution Environment の略。ネットワーク経由でコンピュータを遠隔地から起動するための規格。より詳しい話は Preboot Execution Envionment (PXE) Specification Version 2.1 に。
PXE を利用するために起動用のメディアを提供するサーバ。PXE サーバは特別な機能を持たない普通の物理サーバを利用して作ることができる。逆に、インストールする側のサーバは PXE ブートに対応している必要がある。
Trivial File Transfer Protocol の略。FTP に似ていてファイル転送を行うプロトコル。FTP とは違い、認証は行われない。また、転送の効率に重きをおいた代わりに信頼性を犠牲にしている。
この記事は Creative Commons by-sa 3.0 with attribution required で公開されている記事を翻訳したものです。その為、この記事も同じライセンスとなります。
元記事は boot - Gave up waiting for root device, ubuntu--vg-root doesnt exist - Ask Ubuntu です。
boot - Gave up waiting for root device, ubuntu--vg-root doesnt exist - Ask Ubuntu の翻訳です。Ubuntu を起動しようとしたときに Gave up waiting for root device と怒られて失敗したときの対処法についてです。
64bit 版の Ubuntu を Netbook にインストールしようとしたところ、以下のエラーが発生しました。どうも、パーテーションの問題のようです。以下にエラーメッセージを載せます (訳注) 原文では画面を写真で撮ったもの
Gave up waiting for root device. Comon problems:
- Boot args (cat /proc/cmdline)
- Check rootdelay= (did the system wait long enough?)
- Check root= (did the system wait for the right device?)
- Missing modules (cat /proc/modules; ls /dev)
ALERT! /dev/mapper/ubuntu--vg-root does not exist. Dropping to a shell!
BusyBox v1.21.1 (Ubuntu 1:1.21.0-1ubuntu1) build-in shell (ash)
Enter 'help' for a list of built-in commands.
(initramfs) _
この画面で lsblk を試したところ次のように出ました。
lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 232.9G 0 disk ├─sda1 8:1 0 231G 0 part ├─sda2 8:2 0 1K 0 part └─sda5 8:5 0 2G 0 part [SWAP] sr0 11:0 1 1.2G 0 rom /cdrom loop0 7:0 0 1.1G 1 loop /rofs
lsblk コマンドを打ってみて結果を教えてください。
日時 2015年1月1日 19:54
返答者 psusi
@pasui lsblk が見つからない、と言われたらどうしたらよいですか?
日時 2015年8月15日 20:06
返答者 sitilge
lsblk -fs の結果、fdisk /dev/sda に入った後に p を試した結果、あとは grub repair の結果を教えてください。
他にも似たような質問が見つかりました。しかし、こちらもこちらも RAID と Ubuntu について答えているようです。
これらに対する対応は次のようにするとよいでしょう。先の2つの質問に対しても同様です。
ls /dev/mapper を実行し、root ボリュームの有無を確認してください。もしもなければ、10秒まったうえで同じコマンドを再度試してください。exit すれば動き出すはずです。 (こちらにも同じ説明があります)root=UUID-6500... と書いてあるところがあるので、こちらを root=/dev/sdx に書き換えます。 sdx はあなたの起動用パーテーションに書き換えてください。UUID が不正であるためにうまくいかないないしは /dev/disk/by-UUID... が存在しないために起動しないのであれば、これで回復するはずです。(1)kernel /boot/vmlinuz-2.6.27-7-generic root=UUID=43206294-74ef-434d-aca2-db74b4257590 ro quiet splash all_generic_ide といった感じで all_generic_ide パラメータを起動コマンドの末尾につけてみてください。これで動いたケースがあるようです。(2)Recovery オプションを使って起動してみてください。/dev/mapper/ubuntu-vg-root のエラーは RAID と関係があるようです。
コピーが始まる前に、インストーラの概要画面で Advanced ボタンを押してください (これは MSDOS の parent パーテーションです。Linux パーテーションとは違います)。そこで Boot パーテーションをこの詳細はこちらを確認してください。特に grub に関してよくよく確認してください。/dev/mapper/pdc_feddabdfないしは dmraid の一覧から fakeraid パーテーションに変更してください。選択したディスクのチェックボックスをクリックし、選択してください。インストーラは/dev/mapper/ubuntu-vg-rootまたは他の選択した論理パーテーションを指すため、GRUB2 を利用することに留意してください。
chroot を使った上で Ubuntu をアップデートしてください。この方法で直った、とこちらで cpttripzz さんが言っています。chroot についてはこちらを読んで理解してください。ないしは Unix & Linux のこちらの記事でもよいでしょう。より詳細は Arch Wiki か Gentoo Wiki を読んでください。前は Windows 7 を入れていたネットブックです。
日時 2015年1月2日 12:30
返答者 Jonas Franz
fdisk の結果がこちらです。hastebin.com/wayiqowine.rib
日時 2015年1月2日 12:46
返答者 Jonas Franz
lsblk --fs の結果がこちらです。hastebin.com/vadapinoro.hs
日時 2015年1月2日 12:47
返答者 Jonas Franz
得られたエラーメッセージはこちらです。postimg.org/image/tzuyske3d/
日時 2015年1月2日 16:52
返答者 Jonas Franz
@JonasFranz ls の結果はいかがでしょうか。lsblk - fs がパーテーションタイプを出してないようです。
日時 2015年1月3日 0:10
返答者 One Face
@JonasFranz Bootrepair の結果を見ると grub は i386 のマシンだ、と主張しています。64bit OS とは合わないのではないでしょうか?
日時 2015年1月3日 0:48
返答者 One Face
32bit のも同様に試しました。同じエラーが出てしまいました。
日時 2015年1月3日 8:30
返答者 Jonas Franz
mount の結果です。paste.ubuntu.com/9664333/
日時 2015年1月3日 10:38
返答者 Jonas Franz
lsblk - fs @C-Rags の結果です。paste.ubuntu.com/9664346/
日時 2015年1月3日 10:40
返答者 Jonas Franz
lsblk -l の結果です。paste.ubuntu.com/9664367/
日時 2015年1月3日 10:42
返答者 Jonas Franz
後2時間だけなら時間をとれます。チャットで連絡ください。
日時 2015年1月3日 11:23
返答者 One Face
ベルリン時間午後8時に連絡します。
日時 2015年1月3日 13:04
返答者 Jonas Franz
回答を編集しました。そちらを確認してみてください。
日時 2015年1月4日 15:04
返答者 One Face
以下を試してみてください。
(initramfs) reboot
そのうえで、OS 選択画面から古いカーネルを選んで起動してください。
もしもうまくいったら、One Face さんが 4,5 で書いた通りの理由で以下のコマンドが効くかもしれません。
sudo apt-get install lvm2
日時 2015年8月2日 19:06
返答者 emisilva
アラゴ (Around 五か月) の息子のミルク摂取量が激減しました。
当初、哺乳瓶を拒んでいるように見えました。哺乳瓶を近づけると口の近くに手を持ってきて哺乳瓶をホールドするのです。
しかし、妻が名推理。哺乳瓶を拒んでいるためではなく、哺乳瓶を自分で持ちたいがためのホールドではないか、と。
なるほど、確かによくよく観察すると試行錯誤している。が、自分で哺乳瓶を持つ筋力は鳴く、変なところをつかんでいるためにうまく飲めない。本人がコツをつかむまでは苦労しそうです。
併せて妻に言われたのが「もはやミルクを飲ませてあげるのではなく飲むのを補助する感覚」とのこと。難易度がグッと上がった……
いくつ要素があるかわからないリストに対し、”リストの要素をクリックしたらその要素に応じた何かが発生する”、というようにする。この際、リストの各要素にイベントをバインドしてもよいが、もっと楽にやれる方法がある。
<ul id="animals"> <li>こぶた</li> <li>たぬき</li> <li>きつね</li> <li>ねこ</li> </ul>
$('#animals').click(function(e) {
alert($(e.target).text());
});
こうすると、クリックした動物の名前が出てくる。親要素にイベントをバインドした上で e.target で実際にクリックされた要素を取得することで各 li にイベントバインドするよりも単純に書ける。
クリックされてイベントが発生してほしくないものがクリックされた場合の対処は以下がある。
以下の html で class ='noAlert' のものをクリックしても出ないようにすることを考えてみよう。
<ul id="animals"> <li class='noAlert'>おに</li> <li>こぶた</li> <li>たぬき</li> <li>きつね</li> <li>ねこ</li> <li class='noAlert'>かいじゅう</li> </ul>
$('#animals').click(function(e) {
if($(e.target).hasClass('noAlert')) {
return;
}
alert($(e.target).text());
});
きわめて単純。 noAlert クラスを持つ場合は途中で return してしまう。多分こちらの方が直感的だと思う。
$('#animals').click(function(e) {
alert($(e.target).text());
});
$('.noAlert').click(function(e){
e.stopPropagation();
});
stopPropagation を使うとイベントが伝播しなくなる。そのため、 li がクリックされたことはわかっても ul がクリックされたことをキャッチできなくなる。
noAlert の要素にイベントをバインドする、という面倒があるが……
UI Events Specification にもう少し詳しい話がある。
質問日時 2015年1月1日 17:25
編集日時 2015年1月1日 22:15
質問者 Jonas Franz