vagrant / virtualbox

vagrant2.2.6がVirtualbox 6.1(最新版)を認識してくれない!!

$ vagrant --version
Vagrant 2.2.6
VBoxManage --version
6.1.0r135406

参考サイト

https://blogs.oracle.com/scoter/getting-vagrant-226-working-with-virtualbox-61-ga
$ vagrant up
No usable default provider could be found for your system.

Vagrant relies on interactions with 3rd party systems, known as
"providers", to provide Vagrant with resources to run development
environments. Examples are VirtualBox, VMware, Hyper-V.

The easiest solution to this message is to install VirtualBox, which
is available for free on all major platforms.

If you believe you already have a provider available, make sure it
is properly installed and configured. You can see more details about
why a particular provider isn't working by forcing usage with
`vagrant up --provider=PROVIDER`, which should give you a more specific
error message for that particular provider.

編集ファイル

(1)

/opt/vagrant/embedded/gems/2.2.6/gems/vagrant-2.2.6/plugins/providers/virtualbox/driver/meta.rb

(2)

/opt/vagrant/embedded/gems/2.2.6/gems/vagrant-2.2.6/plugins/providers/virtualbox/driver/version_6_1.rb
http://www.coter.net/upload/version_6_1.rb
require File.expand_path("../version_6_0", __FILE__)

module VagrantPlugins
  module ProviderVirtualBox
    module Driver
      # Driver for VirtualBox 6.1.x
      class Version_6_1 < Version_6_0
        def initialize(uuid)
          super

          @logger = Log4r::Logger.new("vagrant::provider::virtualbox_6_1")
        end
      end
    end
  end
end

(3)

/opt/vagrant/embedded/gems/2.2.6/gems/vagrant-2.2.6/plugins/providers/virtualbox/plugin.rb

Ubuntu

Ubuntuで困った事

インストール可能なパッケージの「一覧」を更新する

$ sudo apt-get update
無視:1 http://us.archive.ubuntu.com/ubuntu artful InRelease                   
無視:2 http://security.ubuntu.com/ubuntu artful-security InRelease            
無視:3 http://us.archive.ubuntu.com/ubuntu artful-updates InRelease
エラー:4 http://security.ubuntu.com/ubuntu artful-security Release
  404  Not Found [IP: 91.189.88.174 80]
無視:5 http://us.archive.ubuntu.com/ubuntu artful-backports InRelease
エラー:6 http://us.archive.ubuntu.com/ubuntu artful Release
  404  Not Found [IP: 91.189.91.23 80]
エラー:7 http://us.archive.ubuntu.com/ubuntu artful-updates Release
  404  Not Found [IP: 91.189.91.23 80]
エラー:8 http://us.archive.ubuntu.com/ubuntu artful-backports Release
  404  Not Found [IP: 91.189.91.23 80]
........

Ubuntuのバージョン確認

$ cat /etc/os-release 
NAME="Ubuntu"
VERSION="17.10 (Artful Aardvark)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 17.10"
VERSION_ID="17.10"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=artful
UBUNTU_CODENAME=artful
$ cat /etc/apt/sources.list
#deb cdrom:[Ubuntu 17.10 _Artful Aardvark_ - Release amd64 (20171018)]/ artful main restricted

# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
# newer versions of the distribution.
deb http://us.archive.ubuntu.com/ubuntu/ artful main restricted
# deb-src http://us.archive.ubuntu.com/ubuntu/ artful main restricted

## Major bug fix updates produced after the final release of the
## distribution.
deb http://us.archive.ubuntu.com/ubuntu/ artful-updates main restricted
# deb-src http://us.archive.ubuntu.com/ubuntu/ artful-updates main restricted

## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team. Also, please note that software in universe WILL NOT receive any
## review or updates from the Ubuntu security team.
deb http://us.archive.ubuntu.com/ubuntu/ artful universe
# deb-src http://us.archive.ubuntu.com/ubuntu/ artful universe
deb http://us.archive.ubuntu.com/ubuntu/ artful-updates universe
# deb-src http://us.archive.ubuntu.com/ubuntu/ artful-updates universe

## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu 
## team, and may not be under a free licence. Please satisfy yourself as to 
## your rights to use the software. Also, please note that software in 
## multiverse WILL NOT receive any review or updates from the Ubuntu
## security team.
deb http://us.archive.ubuntu.com/ubuntu/ artful multiverse
# deb-src http://us.archive.ubuntu.com/ubuntu/ artful multiverse
deb http://us.archive.ubuntu.com/ubuntu/ artful-updates multiverse
# deb-src http://us.archive.ubuntu.com/ubuntu/ artful-updates multiverse

## N.B. software from this repository may not have been tested as
## extensively as that contained in the main release, although it includes
## newer versions of some applications which may provide useful features.
## Also, please note that software in backports WILL NOT receive any review
## or updates from the Ubuntu security team.
deb http://us.archive.ubuntu.com/ubuntu/ artful-backports main restricted universe multiverse
# deb-src http://us.archive.ubuntu.com/ubuntu/ artful-backports main restricted universe multiverse

## Uncomment the following two lines to add software from Canonical's
## 'partner' repository.
## This software is not part of Ubuntu, but is offered by Canonical and the
## respective vendors as a service to Ubuntu users.
# deb http://archive.canonical.com/ubuntu artful partner
# deb-src http://archive.canonical.com/ubuntu artful partner

deb http://security.ubuntu.com/ubuntu artful-security main restricted
# deb-src http://security.ubuntu.com/ubuntu artful-security main restricted
deb http://security.ubuntu.com/ubuntu artful-security universe
# deb-src http://security.ubuntu.com/ubuntu artful-security universe
deb http://security.ubuntu.com/ubuntu artful-security multiverse
# deb-src http://security.ubuntu.com/ubuntu artful-security multiverse
$ sudo cp /etc/apt/sources.list  /etc/apt/sources.list.bak
$ sudo sed -i -e 's/us.archive.ubuntu.com\|security.ubuntu.com/old-releases.ubuntu.com/g' /etc/apt/sources.list
$ sudo apt-get update
........
Fetched 38.4 MB in 3min 19s (192 kB/s)                                        
Reading package lists... Done
$ sudo apt-get install ibus-mozc

localectl

localectl

設定状況の確認

$ localectl status
   System Locale: LANG=en_US.UTF-8
       VC Keymap: n/a
      X11 Layout: us
       X11 Model: pc105

設定可能なロケールの一覧を出力

$ localectl list-locales

サポートされているロケールの一覧を出力

$ less /usr/share/i18n/SUPPORTED

ロケールを生成する

$ sudo locale-gen ja_JP.UTF-8

設定したロケールがあるか一覧を出力して確認

$ localectl list-locales
C.UTF-8
en_AG
en_AG.utf8
en_AU.utf8
en_BW.utf8
en_CA.utf8
en_DK.utf8
en_GB.utf8
en_HK.utf8
en_IE.utf8
en_IL
en_IL.utf8
en_IN
en_IN.utf8
en_NG
en_NG.utf8
en_NZ.utf8
en_PH.utf8
en_SG.utf8
en_US.utf8
en_ZA.utf8
en_ZM
en_ZM.utf8
en_ZW.utf8
ja_JP.utf8

キーマップを設定

$ sudo localectl set-locale LANG=ja_JP.utf8
$ sudo localectl set-locale LANG=en_US.utf8

システムキーマップの設定

$ sudo localectl set-keymap jp106
$ sudo localectl set-keymap jp-OADG109A

$ sudo localectl set-keymap us
$ localectl status
   System Locale: LANG=ja_JP.utf8
       VC Keymap: jp-OADG109A
      X11 Layout: jp
       X11 Model: jp106
     X11 Options: terminate:ctrl_alt_bksp

C

Zellerの公式

曜日を求めるプログラム

#include <stdio.h>

int main(int argc, char const *argv[])
{
  int year;
  int month;
  int day;
  int week_of_day;

  year = 2019;
  month = 10;
  day = 2;

  week_of_day = (year + year / 4 - year / 100 + year / 400 + (13 * month + 8) / 5 + day) % 7;
  printf("%d/%d/%d is %d\n", year, month, day, week_of_day);

  return 0;
}

0:日、1:月、2:火、3:水、4:木、5:金、6:土

$ ./zeller 
2019/10/2 is 3

C

🔳変数

コンピュータ内部でのメモリの識別:数値による番地(=住所)。メモリのどの番地に値が保持されているか、数値による番地を指定することは大変。メモリを変数として扱うとき、固有の名前を付けて区別する。C言語では、「 データ型 変数; 」で宣言することによりメモリのある領域が変数として扱うことができる。




🔳スタック

スタックはメモリ上に確保されていて、データの位置をスタックポインタという特殊なレジスタ(CPU内部の値を格納するエリア)を利用して実現している。スタック上に確保された変数は、その関数の処理を終えると、変数自体も消えてしまう(ローカル変数:関数の中で宣言する)。

#include <stdio.h>

char *func(void){
  char one_string[14] = "hello, world\n";
  printf("from func: %s", one_string);

  return one_string;
}

int main(int argc, char const *argv[])
{
  printf("from main: %s", func());
  return 0;
}

main()関数と、func()関数の2カ所で画面に文字を表示するprintf()関数が呼び出しているが.....

$ ./auto-var
from func: hello, world
from main: I��

func()関数の中で宣言した、配列one_stringはスタック上に確保されるものなので、func()関数の処理を終了した時点で、他の処理に使われて内容が破壊されてしまう。

func()関数、main()関数両方のprintf()が綺麗に表示できるようにするためには、スタックとは別の場所に変数を確保するような宣言を行う必要がある。「静的変数」として変数を宣言すると、スタックとは別の場所に確保される「 staticデータ型変数名; 」。

#include <stdio.h>

char *func(void){
  static char one_string[14] = "hello, world\n";
  printf("from func: %s", one_string);

  return one_string;
}

int main(int argc, char const *argv[])
{
  printf("from main: %s", func());
  return 0;
}
$ ./auto-var
from func: hello, world
from main: hello, world

「static int count」

#include <stdio.h>

void func(void){
  int count = 0;
  count += 1;

  printf("count = %d\n", count);

  return;
}

int main(int argc, char const *argv[])
{
  func();
  func();
  func();

  return 0;
}
$ ./auto-var_2
count = 1
count = 1
count = 1
#include <stdio.h>

void func(void){
  static int count = 0;
  count += 1;

  printf("count = %d\n", count);

  return;
}

int main(int argc, char const *argv[])
{
  func();
  func();
  func();

  return 0;
}
$ ./auto-var_2
count = 1
count = 2
count = 3

🔳大域変数:プログラムのどこからでも読み書きができる変数

大域変数は関数ではない場所で宣言する。

#include <stdio.h>

int global_number;

void func_1(void){
  printf("from func_1: %d\n", global_number);
  return;
}

void func_2(void){
  printf("from func_2: %d\n", global_number);
  return;
}

void func_3(void){
  printf("from func_3: %d\n", global_number);
  return;
}

int main(int argc, char const *argv[])
{
  global_number = 1;
  func_1();

  global_number = 10;
  func_2();

  global_number = 100;
  func_3();
  
  return 0;
}
$ ./global 
from func_1: 1
from func_2: 10
from func_3: 100

別ファイルからの大域変数の参照:extern指定子

extern指定子は、別のファイルに宣言してある変数や関数を利用したいときに、「あとでリンクするときに、実体がありますよ」と指定するためのキーワード。

extern_sub.c

int global_number = 99;

extern_main.c

#include <stdio.h>

extern int global_number;

int main(int argc, char const *argv[])
{
  printf("global_number = %d\n", global_number);
  return 0;
}
PROGRAM = extern
OBJS =  extern_sub.o extern_main.o
SRCS =  $(OBJS:%.o=%.c)
CC =  gcc
CFLAGS =  -g -Wall
LDFLAGS =

$(PROGRAM):$(OBJS)
    $(CC) $(CFLAGS) $(LDFLAGS) -o $(PROGRAM) $(OBJS) $(LDLIBS)
$ make -f Makefile.extern 
gcc -g -Wall   -c -o extern_sub.o extern_sub.c
gcc -g -Wall   -c -o extern_main.o extern_main.c
gcc -g -Wall  -o extern extern_sub.o extern_main.o 
$ ./extern 
global_number = 99

🔳const:記憶クラス指定子

constは、初期化した値から一切変更できなくなる指定子で、あらかじめ決められた値を、プログラム中で変更したくない場合に利用する。constが指定された変数を、初期値以外から変更しようとするとコンパイルエラーになる。

#include <stdio.h>

int main(int argc, char const *argv[])
{
  const char character = 'A';
  const int number = 1;

  printf("character is = %c\n", character);
  printf("number is %d\n", number);

  character = 'B';
  number = 2;

  return 0;
}
$ make -f Makefile.const 
gcc -g -Wall   -c -o const.o const.c
const.c:11:13: error: cannot assign to variable 'character' with const-qualified type
      'const char'
  character = 'B';
  ~~~~~~~~~ ^
const.c:5:14: note: variable 'character' declared const here
  const char character = 'A';
  ~~~~~~~~~~~^~~~~~~~~~~~~~~
const.c:12:10: error: cannot assign to variable 'number' with const-qualified type
      'const int'
  number = 2;
  ~~~~~~ ^
const.c:6:13: note: variable 'number' declared const here
  const int number = 1;
  ~~~~~~~~~~^~~~~~~~~~
2 errors generated.
make: *** [const.o] Error 1

html_tips

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>WebPage</title>
</head>
<body>

<p>Host Japan produced another stunning Rugby World Cup upset <strong>to beat Ireland 19-12</strong> in Shizuoka Saturday.</p>

<p>Host Japan produced another stunning Rugby World Cup upset <em>to beat Ireland 19-12</em> in Shizuoka Saturday.</p>

<p>Host Japan produced another stunning Rugby World Cup upset <ins>to beat Ireland 19-12</ins> in Shizuoka Saturday.</p>

<p>Host Japan produced another stunning Rugby World Cup upset <sup>to beat Ireland 19-12</sup> in Shizuoka Saturday.</p> 

<p>Host Japan produced another stunning Rugby World Cup upset <del>to beat Ireland 19-12</del> in Shizuoka Saturday.</p>

</body>
</html>

For further information: https://www.w3schools.com/html/html_formatting.asp

Unordered List

<ul>出荷可能な野菜の一覧
    <li><strong>キャベツ</strong></li>
    <li><em>にんじん</em></li>
    <li><ins>玉ねぎ</ins></li>
    <li><del>レタス</del></li>
</ul>

Ordered List

<ol>出荷可能な野菜の一覧
    <li><strong>キャベツ</strong></li>
    <li><em>にんじん</em></li>
    <li><ins>玉ねぎ</ins></li>
    <li><del>レタス</del></li>
</ol>
<ol start="10">出荷可能な野菜の一覧
    <li><strong>キャベツ</strong></li>
    <li><em>にんじん</em></li>
    <li><ins>玉ねぎ</ins></li>
    <li><del>レタス</del></li>
</ol>
<ol type="A">出荷可能な野菜の一覧
    <li><strong>キャベツ</strong></li>
    <li><em>にんじん</em></li>
    <li><ins>玉ねぎ</ins></li>
    <li><del>レタス</del></li>
</ol>

C

C言語の移植性は、Cランタイムやlibcによって担保されている

ビルド(build)のプロセス

[ ソースコード ] → プリプロセス → コンパイルアセンブル → リンク → [ 実行ファイル ]

[ 対象] ver_check.c

#include <stdio.h>

int main(int argc, char const *argv[])
{
  printf("%ld\n", __STDC_VERSION__);
  return 0;
}

1) プリプロセッサーによるプリプロセス(コンパイルする前の前処理)

[ #include命令により指定したファイルの内容をソースコードの中に差し込むことで、#include<stdio.h>が無くなり、代わりにstdio.hというファイルの内容に差し替えられた ]

$ gcc -E ver_check.c > ver_check.txt

ver_check.txt

# 1 "ver_check.c"
# 1 "<built-in>" 1
# 1 "<built-in>" 3
# 362 "<built-in>" 3
# 1 "<command line>" 1
# 1 "<built-in>" 2
# 1 "ver_check.c" 2
.....
.....
.....
# 412 "/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/stdio.h" 2 3 4
# 2 "ver_check.c" 2

int main(int argc, char const *argv[])
{
  printf("%ld\n", 201112L);
  return 0;
}

2) コンパイル(前処理されたソースをアセンブリ言語に変換)

$ gcc -S ver_check.c

ver_check.s

 .section    __TEXT,__text,regular,pure_instructions
    .build_version macos, 10, 14    sdk_version 10, 14
    .globl  _main                   ## -- Begin function main
    .p2align    4, 0x90
_main:                                  ## @main
    .cfi_startproc
## %bb.0:
    pushq   %rbp
    .cfi_def_cfa_offset 16
    .cfi_offset %rbp, -16
    movq    %rsp, %rbp
    .cfi_def_cfa_register %rbp
    subq    $32, %rsp
    movl    $0, -4(%rbp)
    movl    %edi, -8(%rbp)
    movq    %rsi, -16(%rbp)
    leaq    L_.str(%rip), %rdi
    movl    $201112, %esi           ## imm = 0x31198
    movb    $0, %al
    callq   _printf
    xorl    %ecx, %ecx
    movl    %eax, -20(%rbp)         ## 4-byte Spill
    movl    %ecx, %eax
    addq    $32, %rsp
    popq    %rbp
    retq
    .cfi_endproc
                                        ## -- End function
    .section    __TEXT,__cstring,cstring_literals
L_.str:                                 ## @.str
    .asciz  "%ld\n"


.subsections_via_symbols

3) アセンブルアセンブリ言語のソースを機械語のプログラムに変換)

-cオプションをつけて、機械語(ver_check.oのオブジェクトファイル)が生成する。この段階では、実行ファイルとして実行するための情報やC言語で書いたプログラムを動かすための情報は具備していない(Cランタイム、libcなど)

$ gcc -c ver_check.s

4) リンク(C言語で書いたプログラムを動かすためのCランタイム、libcなどの必要なライブラリをリンクして実行ファイルを生成)

$ ls -l ver_check.o
-rwxr-xr-x  1 xxxxx  staff  784  9 24 07:22 ver_check.o
$ find /Library/Developer/CommandLineTools -name "crt1*"
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib/crt1.o
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib/crt1.10.5.o
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib/crt1.10.6.o

$ ld ver_check.o /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib/crt1.o -lSystem
$ ld ver_check.o /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib/crt1.10.5.o -lSystem
$ ld ver_check.o /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib/crt1.10.6.o -lSystem

$ ls -l a.out
-rwxr-xr-x  1 xxxxx  staff  8696  9 24 08:14 a.out
$ ./a.out 
201112
$ ld -e _main ver_check.o -lSystem
$ ./a.out
201112