2017年1月28日土曜日

NVIDIA GeForce 6150SE nForce 430 の xubuntu 16.04 へのインストール

NVIDIA GeForce 6150SE nForce 430 の xubuntu 16.04 へのインストール

xubuntu16.04 64bit, ubuntu16.04LTS派生, linux
2017 Jan. 28.

# aptitude install nvidia-304

2017年1月15日日曜日

grub2 起動エントリー設定、起動エラー対処

2018 Sep. 15.
2018 Sep. 09.
2017 May 04.
2017 Jan. 15.

デフォルト起動エントリーの変更

エントリーの確認

# grep 'menuentry' /boot/grub/grub.cfg
  menuentry 'Ubuntu, with Linux 4.4.0-31-generic'
  menuentry 'Ubuntu 14.04.5 LTS (14.04) (on /dev/sda10)'
  menuentry 'Windows Vista (loader) (on /dev/sda3)'

デフォルト起動エントリーの設定

/etc/default/grub の GRUB_DEFAULT= に起動エントリーを記述する
  GRUB_DEFAULT='Ubuntu 14.04.5 LTS (14.04) (on /dev/sda10)'
 
# update-grub
 

前回起動したエントリーで起動する設定


/etc/default/grub の GRUB_DEFAULT= と GRUB_SAVEDEFAULT= を次に設定する。
        GRUB_DEFAULT=saved
        GRUB_SAVEDEFAULT=true
    // GRUB_DEFAULT=0 :エントリーの一番先頭がデフォルトで選択される

# update-grub
 

次回起動エントリーの一時的変更

(askubuntu.com/questions/838704/grub-reboot-to-specific-kernel/838835)

エントリーを指定して grub-reboot を実行する。次回起動時の一度だけ有効。

/etc/default/grub の GRUB_DEFAULT を次に設定する。
        GRUB_DEFAULT=saved


# update-grub
# grep 'menuentry' /boot/grub/grub.cfg
    menuentry 'Ubuntu, with Linux 4.4.0-31-generic'
    menuentry 'Ubuntu 14.04.5 LTS (14.04) (on /dev/sda10)'
    menuentry 'Windows Vista (loader) (on /dev/sda3)'

# grub-reboot 'Ubuntu, with Linux 4.4.0-31-generic'
あるいは
# grub-reboot N
    N: menuentry number
 
 サブメニューの起動設定は menu>submenu の書式とする
  # grub-reboot "Advanced options for Ubuntu>Ubuntu, with Linux 4.2.0-16-generic"
  あるいは
  # grub-reboot "1>2"
 

起動エラー対処

起動時にエラーとなりgrubシェルプロンプト画面となった時

grub.cfgファイルの場所を特定する。
  grub> ls (hd0,msdos8)/boot/grub



 
環境変数をセットする
 grub> set prefix=(hd0,msdos8)/boot/grub
  grub> set root=(hd0,msdos8)



 
grubメニュー画面を起動する。
  grub> insmod normal
  grub> normal



 
Linux起動後
  # grub-install /dev/sda
  # update-grub

FreeBSDの起動パーティション番号

# fdisk -l /dev/sda

デバイス   起動     Start 最後から セクタ   Size Id タイプ
/dev/sda1            2048  61382655  61380608  29.3G  7 HPFS/NTFS/exFAT
/dev/sda2        61384702 414670847 353286146 168.5G  5 拡張領域
/dev/sda3  *    414670848 488071167  73400320    35G a5 FreeBSD
/dev/sda5        61384704  83748863  22364160  10.7G  7 HPFS/NTFS/exFAT
/dev/sda6        83750912  92147711   8396800     4G 82 Linux スワップ / Solaris
/dev/sda7        92149760  93220863   1071104   523M 83 Linux
/dev/sda8        93222912 136230911  43008000  20.5G 83 Linux
/dev/sda9       136232960 414668799 278435840 132.8G 83 Linux


grubシェルでのFreeBSDパーティション

 (hd0,msdos6)

/etc/grub.d/40_custom での設定

#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.

menuentry "FreeBSD" {
  set root=(hd0,3)
  chainloader +1
}





2017年1月9日月曜日

シェルスクリプトで expr "$var" + 1 で数値判定するときの注意点


2019 Apr. 14.
2017 Jan. 09

何も書かれていないサイズゼロのファイルfile.txtから
var=`tail -n 1 file.txt`
とし、
expr "$var" + 1
ret=$?
とした時、
$varを二重引用符で囲むと、戻り値retには文法エラーが入る。
$varを二重引用符で囲まないと、varの値が0と判定され、exprの計算結果は1、戻り値retは0になる。

2017年1月8日日曜日

LinuxでのISO9660ファイルのDVD-Rへの焼き付け

LinuxでのISO9660ファイルのDVD-Rへの焼き付け

linux growisofs dvd+rw-tools ISO9660 DVD-R
2017 Jan. 08.

# aptitude install dvd+rw-tools

$ growisofs -dvd-compat -Z /dev/dvd=ISO-FILE
    DVDドライブの指定は/dev/dvdだけでよい。
    ISO-FILEの部分にISO9660ファイルのパスを書く。

単なるファイルとしてDVD-Rに焼き付ける場合
  $ growisofs -Z /dev/dvd -R -J FILE

2017年1月7日土曜日

onclkds.comへの勝手な接続の禁止設定


2017 Jan. 07.

basix 3.0でirefoxでもchromiumでもウインドウ内の何でもない場所をクリックした瞬間にonclkds.comにリダイレクトされ、さらに怪しいサイトにリダイレクトされる現象が頻発するので、
http://shikouhentai.jugem.jp/?day=20150501
を参考に、
ルーター(Buffalo AirStation WHR-AMPG)のセキュリティ設定のIPフィルタ設定で次の設定をした。
WHR-AMPGでは宛先アドレスにドメイン名を入れられないので、onclkds.comのIPアドレスを入れたが、変更される恐れがある。

動作     方向              送信元アドレス       宛先アドレス      プロトコル
拒否  LAN→WAN    192.168.1.0/24     206.54.163.50      全て

2017年1月4日水曜日

Wikipedia APIで「今日は何の日」データを取得するJavaScript


2017 Jan. 05.
2017 Jan. 04.

送信するURL

  var now = new Date();
  var month = now.getMonth()+1;
  var day = now.getDate();
  var monthDay = month+"月"+day+"日 ";
  var url = 'https://ja.wikipedia.org/w/api.php?format=json&utf8&action=query&prop=revisions&rvprop=content&titles=';
  url = url + monthDay;

取得するJSONデータ構造

  {
      "batchcomplete": "",
      "query": {
          "pages": {
              "4951": {
                  "pageid": 4951,
                  "ns": 0,
                  "title": "1月4日",
                  "revisions": [
                      {
                          "contentformat": "text/x-wiki",
                          "contentmodel": "wikitext",
                          "*": "{{カレンダー 1月}}\n'''1月4日'''(いちがつよっか)は[[グレゴリオ暦]]で年始から4日目に当たり、"
                      }
                  ]
              }
          }
      }
  }

  JSONデータ.query.pages[ pageid[0] ].revisions[0]["*"] に本文が格納されている。

  本文の内容の書式

     次の区切り文字列・順番で記事が並んでいる。
    各記事はアスタリスク(*)で始まり改行文字で終了している。
       == できごと ==
       == 誕生日 ==
       == 忌日 ==
       == 記念日・年中行事 ==
       == フィクションのできごと ==
       == 誕生日(フィクション) ===
       == 出典 ==
       == 関連項目 ==

wikipediaから今日に関する記事を取得し文字列で返すJavaScript

function wikipediaWhatIsToday(countArticle) {  // countArticleに取得する記事数を指定する
  var now = new Date();
  var month = now.getMonth()+1;
  var day = now.getDate();
  var monthDay = month+"月"+day+"日 ";
  var url = 'https://ja.wikipedia.org/w/api.php?format=json&utf8&action=query&prop=revisions&rvprop=content&titles=';
  url = url + monthDay;
  var response = UrlFetchApp.fetch(url);
  var json = response.getContentText();
  var data = JSON.parse(json);

  // get the page IDs
  //   http://stackoverflow.com/questions/30006183/get-wikipedia-pageid-from-title より
    var pageid = [];
    for( var id in data.query.pages ) {
      pageid.push( id );
    }

  // 記事本文を取得
  var content = data.query.pages[ pageid[0] ].revisions[0]["*"];  // キー*の値は["*"]で取り出す

  // 「できごと」を取り出す
  var dekigoto = content.match(/== できごと ==[\s\S]*== 誕生日 ==/);  // 改行文字を含む文字列には [\s\S]* を使う

  // アスタリスクで始まり改行文字で終わる文字列を取り出す
  article = dekigoto[0].match(/\*.+\n/g);  // *の前に\が必要

  // countArticleの個数の記事を取り出す
  var numberArticle = [];
  while (true) {
    var rand = Math.floor( Math.random() * article.length) ;
    numberArticle.push(rand);
    numberArticle = numberArticle.filter(function (x, i, self) {
            return self.indexOf(x) === i;
        })
    if (numberArticle.length == countArticle ) {
      break;
    }
  }

  var outputText = monthDay + "のできごと\n";
  numberArticle.forEach(function(numLine) {
    outputText = outputText + article[numLine] + "\n";
  });
  return outputText;
}