メモ書き

自分が後で見直すためにつけている作業のメモ書きです.それ以上の意味はありません

Debian(stretch) に Docker をインストール

Docker を Debian(stretch) にインストールする.

手順

手順についてはここ(Docker Docs - Debian)を参考にした.
docker.io パッケージをインストールすればよい.

# apt-get install docker.io

動作確認は hello-world というイメージを動かしてみて,メッセージが表示されればよい.

# docker run --rm hello-world
削除する場合
  • パッケージを削除する
# apt-get remove docker.io # 通常のパッケージ削除
# apt-get purge docker.io  # コンフィギュレーションファイルも含めて削除
# apt-get autoremove --purge docker.io   # 依存するパッケージも削除したい場合
  • ユーザの作成した設定ファイル等を削除する
# rm -rf /var/lib/docker

Testing の Debian 最小イメージから VMWare 仮想マシンを作る

Debian テスト版の VMWare 仮想マシンを作成する.
  • 最小限のインストールイメージのダウンロード.インストーラのページの「netinst CD イメージ」で,x64マシンの場合 amd64 のリンクをクリックしてCDイメージをダウンロードする.
  • VMWare仮想マシンの新規作成.CDイメージを選択する.
  • OSの選択として,Linux, ディストリビューションDebian の Testing 相当のものが含まれないので,「Debian 7.x 64ビット」を選択しておいた.
  • ハードの設定.とりあえずメモリは1GB,プロセッサはプロセッサ数1,2コアにした.
  • 仮想マシンを起動.言語,パーティション,インストールパッケージを選択.
    • 言語設定: 基本的に英語とする.日本語に設定するとコンソール作業がつらい.
      • 言語(Language): English
      • 場所(Locale): Japan
      • デフォルトロケールセッティング: 指定した言語と場所の組み合わせに対する定義が存在しないということで訊かれる.United States(en_US.utf-8)を選択.
      • キーボード設定:英語キーボードを持っているので English とした
    • パーティション
      • 既定の設定とし,分けない.
    • インストールパッケージ
      • ここでは最小限のパッケージのみインストールし,後で追加する方針のため,チェックを全部外す.
  • インストール完了したら,再起動.
コンソール画面での VMWare Tools のインストール
  • 再起動したら VMWare-Tools をインストール.ここではコンソールで作業を行う.
    • CD-ROMをマウントせよとの指示があるため,マウントする.マウントデバイスは /etc/fatab を確認したところでは /dev/sr0 が /media/cdrom0 にマウントされるようなのでこれをマウントする.
# mount /media/cdrom0
# cd /media/cdrom0
# tar xvf VMwareTools-9.9.3-2759765.tar.gz -C ~
# cd ~/vmware-tools-distrib/
# ./vmware-install.pl

いくつかの質問を答えて行けばよい.
sysv-rcパッケージが必要だけど update-rc.d が見当たらないとか言われる...
再度スクリプトが挑戦するみたいなので気にせずに進める.
vmware-install.pl の中で bin/vmware-config-tools.pl を呼び出しているらしい.
その中でドライバのコンパイルを行うために make, gcc, linux-headers-amd64 が必要らしい.
gccなどが入っていなくてvmware-config-tools.pl の実行に失敗した場合はもう一度実行しなおせばよい.
終了すると,CD-ROMは自動的にアンマウントされる.

sources.list の編集

安定版で提供されるパッケージのバージョンが古いため,基本的にDebianのパッケージはTesting を使い続けることにする.
現状の sources.list (/etc/apt/sources.list) では,次のようにバージョンの名称が使われている.

deb http://ftp.jp.debian.org/debian stretch main

この stretch の部分を,testing に置き換える.

deb http://ftp.jp.debian.org/debian testing main

置き換え後,念のために apt-get update を実行.

Blender の操作方法メモ

Blender の操作が慣れないせいか使いにくくて困るので,確認した内容をメモする.

基本的な操作

  • 拡大縮小
    • sを押す
  • 移動
    • g を押す
    • 別レイヤへ移動する場合は mを押す
  • 回転
    • r を押す
    • カーソルを中心に回転するのでカーソルを回転中心に移動しておく
  • 視点を変える
    • キーパッドの7(上),3(右),1(前),Ctrlキーとあわせるとそれぞれの反対側になる
    • 数値キーパッドでないとだめ,キーボードの数値だと表示するレイヤーの変更になっちゃう
    • キーパッドの0を押すとカメラの視点になる
    • キーパッドの5で投影法を変更
    • マウスホイールでドラッグしても視点が変えられる.Alt押しながらだと特定方向付近を向いたときにその方向にスナップしてくれる.Macだとトラックパッドで視点変えられる.
    • 上からの視点の際に立て横へ視点を平行移動させたいときは Ctrl+{2,4,5,8}
  • 中心点(オレンジ色の点)を原点に移動
    • 3Dカーソルを原点に移動しておく
    • メニュー「オブジェクト→トランスフォーム→原点を3Dカーソルへ移動」
      • 中心点と原点とて呼び方が混乱しているように見える
  • 選択
    • b で矩形選択,c で円選択,a で全選択
    • 選択を反転する場合は Ctrl+i
  • 要素の追加
    • Shift+a でメニューが出る
  • 要素の複製
    • Shift+d で複製
  • オブジェクトモード ⇔ 編集モードの変更
    • TAB を押す

まだちょっと整理できてない

  • 親子関係の設定
  • 統合
  • グループ化
  • テクスチャ貼り付け
  • 変形関連

SVGの情報源

Scribus が生成する SVGファイルの内容を調べてみた.以下は情報源.

developer.mozilla.org
svg要素の基本的な使い方まとめ

  • 以下は,調べたSVGファイルに含まれていた要素や属性など

developer.mozilla.org
developer.mozilla.org
developer.mozilla.org
developer.mozilla.org

Illustrator 形式(.ai)のファイルをSVGに変換する方法

手元にある Illustrator形式ファイルを Blender にインポートしたい.
SVGならインポートできそうなのでSVGへ変換する方法を調べてみた.

AI --> SVG の変換に Scribus と Ghostscript が使えそう.


Scribus で適当に新規作成し,.ai ファイルをインポート,大きさや位置を調整して svg でエクスポート.

(参考)puredevice.hatenablog.com

Windows に MSYS をインストール

以下の記事を参考に,MSYS をインストール.

www.devlog.alt-area.org

文字化けを解消するための方法が以下にあるので,同様に作業しておく.

www.devlog.alt-area.org

NT-Logger の使い方メモ

TOPPERS/SSP で簡単にトレースログをとる方法ないかな,ということで NT-Logger というものがあるらしいので,使い方をざっと調べてみた.
CuBeatSystems - ファームウェア - Natural Tiny Logger (NT-Logger)

続きを読む

リンカスクリプトのよく知らないセクション達

リンカスクリプト眺めていたら知らないセクション名がわんさか出てきてうんざりした.
どうせ忘れてしまうと思うが調べなおすのも厄介なのでここで関連しそうなリンクと共に記録しておく.

  • CREATE_OBJECT_SYMBOLS

Using LD, the GNU linker - Section Data Expressions
リンクするオブジェクトファイル名と同じ名前のシンボルが生成されるみたいだけど,どういう用途で使うのか.

  • .gnu.linkonce.t.*

リンクと同名シンボル: weak シンボル編 - bkブログ
ld -z relro で GOT overwrite attack から身を守る - memologue

  • .plt

Linux 動的ライブラリーの徹底調査
PLTは Procedure Linkage Table の略らしい.
再配置処理に使うらしい.
GOT (Global Offset Table) と呼ばれる間接参照メカニズムと共に使うらしい.
動的なリンクを行うシステムで使う.

CFI directives | Rafael Espindola's Blog
例外処理に使う.
eh_frame というのがバックトレース(スタックトレース)をとるための情報が入ったフレームで,eh_frame_hdrC++のランタイムが eh_frame にアクセスするためのコードが入るセクション(ということらしい).
C++使わない人には無くてもよい?

Exception Handling - Dwarf Wiki
stackoverflow.com
https://refspecs.linuxfoundation.org/LSB_3.0.0/LSB-Core-generic/LSB-Core-generic/ehframechpt.html
http://d.hatena.ne.jp/w_o/20051109

How do you suppress GCC linker warnings? - Stack Overflow
C言語系/「デーモン君のソース探検」読書メモ/15, mktemp(3),mkstemp(3) - Glamenv-Septzen.net

  • .glue_7t

http://www.embedded.com/design/mcus-processors-and-socs/4026080/Building-Bare-Metal-ARM-Systems-with-GNU-Part-3

(19) The .glue_7t and .glue_7 sections are synthesized by the compiler when you specify the ARM-THUMB interworking option. The sections contain the "call veneers" between THUMB and ARM code and are accessed frequently by every call between ARM and THUMB. It's typically advantageous to place this small amount of hot-spot code in RAM.

  • .vfp11_veneer

Julian Brown - [ARM] VFP11 denorm erratum workaround in linker

  • .ARM.extab*

mikan++>STM32F>リンカスクリプト
newlib が例外処理のために使っているセクションらしい.
.gnu.linkonce.armextab.* も同様みたいだけど,何が違うのかよくわからない.
LLVM and the ARM ELF .ARM.exidx* Section - SushiHangover

  • .gcc_except_table

Airs – Ian Lance Taylor » .gcc_except_table

疲れたので,この辺でやめる.

GNUリンカ(ld)が内部的に持っている素のリンカスクリプトを出す

gcc がどんなセクションを出力するのか気になったので調べてみたら,リンカが内部的に持ってる素のスクリプトが出力できるらしいということを知ったので,記録.

$ arm-none-eabi-ld --verbose
GNU ld (GNU Tools for ARM Embedded Processors) 2.24.0.20150304
  Supported emulations:
   armelf
using internal linker script:
==================================================
/* Script for -z combreloc: combine and sort reloc sections */
OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm",
	      "elf32-littlearm")
OUTPUT_ARCH(arm)
ENTRY(_start)
SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib");
SECTIONS
{
  /* Read-only sections, merged into text segment: */
  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x8000)); . = SEGMENT_START("text-segment", 0x8000);
  .interp         : { *(.interp) }
  .note.gnu.build-id : { *(.note.gnu.build-id) }
  .hash           : { *(.hash) }
  .gnu.hash       : { *(.gnu.hash) }
  .dynsym         : { *(.dynsym) }
  .dynstr         : { *(.dynstr) }
  .gnu.version    : { *(.gnu.version) }
  .gnu.version_d  : { *(.gnu.version_d) }
  .gnu.version_r  : { *(.gnu.version_r) }
  .rel.dyn        :
    {
      *(.rel.init)
      *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*)
      *(.rel.fini)
      *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*)
      *(.rel.data.rel.ro .rel.data.rel.ro.* .rel.gnu.linkonce.d.rel.ro.*)
      *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*)
      *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*)
      *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*)
      *(.rel.ctors)
      *(.rel.dtors)
      *(.rel.got)
      *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*)
      PROVIDE_HIDDEN (__rel_iplt_start = .);
      *(.rel.iplt)
      PROVIDE_HIDDEN (__rel_iplt_end = .);
    }
  .rela.dyn       :
    {
      *(.rela.init)
      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
      *(.rela.fini)
      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
      *(.rela.ctors)
      *(.rela.dtors)
      *(.rela.got)
      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
      PROVIDE_HIDDEN (__rela_iplt_start = .);
      *(.rela.iplt)
      PROVIDE_HIDDEN (__rela_iplt_end = .);
    }
  .rel.plt        :
    {
      *(.rel.plt)
    }
  .rela.plt       :
    {
      *(.rela.plt)
    }
  .init           :
  {
    KEEP (*(SORT_NONE(.init)))
  }
  .plt            : { *(.plt) }
  .iplt           : { *(.iplt) }
  .text           :
  {
    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
    *(.text.exit .text.exit.*)
    *(.text.startup .text.startup.*)
    *(.text.hot .text.hot.*)
    *(.text .stub .text.* .gnu.linkonce.t.*)
    /* .gnu.warning sections are handled specially by elf32.em.  */
    *(.gnu.warning)
    *(.glue_7t) *(.glue_7) *(.vfp11_veneer) *(.v4_bx)
  }
  .fini           :
  {
    KEEP (*(SORT_NONE(.fini)))
  }
  PROVIDE (__etext = .);
  PROVIDE (_etext = .);
  PROVIDE (etext = .);
  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
  .rodata1        : { *(.rodata1) }
  .ARM.extab   : { *(.ARM.extab* .gnu.linkonce.armextab.*) }
   PROVIDE_HIDDEN (__exidx_start = .);
  .ARM.exidx   : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
   PROVIDE_HIDDEN (__exidx_end = .);
  .eh_frame_hdr : { *(.eh_frame_hdr) }
  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) }
  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table
  .gcc_except_table.*) }
  /* These sections are generated by the Sun/Oracle C++ compiler.  */
  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges
  .exception_ranges*) }
  /* Adjust the address for the data segment.  We want to adjust up to
     the same address within the page on the next page up.  */
  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
  /* Exception handling  */
  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) }
  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges .exception_ranges*) }
  /* Thread Local Storage sections  */
  .tdata	  : { *(.tdata .tdata.* .gnu.linkonce.td.*) }
  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
  .preinit_array     :
  {
    PROVIDE_HIDDEN (__preinit_array_start = .);
    KEEP (*(.preinit_array))
    PROVIDE_HIDDEN (__preinit_array_end = .);
  }
  .init_array     :
  {
    PROVIDE_HIDDEN (__init_array_start = .);
    KEEP (*(SORT(.init_array.*)))
    KEEP (*(.init_array ))
    PROVIDE_HIDDEN (__init_array_end = .);
  }
  .fini_array     :
  {
    PROVIDE_HIDDEN (__fini_array_start = .);
    KEEP (*(SORT(.fini_array.*)))
    KEEP (*(.fini_array ))
    PROVIDE_HIDDEN (__fini_array_end = .);
  }
  .ctors          :
  {
    /* gcc uses crtbegin.o to find the start of
       the constructors, so we make sure it is
       first.  Because this is a wildcard, it
       doesn't matter if the user does not
       actually link against crtbegin.o; the
       linker won't look for a file to match a
       wildcard.  The wildcard also means that it
       doesn't matter which directory crtbegin.o
       is in.  */
    KEEP (*crtbegin.o(.ctors))
    KEEP (*crtbegin?.o(.ctors))
    /* We don't want to include the .ctor section from
       the crtend.o file until after the sorted ctors.
       The .ctor section from the crtend file contains the
       end of ctors marker and it must be last */
    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
    KEEP (*(SORT(.ctors.*)))
    KEEP (*(.ctors))
  }
  .dtors          :
  {
    KEEP (*crtbegin.o(.dtors))
    KEEP (*crtbegin?.o(.dtors))
    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
    KEEP (*(SORT(.dtors.*)))
    KEEP (*(.dtors))
  }
  .jcr            : { KEEP (*(.jcr)) }
  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
  .dynamic        : { *(.dynamic) }
  .got            : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
  .data           :
  {
    __data_start = . ;
    *(.data .data.* .gnu.linkonce.d.*)
    SORT(CONSTRUCTORS)
  }
  .data1          : { *(.data1) }
  _edata = .; PROVIDE (edata = .);
  . = .;
  __bss_start = .;
  __bss_start__ = .;
  .bss            :
  {
   *(.dynbss)
   *(.bss .bss.* .gnu.linkonce.b.*)
   *(COMMON)
   /* Align here to ensure that the .bss section occupies space up to
      _end.  Align after .bss to ensure correct alignment even if the
      .bss section disappears because there are no input sections.
      FIXME: Why do we need it? When there is no .bss section, we don't
      pad the .data section.  */
   . = ALIGN(. != 0 ? 32 / 8 : 1);
  }
  _bss_end__ = . ; __bss_end__ = . ;
  . = ALIGN(32 / 8);
  . = SEGMENT_START("ldata-segment", .);
  . = ALIGN(32 / 8);
  __end__ = . ;
  _end = .; PROVIDE (end = .);
  /* Stabs debugging sections.  */
  .stab          0 : { *(.stab) }
  .stabstr       0 : { *(.stabstr) }
  .stab.excl     0 : { *(.stab.excl) }
  .stab.exclstr  0 : { *(.stab.exclstr) }
  .stab.index    0 : { *(.stab.index) }
  .stab.indexstr 0 : { *(.stab.indexstr) }
  .comment       0 : { *(.comment) }
  /* DWARF debug sections.
     Symbols in the DWARF debugging sections are relative to the beginning
     of the section so we begin them at 0.  */
  /* DWARF 1 */
  .debug          0 : { *(.debug) }
  .line           0 : { *(.line) }
  /* GNU DWARF 1 extensions */
  .debug_srcinfo  0 : { *(.debug_srcinfo) }
  .debug_sfnames  0 : { *(.debug_sfnames) }
  /* DWARF 1.1 and DWARF 2 */
  .debug_aranges  0 : { *(.debug_aranges) }
  .debug_pubnames 0 : { *(.debug_pubnames) }
  /* DWARF 2 */
  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
  .debug_abbrev   0 : { *(.debug_abbrev) }
  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end ) }
  .debug_frame    0 : { *(.debug_frame) }
  .debug_str      0 : { *(.debug_str) }
  .debug_loc      0 : { *(.debug_loc) }
  .debug_macinfo  0 : { *(.debug_macinfo) }
  /* SGI/MIPS DWARF 2 extensions */
  .debug_weaknames 0 : { *(.debug_weaknames) }
  .debug_funcnames 0 : { *(.debug_funcnames) }
  .debug_typenames 0 : { *(.debug_typenames) }
  .debug_varnames  0 : { *(.debug_varnames) }
  /* DWARF 3 */
  .debug_pubtypes 0 : { *(.debug_pubtypes) }
  .debug_ranges   0 : { *(.debug_ranges) }
  /* DWARF Extension.  */
  .debug_macro    0 : { *(.debug_macro) }
    .stack         0x80000 :
  {
    _stack = .;
    *(.stack)
  }
  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
}


==================================================