tweeeetyのぶろぐ的めも

アウトプットが少なかったダメな自分をアウトプット<br>\(^o^)/

【VirtualBox】CentOS@VirtualBoxでホストOSとゲストOSでsshするときのネットワーク設定メモ - NAT、ホストオンリーアダプターを設定してeth0、eth1を有効にする

はじめに

VirtualBoxを久しぶりに使ったら全然覚えてない...
特にネットワークまわり。

やりたいことは単純でおおざっぱに言うと以下2点だけ

  • 前提
  • 1.ホストOSからゲストOSにターミナルでsshしたい
    • 外からゲストOSにはアクセスできなくて良い
  • 2.ゲストOSからホストOSを経由して外のネットワークにつなぎたい
    • ゲストOSからgit pullやらpushできればok

そんな時の自分メモ

f:id:tweeeety:20180622000833p:plain

アジェンダ

  1. 今回の環境
  2. やりたいこと
  3. 何をすれば良いか
  4. どうやるか
  5. ネットワークを確認してみる

1. 今回の環境

ホストOS情報

$ sw_vers
ProductName:    Mac OS X
ProductVersion: 10.13.5
BuildVersion:   17F77
$ VBoxManage -v
5.2.12r122591

ゲストOS情報

$ cat /etc/redhat-release
CentOS release 6.5 (Final)

2. やりたいこと

はじめにに記載したことがやりたい事ですが再掲です。

  • 前提
  • 1.ホストOSからゲストOSにターミナルでsshしたい
    • 外からゲストOSにはアクセスできなくて良い
  • 2.ゲストOSからホストOSを経由して外のネットワークにつなぎたい
    • ゲストOSからgit pullやらpushできればok

3. 何をすれば良いか

2. やりたいことを実現するために
VirtualBox何をすれば良いかを文章的にまとめるとこんな感じです。

  1. ホストOSからゲストOSにターミナルでsshしたい
    • ホストオンリーアダプタを設定する
  2. ゲストOSからホストOSを経由して外のネットワークにつなぎたい
    • NAT(DHCP)の設定をする

また、これを図にするとこんなイメージになります。
f:id:tweeeety:20180622001154p:plain

4. どうやるか

何をすれば良いか を実現するために具体的にやることは以下の4stepです。

VirtualBoxマネージャはこのGUIツールです

f:id:tweeeety:20180622002208p:plain

①. VirtualBoxマネージャでネットワークアダプタを作成&設定する

  • グローバルツール(G)を開きます。

f:id:tweeeety:20180622002227p:plain

  • 作成(C)を押します。
    vboxnet0というアダプタが作成されます。

f:id:tweeeety:20180622002239p:plain

  • vboxnet0を選択した状態でアダプタータブを開き
    アダプターを手動で設定にチェックが入っている事を確認します。

f:id:tweeeety:20180622002416p:plain

  • DHCPサーバタブを開きサーバを有効化にチェックします。
    設定値はそのままで大丈夫です。

f:id:tweeeety:20180622002505p:plain

②. VirtualBoxマネージャで仮想マシンのネットワーク設定をする

f:id:tweeeety:20180622002524p:plain

  • ネットワークを開いてアダプター1にNATが設定されている事を確認します。

f:id:tweeeety:20180622002539p:plain

  • アダプター2を選択してネットワークアダプターを有効化にチェックをします。

f:id:tweeeety:20180622002551p:plain

  • 割り当て:ホストオンンリーアダプターを選択して
    名前にさきほど作成したvboxnet0を選びます。
    (デフォルトvboxnet0になってる)

f:id:tweeeety:20180622002551p:plain

また、高度を押すと設定がさらに開くのでMACアドレスをメモっておきます。

f:id:tweeeety:20180622002655p:plain

今回の例でいうとMACアドレスは以下です

080027588378

最後にOKを押して設定を保存します。

③. ゲストOSでネットワークの設定をする

仮想マシンを起動するか、すでに起動していた場合は再起動します。

起動したら仮想マシンのターミナルで設定を行います。

rulesをcleanにする

MACアドレスeth*の対応づけを行なっているrulesの設定を綺麗にしておきます。
reboot後にeth0、eth1を元に自動で作成されるので大丈夫です。

$ rm /etc/udev/rules.d/70-persistent-net.rules

この辺のファイルが何かは以下をご参考ください

ifcfg-eth*を設定

vim/etc/sysconfig/network-scripts/ifcfg-eth0を設定します。
ファイルを開くともともと書かれてる場合がありますが、
他の行はコメントアウトしました。

DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=dhcp
PEERDNS=no

vim/etc/sysconfig/network-scripts/ifcfg-eth1を設定します。
ファイルがない場合は作成します。

DEVICE=eth1
HWADDR=08:00:27:58:83:78
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=none
PEERDNS=no
IPADDR=192.168.56.3
NETMASK=255.255.255.0

BOOTPROTOについては気になったので簡単に調べてみました。

再起動する
$ reboot
確認する

以下を確認します。

  • /etc/udev/rules.d/70-persistent-net.rulesが作成されている
  • ifconfigでeth0eth1が設定されている

このように表示されれば設定がされているはずです。

# 確認
# rulesが新しくできている
$ cat /etc/udev/rules.d/70-persistent-net.rules
# This file was automatically generated by the /lib/udev/write_net_rules
# program, run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single
# line, and change only the value of the NAME= key.

# PCI device 0x8086:0x100e (e1000)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="08:00:27:82:03:24", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

# PCI device 0x8086:0x100e (e1000) (custom name provided by external tool)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="08:00:27:58:83:78", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"

# ネットワークインターフェースの確認
$ ifconfig
eth0      Link encap:Ethernet  HWaddr 08:00:27:82:03:24
          inet addr:10.0.2.15  Bcast:10.0.2.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fe82:324/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:6 errors:0 dropped:0 overruns:0 frame:0
          TX packets:24 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:1470 (1.4 KiB)  TX bytes:2262 (2.2 KiB)

eth1      Link encap:Ethernet  HWaddr 08:00:27:58:83:78
          inet addr:192.168.56.3  Bcast:192.168.56.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fe58:8378/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:505 errors:0 dropped:0 overruns:0 frame:0
          TX packets:318 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:48536 (47.3 KiB)  TX bytes:73614 (71.8 KiB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
疎通確認をする

次に、pingで外向けに通信してNAT(ゲストOS->ホストOSの通信)を確かめます。
packet lossがなければ成功です。

# Google Public DNS(8.8.8.8)に疎通確認
$ ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=63 time=4.17 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=63 time=5.32 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=63 time=5.54 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=63 time=4.29 ms
^C
--- 8.8.8.8 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3155ms
rtt min/avg/max/mdev = 4.179/4.837/5.548/0.611 ms

# googleに疎通確認
$ ping google.com
PING google.com (172.217.24.142) 56(84) bytes of data.
64 bytes from nrt20s01-in-f14.1e100.net (172.217.24.142): icmp_seq=1 ttl=63 time=2.25 ms
64 bytes from nrt20s01-in-f14.1e100.net (172.217.24.142): icmp_seq=2 ttl=63 time=2.35 ms
64 bytes from nrt20s01-in-f14.1e100.net (172.217.24.142): icmp_seq=3 ttl=63 time=3.61 ms
64 bytes from nrt20s01-in-f14.1e100.net (172.217.24.142): icmp_seq=4 ttl=63 time=2.55 ms
^C
--- google.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3895ms
rtt min/avg/max/mdev = 2.259/2.695/3.612/0.540 ms

④. ホストOSからSSHしてみる

ここまでくればmacsshしてみます。
sshできればホストオンリーアダプタ(ホストOS->ゲストOSの通信)が成功です。

$ ssh root@192.168.65.3
root@192.168.56.3's password:
Last login: Thu Jun 21 22:30:49 2018 from 192.168.56.1

5. ネットワークを確認してみる

念のためもう少しネットワークを確認してみます。

ゲストOS

ゲストOS側でroute、netstat、tracerouteでネットワーク設定を確認します。
外に出れていれば以下のようになります。

route

routeコマンドでルーティングテーブルを確認します

$ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.0.2.0        *               255.255.255.0   U     0      0        0 eth0
192.168.56.0    *               255.255.255.0   U     0      0        0 eth1
link-local      *               255.255.0.0     U     1002   0        0 eth0
link-local      *               255.255.0.0     U     1003   0        0 eth1
default         10.0.2.2        0.0.0.0         UG    0      0        0 eth0
$ route 
netstat

netstatでネットワークインターフェース(NIC)の状態を確認します

# netstat
$ netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
10.0.2.0        0.0.0.0         255.255.255.0   U         0 0          0 eth0
192.168.56.0    0.0.0.0         255.255.255.0   U         0 0          0 eth1
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 eth1
0.0.0.0         10.0.2.2        0.0.0.0         UG        0 0          0 eth0
traceroute

tracerouteでネットワークの経路を確認してみます。

# traceroute
$ traceroute -T -q 1 -w 1 google.com
traceroute to google.com (172.217.24.142), 30 hops max, 60 byte packets
 1  10.0.2.2 (10.0.2.2)  0.127 ms
 2  syd09s06-in-f14.1e100.net (172.217.24.142)  24.941 ms

今回利用しているオプションは以下の通りです

  • -T: TCP SYNパケットを用いる。デフォルトのポート番号は80
  • -q: 1つのホップにおける試行回数を指定する
  • -w: タイムアウト時間を指定する。単位は秒

ホストOSでifconfig

また、ホストOS側でifconfigを行うと、
仮想NICvboxnet0に付与されたIPアドレスを確認できます。

$ ifconfig | grep vboxnet0 -A 3 -B 3
    nd6 options=201<PERFORMNUD,DAD>
    media: autoselect
    status: active
vboxnet0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
    ether 0a:00:27:00:00:00
    inet 192.168.56.1 netmask 0xffffff00 broadcast 192.168.56.255

補足

10.0.2.2はどこで設定されてるか気になり別途調べてみました。

参考

おわり

\(^o^)/

【centos】CentOS@VirtualBoxで行うネットワーク設定のファイルについて

はじめに

VirtualBoxCentOS入れて使う場合、
たいてい最初に行うのがネットワークの設定ですよね。

いつもどのファイルだっけ?となるのでそんな自分のためのメモ

ネットワークに関する設定ファイル

以下のファイルがよく見るファイルです

  • /etc/sysconfig/network
  • /etc/sysconfig/network-scripts/ifcfg-eth0
  • /etc/hosts
  • /etc/resolv.conf

/etc/sysconfig/network

これはなに?

ネットワーク通信に必要とされる基本的な情報が記述されているファイル。

DHCPの設定例

NETWORKING=yes
HOSTNAME=hoge.local

参考

/etc/sysconfig/network-scripts/ifcfg-eth0

これはなに?

インターフェース設定ファイル。
システムの1番目のイーサネットのネットワークインターフェースカード または、NICを制御する。

NAT/DHCPとしてeth0を設定するときの例

DEVICE=eth0 
BOOTPROTO=dhcp 
ONBOOT=yes

ホストオンリーアダプタとしてeth1を設定するときの例

DEVICE=eth1
HWADDR=00:00:00:00:00:00
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=none
IPADDR=192.168.56.3
NETMASK=255.255.255.0

参考

/etc/hosts

これはなに?

IPアドレスとマシン名(ホスト名)を関連付ける設定ファイル

127.0.0.1 localhost.localdomain localhost
192.168.1.10 test1
192.168.1.20 test2

参考

/etc/resolve.conf

これはなに?

自分のマシンが利用するDNSサーバの情報(IPアドレス)を記述するファイル

search linux-beginner.com
nameserver 192.168.0.1
nameserver 192.168.0.2

参考

その他の参考

以下のサイトが全体的に説明してくれていてわかりやすかったです。

おわり

/etc/sysconfig/network-scripts/ifcfg-eth0の場所がほんとよくどこだっけなーとなる
\(^o^)/

【VirtualBox】CentOS@VirtualBoxのNAT設定での10.0.2.2

はじめに

CentOS@VirtualBoxでのネットワーク設定での話。

設定後にNATまわりを確認すると10.0.2.2が出てきます。

設定する過程で見かけた記憶がなかったのでどこで設定されているのか気になり調べてみたメモです。

f:id:tweeeety:20180622000002p:plain

結論

VirtualBoxの仕様らしい

VirtualBoxのNATネットワークアダプタに10.0.2.0/24が割り当てられ
ゲストOSから見えるホストOSのIPアドレスには10.0.2.2が設定される仕様  
ゲストOSから10.0.2.2に対してpingすると
ホストOSから応答がありますが、
ホストOSには10.0.2.0/24系のネットワークインタフェースが存在しないため、ゲストOSは見えません。  
* garbagetown - VirtualBox (3)

おわり

仕様ならまぁ、、、という感じで
物理的なファイルとしてどこで設定されてるかまでは諦めましたw
\(^o^)/

【linux】CentOSの/etc/sysconfig/network-scripts/ifcfg-eth0について - BOOTPROTOとか

はじめに

CentOSNIC周りの設定を触っていると
/etc/sysconfig/network-scripts/ifcfg-eth0
というファイルを見る or 設定することがあります。

その時に出てくるBOOTPROTOが気になったのでそのあたりの自分用メモ

f:id:tweeeety:20180621173752j:plain

/etc/sysconfig/network-scripts/ifcfg-eth0 とは

参考サイトからの引用です

最も一般的なインターフェースファイルの1つです。
これは、システムの一番目のイーサネット
ネットワークインターフェースカード または NIC を制御します。
 
* 参考: 9.2. インターフェース設定ファイル

BOOTPROTOとは

こちらも参考サイトから引用します。
他の項目についても説明がわかりやすいです。

DHCPの様に、IPアドレスを外部から設定情報を取得する場合のプロトコルを指定。
 
* 参考: Linux ネットワーク基本設定 其の三

設定できるの値は以下です。

説明
none インタフェース起動時にプロトコルを使用しない。( IPアドレスが固定などの場合に使用する )
staticと指定してもOK。
dhcp DHCP(Dynamic Host Configuration Protocol)を利用する場合に指定。
bootp BOOTP(BOOTstrap Protocol)を利用する場合に指定。

設定しないとどうなる?(コメントすると?)

設定値としてはbootpdhcpしかないようなので
noneでも設定しないでも好きな文字でも良いようですが、
慣習的にnoneと明示するようです。

# cat /etc/sysconfig/network-scripts/ifup | grep BOOTPROTO -A3 -B3 -n
141-
142-# Old BOOTP variable
143-if [ "${BOOTP}" = "yes" ]; then
144:    BOOTPROTO=bootp
145-fi
146-
147:if [ "${BOOTPROTO}" = "bootp" -o "${BOOTPROTO}" = "dhcp" ]; then
148-    DYNCONFIG=true
149-fi
150-

おわり

ネットワークまわりは何度やってもむずい\(^o^)/

【Mac】treeコマンドで文字化けするときのメモ

はじめに

日本語を含むdir/fileをtreeすると文字化けするときの自分用メモ

$ tree .
.
├── a
│   ├── a�\201��\201��\201\214�\203\225�\202��\202��\203�.txt
│   ├── a�\201��\201��\201\222�\203\225�\202��\202��\203�.txt
│   └── b�\201��\201��\201\214�\203\225�\202��\202��\203�.txt
├── b
└── c

tree -N

tree -N で文字化けせずに表示できます

$ tree -N .
.
├── a
│   ├── aのふがファイル.txt
│   ├── aのほげファイル.txt
│   └── bのふがファイル.txt
├── b
└── c

helpから抜粋

$ tree --help | grep "\-N"
  -N            Print non-printable characters as is.

参考

おわり

自分のサイト内を文字化けで検索したら出てきてくれさえすれば良いメモ
\(^o^)/

【gulp】gulp@4.0.0にしたら`The following tasks did not complete:`、`Did you forget to signal async completion?`と怒られる

はじめに

とあることで、gulpを3.x.x.から^4.0.0にあげる必要がありました。
f:id:tweeeety:20180618044056p:plain

あげてからgulpタスクを実行すると
以下のようなエラーが出たのでその対応方法をメモ

# defaultタスクを実行するとこんなエラーが...
$ ./node_modules/gulp/bin/gulp.js
[05:35:32] Using gulpfile ~/gulp-task-gulp4.0.0-sample2/gulpfile.js
[05:35:32] Starting 'default'...
[05:35:32] Starting 'hoge'...
i am hoge!!
[05:35:32] The following tasks did not complete: default, hoge
[05:35:32] Did you forget to signal async completion?

なぜ起こったか

The following tasks did not complete  
上記の実行時のログより

処理が終わってないよと言われてます。

4.x.xではgulpタスクで以下のことを行う必要があります

  • 明示的にtaskを終了する
    • callbackを呼び出す
    • streamを返却する
    • 単にreturnをつける

どうすればいいか

すでに書いてしまってますが、
明示的にtaskを終了をする必要があります。

gulp.task@3.x.x -> gulp.task@^4.x.x
に書き換える変える一例をあげます。

gulp.task@3.x.x

gulp.task('sass', function(){
  gulp.src('./sass/*.scss')
    .pipe(sass({outputStyle: 'expanded'}))
    .pipe(gulp.dest('./css/'));
});

gulp.task@^4.x.x

gulp.task('sass', function(){
  // streamをreturnする
  return gulp.src('./sass/*.scss')
    .pipe(sass({outputStyle: 'expanded'}))
    .pipe(gulp.dest('./css/'));
});

3.9.1^4.x.xを実際に動かして見比べてみる

そのまま試せる形でgithubに載せてみました。

https://github.com/tweeeety/gulp-task-gulp4.0.0-sample2

  • gulp@3.x.xの書き方
  • gulp@^4.x.xの書き方

をそれぞれ記載しています。

こちらも

こちらも合わせてご覧ください

参考

おわり

gulpを3.x.x->4.x.xからあげる場合は
書き直しになる場合が多いかもしれないので要注意
\(^o^)/

【gulp】gulp@4.0.0にしたら`AssertionError [ERR_ASSERTION]: Task function must be specified`と怒られる

はじめに

とあることで、gulpを3.x.x.から^4.0.0にあげる必要がありました。
f:id:tweeeety:20180618044056p:plain

あげてからgulpタスクを実行すると
以下のようなエラーが出たのでその対応方法をメモ

# defaultタスクを実行するとこんなエラーが...
$ ./node_modules/gulp/bin/gulp.js
assert.js:42
  throw new errors.AssertionError({
  ^

AssertionError [ERR_ASSERTION]: Task function must be specified
    at Gulp.set [as _setTask] (/Users/tweeeety/gulp-task-gulp4.0.0-sample1/node_modules/undertaker/lib/set-task.js:10:3)
    at Gulp.task (/Users/tweeeety/gulp-task-gulp4.0.0-sample1/node_modules/undertaker/lib/task.js:13:8)
    at Object.<anonymous> (/Users/tweeeety/gulp-task-gulp4.0.0-sample1/gulpfile.js:5:6)
    at Module._compile (module.js:652:30)
    at Object.Module._extensions..js (module.js:663:10)
    at Module.load (module.js:565:32)
    at tryModuleLoad (module.js:505:12)
    at Function.Module._load (module.js:497:3)
    at Module.require (module.js:596:17)
    at require (internal/module.js:11:18)

なぜ起こったか

removed 3 argument syntax for gulp.task  
gulp changelog

github/gulpのchangelogから抜粋ですが、
3.x.xのときのgulp.taskは引数が3つでしたが、
^4.0.0ではgulp.taskの引数が2つになりました。

これによるエラーのようです。

どうすればいいか

gulp.task@3.x.x -> gulp.task@^4.x.x
に書き換える変える一例をあげます。

gulp.task@3.x.x

gulp.task('hoge', 'fuga', function() {
  console.log('callbackの関数');
});

gulp.task@^4.x.x

// 引数は2つに
gulp.task('hoge', gulp.series('fuga', function(callback) {
  console.log('callbackの関数');
  // callback or streamを返さなければならない
  callback();
}));

補足

例はgulp.seriesで書きましたが

直列にしたいか、並列にしたいかで

  • gulp.series
    • 直列にしたいタスクを定義
  • gulp.parallel
    • 並列にしたいタスクを定義

を適宜読み替えてください。

参考サイトを載せておきます。

3.9.1^4.x.xを実際に動かして見比べてみる

そのまま試せる形でgithubに載せてみました。

https://github.com/tweeeety/gulp-task-gulp4.0.0-sample1

  • gulp@3.x.xの書き方
  • gulp@^4.x.xの書き方

をそれぞれ記載しています。

補足

上記のコード例を実行すると
微妙にtaskの呼び出しに変化があります。

Starting 'default'Starting 'task2'あたりの順番が違います。

今回の例でいうと
両者は実質タスク名なだけで中身は何もしてないので影響はないですが
念のため注意が必要そうです。

3.9.1の例
$ ./node_modules/gulp/bin/gulp.js
[00:26:33] Using gulpfile ~/gitrepos/hatena/gulp-task-gulp4.0.0-sample1/gulpfile.js
[00:26:33] Starting 'task1'...
i am task1!!
[00:26:33] Finished 'task1' after 138 μs
[00:26:33] Starting 'task2-1'...
i am task2-1!!
[00:26:33] Finished 'task2-1' after 65 μs
[00:26:33] Starting 'task2-2'...
i am task2-2!!
[00:26:33] Finished 'task2-2' after 82 μs
[00:26:33] Starting 'task2'...
i am task2!!
[00:26:33] Finished 'task2' after 77 μs
[00:26:33] Starting 'task3'...
i am task3!!
[00:26:33] Finished 'task3' after 75 μs
[00:26:33] Starting 'default'...
[00:26:33] Finished 'default' after 19 μs
[~/gitrepos/hatena/gulp-task-gulp4.0.0-sample1 00:26:3
^4.x.xの例
$ ./node_modules/gulp/bin/gulp.js
[00:31:37] Using gulpfile ~/gitrepos/hatena/gulp-task-gulp4.0.0-sample1/gulpfile.js
[00:31:37] Starting 'default'...
[00:31:37] Starting 'task1'...
i am task1!!
[00:31:37] Finished 'task1' after 878 μs
[00:31:37] Starting 'task2'...
[00:31:37] Starting 'task2-1'...
[00:31:37] Starting '<anonymous>'...
i am task2-1!!
[00:31:37] Finished '<anonymous>' after 247 μs
[00:31:37] Finished 'task2-1' after 481 μs
[00:31:37] Starting 'task2-2'...
i am task2-2!!
[00:31:37] Finished 'task2-2' after 240 μs
[00:31:37] Starting '<anonymous>'...
i am task2!!
[00:31:37] Finished '<anonymous>' after 219 μs
[00:31:37] Finished 'task2' after 1.4 ms
[00:31:37] Starting 'task3'...
i am task3!!
[00:31:37] Finished 'task3' after 174 μs
[00:31:37] Finished 'default' after 5.27 ms

こちらも

こちらも合わせてご覧ください

おわり

gulpを3.x.x->4.x.xからあげる場合は
書き直しになる場合が多いかもしれないので要注意
\(^o^)/