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コアにした.
- 仮想マシンを起動.言語,パーティション,インストールパッケージを選択.
- インストール完了したら,再起動.
コンソール画面での 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カーソルを原点に移動
- Shift-s で Snapメニューを出して「カーソルを原点へ移動」を選ぶ
- 3Dカーソルを任意の点の位置に移動する - BlenderFAQ
- 選択対象をカーソルに移動
- Shift-s でSnapメニューを出して「選択物→3Dカーソル」を選ぶ
- 中心点(オレンジ色の点)を原点に移動
- 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に変換する方法
Windows に MSYS をインストール
以下の記事を参考に,MSYS をインストール.
文字化けを解消するための方法が以下にあるので,同様に作業しておく.
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) と呼ばれる間接参照メカニズムと共に使うらしい.
動的なリンクを行うシステムで使う.
- eh_frame_hdr
CFI directives | Rafael Espindola's Blog
例外処理に使う.
eh_frame というのがバックトレース(スタックトレース)をとるための情報が入ったフレームで,eh_frame_hdr は C++のランタイムが 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
- .gnu.warning
How do you suppress GCC linker warnings? - Stack Overflow
C言語系/「デーモン君のソース探検」読書メモ/15, mktemp(3),mkstemp(3) - Glamenv-Septzen.net
- .glue_7t
(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_*) } } ==================================================