Skip to content

Commit 0dd32fc

Browse files
authored
Merge pull request #383 from kzys/upgrade-fc
Upgrade Firecracker to post-v0.20.0
2 parents 017fe90 + 3b8d202 commit 0dd32fc

File tree

8 files changed

+29
-44
lines changed

8 files changed

+29
-44
lines changed

.buildkite/al2env.sh

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,3 @@ bin_path=$dir/bin
77
devmapper_path=$dir/devmapper
88
state_path=$dir/state
99
runtime_config_path=$dir/firecracker-runtime.json
10-
firecracker_bin=firecracker-v0.19.0

.buildkite/setup_al2.sh

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,10 @@ mkdir -p $state_path
1515
export INSTALLROOT=$dir
1616
export FIRECRACKER_CONTAINERD_RUNTIME_DIR=$dir
1717
make
18-
sudo -E INSTALLROOT=$INSTALLROOT PATH=$PATH make install
1918
cp /var/lib/fc-ci/vmlinux.bin $dir/default-vmlinux.bin
20-
make image
21-
sudo -E PATH=$PATH make install-default-rootfs
19+
make image firecracker
20+
sudo -E INSTALLROOT=$INSTALLROOT PATH=$PATH \
21+
make install install-firecracker install-default-rootfs
2222

2323
cat << EOF > $dir/config.toml
2424
disabled_plugins = ["cri"]
@@ -39,7 +39,7 @@ cat << EOF > $runtime_config_path
3939
{
4040
"cpu_template": "T2",
4141
"debug": true,
42-
"firecracker_binary_path": "/usr/local/bin/$firecracker_bin",
42+
"firecracker_binary_path": "$bin_path/firecracker",
4343
"shim_base_dir": "$dir",
4444
"kernel_image_path": "$dir/default-vmlinux.bin",
4545
"kernel_args": "ro console=ttyS0 noapic reboot=k panic=1 pci=off nomodules systemd.journald.forward_to_console systemd.log_color=false systemd.unit=firecracker.target init=/sbin/overlay-init",

Makefile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,8 @@ export GO_CACHE_VOLUME_NAME?=gocache
3434

3535
FIRECRACKER_DIR=$(SUBMODULES)/firecracker
3636
FIRECRACKER_TARGET?=x86_64-unknown-linux-musl
37-
FIRECRACKER_BIN=$(FIRECRACKER_DIR)/target/$(FIRECRACKER_TARGET)/release/firecracker
38-
JAILER_BIN=$(FIRECRACKER_DIR)/target/$(FIRECRACKER_TARGET)/release/jailer
37+
FIRECRACKER_BIN=$(FIRECRACKER_DIR)/build/cargo_target/$(FIRECRACKER_TARGET)/release/firecracker
38+
JAILER_BIN=$(FIRECRACKER_DIR)/build/cargo_target/$(FIRECRACKER_TARGET)/release/jailer
3939
FIRECRACKER_BUILDER_NAME?=firecracker-builder
4040
CARGO_CACHE_VOLUME_NAME?=cargocache
4141

_submodules/firecracker

Submodule firecracker updated 270 files

internal/vm/vsock.go

Lines changed: 15 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,11 @@
1414
package vm
1515

1616
import (
17+
"bufio"
1718
"context"
1819
"fmt"
1920
"net"
21+
"strings"
2022
"time"
2123

2224
"github.com/mdlayher/vsock"
@@ -184,14 +186,6 @@ func vsockConnectMsg(port uint32) string {
184186
return fmt.Sprintf("CONNECT %d\n", port)
185187
}
186188

187-
func vsockAckMsg(port uint32) string {
188-
// The message a guest-side connection will write after accepting a connection from
189-
// a host dial. This is not part of the official Firecracker vsock spec, but is
190-
// recommended in order to allow the host to verify connections were established
191-
// successfully: https://github.com/firecracker-microvm/firecracker/issues/1272#issuecomment-533004066
192-
return fmt.Sprintf("IMALIVE %d\n", port)
193-
}
194-
195189
// tryConnect attempts to dial a guest vsock listener at the provided host-side
196190
// unix socket and provided guest-listener port.
197191
func tryConnect(logger *logrus.Entry, udsPath string, port uint32) (net.Conn, error) {
@@ -215,10 +209,18 @@ func tryConnect(logger *logrus.Entry, udsPath string, port uint32) (net.Conn, er
215209
return nil, vsockConnectMsgError{cause: err}
216210
}
217211

218-
err = tryConnRead(conn, vsockAckMsg(port), vsockAckMsgTimeout)
212+
line, err := tryConnReadUntil(conn, '\n', vsockAckMsgTimeout)
219213
if err != nil {
220214
return nil, vsockAckError{cause: err}
221215
}
216+
217+
// The line would be "OK <assigned_hostside_port>\n", but we don't use the hostside port here.
218+
// https://github.com/firecracker-microvm/firecracker/blob/master/docs/vsock.md#host-initiated-connections
219+
if !strings.HasPrefix(line, "OK ") {
220+
return nil, vsockAckError{
221+
cause: errors.Errorf(`expected to read "OK <port>", but instead read %q`, line),
222+
}
223+
}
222224
return conn, nil
223225
}
224226

@@ -240,35 +242,19 @@ func tryAccept(logger *logrus.Entry, listener net.Listener, port uint32) (net.Co
240242
}
241243
}()
242244

243-
err = tryConnWrite(conn, vsockAckMsg(port), vsockAckMsgTimeout)
244-
if err != nil {
245-
return nil, vsockAckError{cause: err}
246-
}
247-
248245
return conn, nil
249246
}
250247

251-
// tryConnRead will try to do a read from the provided conn, returning an error if
252-
// the bytes read does not match what was provided or if the read does not complete
248+
// tryConnReadUntil will try to do a read from the provided conn until the specified
249+
// end character is encounteed. Returning an error if the read does not complete
253250
// within the provided timeout. It will reset socket deadlines to none after returning.
254251
// It's only intended to be used for connect/ack messages, not general purpose reads
255252
// after the vsock connection is established fully.
256-
func tryConnRead(conn net.Conn, expectedRead string, timeout time.Duration) error {
253+
func tryConnReadUntil(conn net.Conn, end byte, timeout time.Duration) (string, error) {
257254
conn.SetDeadline(time.Now().Add(timeout))
258255
defer conn.SetDeadline(time.Time{})
259256

260-
actualRead := make([]byte, len(expectedRead))
261-
_, err := conn.Read(actualRead)
262-
if err != nil {
263-
return err
264-
}
265-
266-
if expectedRead != string(actualRead) {
267-
return errors.Errorf("expected to read %q, but instead read %q",
268-
expectedRead, string(actualRead))
269-
}
270-
271-
return nil
257+
return bufio.NewReaderSize(conn, 32).ReadString(end)
272258
}
273259

274260
// tryConnWrite will try to do a write to the provided conn, returning an error if

runtime/service_integ_test.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -734,11 +734,11 @@ func TestStubBlockDevices_Isolated(t *testing.T) {
734734
}
735735

736736
const expectedOutput = `
737-
vdb 254:16 0 0B 0 |
738-
vdc 254:32 0 512B 0 | 214 244 216 245 215 177 177 177
739-
vdd 254:48 0 512B 0 | 214 244 216 245 215 177 177 177
740-
vde 254:64 0 512B 0 | 214 244 216 245 215 177 177 177
741-
vdf 254:80 0 512B 0 | 214 244 216 245 215 177 177 177`
737+
vdb 254:16 0 1073741824B 0 | 0 0 0 0 0 0 0 0
738+
vdc 254:32 0 512B 0 | 214 244 216 245 215 177 177 177
739+
vdd 254:48 0 512B 0 | 214 244 216 245 215 177 177 177
740+
vde 254:64 0 512B 0 | 214 244 216 245 215 177 177 177
741+
vdf 254:80 0 512B 0 | 214 244 216 245 215 177 177 177`
742742

743743
parts := strings.Split(stdout.String(), "vdb")
744744
require.Equal(t, strings.TrimSpace(expectedOutput), strings.TrimSpace("vdb"+parts[1]))

tools/docker/Dockerfile.firecracker-builder

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
# express or implied. See the License for the specific language governing
1212
# permissions and limitations under the License.
1313

14-
FROM rust:1.35-stretch
14+
FROM rust:1.39-stretch
1515

1616
ENV DEBIAN_FRONTEND="noninteractive"
1717
RUN apt-get update && apt-get install --yes --no-install-recommends \

tools/docker/scripts/lsblk.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ do
2222
# https://github.com/firecracker-microvm/firecracker-containerd/blob/2578f3df9d899aa48decb39c9f7f23fa41635ede/internal/common.go#L67
2323
magic=$(head -c 8 /dev/$name | od -A n -t u1)
2424

25-
printf "%-4s %-7s %2d %8dB %2d | %s\n" \
25+
printf "%-4s %-7s %2d %10dB %2d | %s\n" \
2626
"$name" \
2727
$(cat /sys/block/$name/dev) \
2828
$(cat /sys/block/$name/removable) \

0 commit comments

Comments
 (0)