From 01ce312c2d3e56a7993f7d644675513e1acca17c Mon Sep 17 00:00:00 2001 From: David Calavera Date: Fri, 26 Jul 2013 17:40:45 -0700 Subject: [PATCH 001/215] Exit from `docker login` on SIGTERM and SIGINT. Fixes #1299. --- commands.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/commands.go b/commands.go index 0fabaa385f..1fb56e98a6 100644 --- a/commands.go +++ b/commands.go @@ -319,6 +319,14 @@ func (cli *DockerCli) CmdLogin(args ...string) error { authconfig = auth.AuthConfig{} } + c := make(chan os.Signal, 1) + signal.Notify(c, syscall.SIGINT, syscall.SIGTERM) + go func() { + for sig := range c { + os.Exit(1) + } + }() + if *flUsername == "" { fmt.Fprintf(cli.out, "Username (%s): ", authconfig.Username) username = readAndEchoString(cli.in, cli.out) From 7cc90f2bc552f5b3b49e65e19ac877089e3db137 Mon Sep 17 00:00:00 2001 From: David Calavera Date: Fri, 26 Jul 2013 18:12:05 -0700 Subject: [PATCH 002/215] Use a more idiomatic syntax to capture the exit. --- commands.go | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/commands.go b/commands.go index 1fb56e98a6..d2764086ef 100644 --- a/commands.go +++ b/commands.go @@ -319,12 +319,11 @@ func (cli *DockerCli) CmdLogin(args ...string) error { authconfig = auth.AuthConfig{} } - c := make(chan os.Signal, 1) - signal.Notify(c, syscall.SIGINT, syscall.SIGTERM) + sigchan := make(chan os.Signal, 1) + signal.Notify(sigchan, syscall.SIGINT, syscall.SIGTERM) go func() { - for sig := range c { - os.Exit(1) - } + <-sigchan + os.Exit(1) }() if *flUsername == "" { From bb06fe8dd9b84a196eae19e4c955bb2e5a09dba2 Mon Sep 17 00:00:00 2001 From: David Calavera Date: Sat, 27 Jul 2013 09:13:02 -0700 Subject: [PATCH 003/215] Allow to generate signals when termios is in raw mode. --- commands.go | 7 ------- term/termios_darwin.go | 2 +- term/termios_linux.go | 2 +- 3 files changed, 2 insertions(+), 9 deletions(-) diff --git a/commands.go b/commands.go index d2764086ef..0fabaa385f 100644 --- a/commands.go +++ b/commands.go @@ -319,13 +319,6 @@ func (cli *DockerCli) CmdLogin(args ...string) error { authconfig = auth.AuthConfig{} } - sigchan := make(chan os.Signal, 1) - signal.Notify(sigchan, syscall.SIGINT, syscall.SIGTERM) - go func() { - <-sigchan - os.Exit(1) - }() - if *flUsername == "" { fmt.Fprintf(cli.out, "Username (%s): ", authconfig.Username) username = readAndEchoString(cli.in, cli.out) diff --git a/term/termios_darwin.go b/term/termios_darwin.go index 24e79de4b2..0f6b24b184 100644 --- a/term/termios_darwin.go +++ b/term/termios_darwin.go @@ -44,7 +44,7 @@ func MakeRaw(fd uintptr) (*State, error) { newState.Iflag &^= (ISTRIP | INLCR | IGNCR | IXON | IXOFF) newState.Iflag |= ICRNL newState.Oflag |= ONLCR - newState.Lflag &^= (ECHO | ICANON | ISIG) + newState.Lflag &^= (ECHO | ICANON) if _, _, err := syscall.Syscall(syscall.SYS_IOCTL, fd, uintptr(setTermios), uintptr(unsafe.Pointer(&newState))); err != 0 { return nil, err diff --git a/term/termios_linux.go b/term/termios_linux.go index 4a717c84a7..22f4fff430 100644 --- a/term/termios_linux.go +++ b/term/termios_linux.go @@ -33,7 +33,7 @@ func MakeRaw(fd uintptr) (*State, error) { newState.Iflag &^= (syscall.IGNBRK | syscall.BRKINT | syscall.PARMRK | syscall.ISTRIP | syscall.INLCR | syscall.IGNCR | syscall.ICRNL | syscall.IXON) newState.Oflag &^= syscall.OPOST - newState.Lflag &^= (syscall.ECHO | syscall.ECHONL | syscall.ICANON | syscall.ISIG | syscall.IEXTEN) + newState.Lflag &^= (syscall.ECHO | syscall.ECHONL | syscall.ICANON | syscall.IEXTEN) newState.Cflag &^= (syscall.CSIZE | syscall.PARENB) newState.Cflag |= syscall.CS8 From 75ac50a9a0669b464a95e069e66da5d47df9182f Mon Sep 17 00:00:00 2001 From: David Calavera Date: Sat, 3 Aug 2013 16:43:20 -0700 Subject: [PATCH 004/215] Stop making a raw terminal to ask for registry login credentials. It only disables echo asking for the password and lets the terminal to handle everything else. It fixes #1392 since blank spaces are not discarded as they did before. It also cleans the login code a little bit to improve readability. --- commands.go | 111 +++++++++++++++------------------------------------ term/term.go | 44 ++++++++++++++++---- 2 files changed, 68 insertions(+), 87 deletions(-) diff --git a/commands.go b/commands.go index a2099b9607..416076d3d5 100644 --- a/commands.go +++ b/commands.go @@ -2,6 +2,7 @@ package docker import ( "archive/tar" + "bufio" "bytes" "encoding/json" "flag" @@ -24,7 +25,6 @@ import ( "syscall" "text/tabwriter" "time" - "unicode" ) const VERSION = "0.5.0-dev" @@ -253,73 +253,18 @@ func (cli *DockerCli) CmdBuild(args ...string) error { // 'docker login': login / register a user to registry service. func (cli *DockerCli) CmdLogin(args ...string) error { - var readStringOnRawTerminal = func(stdin io.Reader, stdout io.Writer, echo bool) string { - char := make([]byte, 1) - buffer := make([]byte, 64) - var i = 0 - for i < len(buffer) { - n, err := stdin.Read(char) - if n > 0 { - if char[0] == '\r' || char[0] == '\n' { - stdout.Write([]byte{'\r', '\n'}) - break - } else if char[0] == 127 || char[0] == '\b' { - if i > 0 { - if echo { - stdout.Write([]byte{'\b', ' ', '\b'}) - } - i-- - } - } else if !unicode.IsSpace(rune(char[0])) && - !unicode.IsControl(rune(char[0])) { - if echo { - stdout.Write(char) - } - buffer[i] = char[0] - i++ - } - } - if err != nil { - if err != io.EOF { - fmt.Fprintf(stdout, "Read error: %v\r\n", err) - } - break - } - } - return string(buffer[:i]) - } - var readAndEchoString = func(stdin io.Reader, stdout io.Writer) string { - return readStringOnRawTerminal(stdin, stdout, true) - } - var readString = func(stdin io.Reader, stdout io.Writer) string { - return readStringOnRawTerminal(stdin, stdout, false) - } - cmd := Subcmd("login", "[OPTIONS]", "Register or Login to the docker registry server") - flUsername := cmd.String("u", "", "username") - flPassword := cmd.String("p", "", "password") - flEmail := cmd.String("e", "", "email") + + username := *cmd.String("u", "", "username") + password := *cmd.String("p", "", "password") + email := *cmd.String("e", "", "email") err := cmd.Parse(args) + if err != nil { return nil } - var oldState *term.State - if *flUsername == "" || *flPassword == "" || *flEmail == "" { - oldState, err = term.SetRawTerminal(cli.terminalFd) - if err != nil { - return err - } - defer term.RestoreTerminal(cli.terminalFd, oldState) - } - - var ( - username string - password string - email string - ) - - var promptDefault = func(prompt string, configDefault string) { + promptDefault := func(prompt string, configDefault string) { if configDefault == "" { fmt.Fprintf(cli.out, "%s: ", prompt) } else { @@ -327,47 +272,55 @@ func (cli *DockerCli) CmdLogin(args ...string) error { } } + readInput := func(in io.Reader) (string, error) { + reader := bufio.NewReader(in) + line, err := reader.ReadString('\n') + if err != nil { + return "", err + } + return line, nil + } + authconfig, ok := cli.configFile.Configs[auth.IndexServerAddress()] if !ok { authconfig = auth.AuthConfig{} } - if *flUsername == "" { + if username == "" { promptDefault("Username", authconfig.Username) - username = readAndEchoString(cli.in, cli.out) + username, _ = readInput(cli.in) if username == "" { username = authconfig.Username } - } else { - username = *flUsername } + if username != authconfig.Username { - if *flPassword == "" { + if password == "" { + oldState, _ := term.SaveState(cli.terminalFd) fmt.Fprintf(cli.out, "Password: ") - password = readString(cli.in, cli.out) + + term.DisableEcho(cli.terminalFd, cli.out, oldState) + password, _ = readInput(cli.in) + + term.RestoreTerminal(cli.terminalFd, oldState) + if password == "" { return fmt.Errorf("Error : Password Required") } - } else { - password = *flPassword } - if *flEmail == "" { - promptDefault("Email", authconfig.Email) - email = readAndEchoString(cli.in, cli.out) + if email == "" { + promptDefault("\nEmail", authconfig.Email) + email, _ = readInput(cli.in) if email == "" { email = authconfig.Email } - } else { - email = *flEmail } } else { password = authconfig.Password email = authconfig.Email } - if oldState != nil { - term.RestoreTerminal(cli.terminalFd, oldState) - } + authconfig.Username = username authconfig.Password = password authconfig.Email = email @@ -1620,7 +1573,7 @@ func (cli *DockerCli) hijack(method, path string, setRawTerminal bool, in io.Rea }) if in != nil && setRawTerminal && cli.isTerminal && os.Getenv("NORAW") == "" { - oldState, err := term.SetRawTerminal(cli.terminalFd) + oldState, err := term.SetRawTerminal(cli.terminalFd, cli.out) if err != nil { return err } diff --git a/term/term.go b/term/term.go index f4d66a71d6..074319c287 100644 --- a/term/term.go +++ b/term/term.go @@ -1,6 +1,8 @@ package term import ( + "fmt" + "io" "os" "os/signal" "syscall" @@ -43,17 +45,43 @@ func RestoreTerminal(fd uintptr, state *State) error { return err } -func SetRawTerminal(fd uintptr) (*State, error) { +func SaveState(fd uintptr) (*State, error) { + var oldState State + if _, _, err := syscall.Syscall(syscall.SYS_IOCTL, fd, getTermios, uintptr(unsafe.Pointer(&oldState.termios))); err != 0 { + return nil, err + } + + return &oldState, nil +} + +func DisableEcho(fd uintptr, out io.Writer, state *State) error { + newState := state.termios + newState.Lflag &^= syscall.ECHO + + HandleInterrupt(fd, out, state) + if _, _, err := syscall.Syscall(syscall.SYS_IOCTL, fd, setTermios, uintptr(unsafe.Pointer(&newState))); err != 0 { + return err + } + return nil +} + +func HandleInterrupt(fd uintptr, out io.Writer, state *State) { + sigchan := make(chan os.Signal, 1) + signal.Notify(sigchan, os.Interrupt) + + go func() { + _ = <-sigchan + fmt.Fprintf(out, "\n") + RestoreTerminal(fd, state) + os.Exit(0) + }() +} + +func SetRawTerminal(fd uintptr, out io.Writer) (*State, error) { oldState, err := MakeRaw(fd) if err != nil { return nil, err } - c := make(chan os.Signal, 1) - signal.Notify(c, os.Interrupt) - go func() { - _ = <-c - RestoreTerminal(fd, oldState) - os.Exit(0) - }() + HandleInterrupt(fd, out, oldState) return oldState, err } From 4089a20cf476d2241b051d9ba913b7adde90661d Mon Sep 17 00:00:00 2001 From: David Calavera Date: Sat, 3 Aug 2013 17:27:15 -0700 Subject: [PATCH 005/215] Exit if there is any error reading from stdin. --- commands.go | 13 +++++++------ term/term.go | 2 +- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/commands.go b/commands.go index 416076d3d5..51efacd09b 100644 --- a/commands.go +++ b/commands.go @@ -272,13 +272,14 @@ func (cli *DockerCli) CmdLogin(args ...string) error { } } - readInput := func(in io.Reader) (string, error) { + readInput := func(in io.Reader, out io.Writer) string { reader := bufio.NewReader(in) line, err := reader.ReadString('\n') if err != nil { - return "", err + fmt.Fprintln(out, err.Error()) + os.Exit(1) } - return line, nil + return line } authconfig, ok := cli.configFile.Configs[auth.IndexServerAddress()] @@ -288,7 +289,7 @@ func (cli *DockerCli) CmdLogin(args ...string) error { if username == "" { promptDefault("Username", authconfig.Username) - username, _ = readInput(cli.in) + username = readInput(cli.in, cli.out) if username == "" { username = authconfig.Username } @@ -300,7 +301,7 @@ func (cli *DockerCli) CmdLogin(args ...string) error { fmt.Fprintf(cli.out, "Password: ") term.DisableEcho(cli.terminalFd, cli.out, oldState) - password, _ = readInput(cli.in) + password = readInput(cli.in, cli.out) term.RestoreTerminal(cli.terminalFd, oldState) @@ -311,7 +312,7 @@ func (cli *DockerCli) CmdLogin(args ...string) error { if email == "" { promptDefault("\nEmail", authconfig.Email) - email, _ = readInput(cli.in) + email = readInput(cli.in, cli.out) if email == "" { email = authconfig.Email } diff --git a/term/term.go b/term/term.go index 074319c287..2c78d6806e 100644 --- a/term/term.go +++ b/term/term.go @@ -71,7 +71,7 @@ func HandleInterrupt(fd uintptr, out io.Writer, state *State) { go func() { _ = <-sigchan - fmt.Fprintf(out, "\n") + fmt.Fprint(out, "\n") RestoreTerminal(fd, state) os.Exit(0) }() From bdaa87ff2158781c0772e1cab26b52ae6ec07ce4 Mon Sep 17 00:00:00 2001 From: David Calavera Date: Sat, 3 Aug 2013 21:30:07 -0700 Subject: [PATCH 006/215] Print a new line after getting the password from stdin. --- commands.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/commands.go b/commands.go index 51efacd09b..814084f353 100644 --- a/commands.go +++ b/commands.go @@ -302,6 +302,7 @@ func (cli *DockerCli) CmdLogin(args ...string) error { term.DisableEcho(cli.terminalFd, cli.out, oldState) password = readInput(cli.in, cli.out) + fmt.Fprint(cli.out, "\n") term.RestoreTerminal(cli.terminalFd, oldState) @@ -311,7 +312,7 @@ func (cli *DockerCli) CmdLogin(args ...string) error { } if email == "" { - promptDefault("\nEmail", authconfig.Email) + promptDefault("Email", authconfig.Email) email = readInput(cli.in, cli.out) if email == "" { email = authconfig.Email From 0e21de9a25edfe56fa996055712d25b7a3345f0d Mon Sep 17 00:00:00 2001 From: "Sean P. Kane" Date: Wed, 7 Aug 2013 09:38:49 -0700 Subject: [PATCH 007/215] Assume that if VAGRANT_DEFAULT_PROVIDER is set we shouldn't install vbox tools --- Vagrantfile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Vagrantfile b/Vagrantfile index aadabb8711..4ff8c6ec14 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -25,7 +25,8 @@ Vagrant::Config.run do |config| "apt-get update -qq; apt-get install -q -y linux-image-3.8.0-19-generic; " # Add guest additions if local vbox VM is_vbox = true - ARGV.each do |arg| is_vbox &&= !arg.downcase.start_with?("--provider") end + # The logic here makes a few assumptions (i.e. no one uses --provider=virtualbox) + ARGV.each do |arg| is_vbox &&= ( !arg.downcase.start_with?("--provider") && !ENV['VAGRANT_DEFAULT_PROVIDER'] )end if is_vbox pkg_cmd << "apt-get install -q -y linux-headers-3.8.0-19-generic dkms; " \ "echo 'Downloading VBox Guest Additions...'; " \ From f11fb706f6f54a0a06e80b7d4326a14ce50c1611 Mon Sep 17 00:00:00 2001 From: Andreas Savvides Date: Fri, 16 Aug 2013 12:07:37 +0100 Subject: [PATCH 008/215] Adding direct reference to contribution guidelines --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index ed2709158f..ffe5f0dca7 100644 --- a/README.md +++ b/README.md @@ -301,8 +301,7 @@ Contributing to Docker ====================== Want to hack on Docker? Awesome! There are instructions to get you -started on the website: -http://docs.docker.io/en/latest/contributing/contributing/ +started [here](CONTRIBUTING.md). They are probably not perfect, please let us know if anything feels wrong or incomplete. From 20b1e19641d94b5e71ecee7a9703eb392a81cf9a Mon Sep 17 00:00:00 2001 From: Victor Vieux Date: Fri, 16 Aug 2013 13:31:50 +0000 Subject: [PATCH 009/215] add loading message --- runtime.go | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/runtime.go b/runtime.go index 0f97c01cba..86ce725177 100644 --- a/runtime.go +++ b/runtime.go @@ -207,19 +207,29 @@ func (runtime *Runtime) Destroy(container *Container) error { } func (runtime *Runtime) restore() error { + wheel := "-\\|/" + if os.Getenv("DEBUG") == "" { + fmt.Printf("Loading containers: ") + } dir, err := ioutil.ReadDir(runtime.repository) if err != nil { return err } - for _, v := range dir { + for i, v := range dir { id := v.Name() container, err := runtime.Load(id) + if i%21 == 0 && os.Getenv("DEBUG") == "" { + fmt.Printf("\b%c", wheel[i%4]) + } if err != nil { utils.Debugf("Failed to load container %v: %v", id, err) continue } utils.Debugf("Loaded container %v", container.ID) } + if os.Getenv("DEBUG") == "" { + fmt.Printf("\bdone.\n") + } return nil } From 8a18999d2352d9c93e44935222e24874476c5018 Mon Sep 17 00:00:00 2001 From: David Calavera Date: Sat, 17 Aug 2013 21:08:00 -0700 Subject: [PATCH 010/215] Add the ISIG syscall back to not kill the client withing a shell with ctrl+c. --- term/termios_darwin.go | 2 +- term/termios_linux.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/term/termios_darwin.go b/term/termios_darwin.go index 0f6b24b184..24e79de4b2 100644 --- a/term/termios_darwin.go +++ b/term/termios_darwin.go @@ -44,7 +44,7 @@ func MakeRaw(fd uintptr) (*State, error) { newState.Iflag &^= (ISTRIP | INLCR | IGNCR | IXON | IXOFF) newState.Iflag |= ICRNL newState.Oflag |= ONLCR - newState.Lflag &^= (ECHO | ICANON) + newState.Lflag &^= (ECHO | ICANON | ISIG) if _, _, err := syscall.Syscall(syscall.SYS_IOCTL, fd, uintptr(setTermios), uintptr(unsafe.Pointer(&newState))); err != 0 { return nil, err diff --git a/term/termios_linux.go b/term/termios_linux.go index 22f4fff430..6a76460a54 100644 --- a/term/termios_linux.go +++ b/term/termios_linux.go @@ -33,7 +33,7 @@ func MakeRaw(fd uintptr) (*State, error) { newState.Iflag &^= (syscall.IGNBRK | syscall.BRKINT | syscall.PARMRK | syscall.ISTRIP | syscall.INLCR | syscall.IGNCR | syscall.ICRNL | syscall.IXON) newState.Oflag &^= syscall.OPOST - newState.Lflag &^= (syscall.ECHO | syscall.ECHONL | syscall.ICANON | syscall.IEXTEN) + newState.Lflag &^= (syscall.ECHO | syscall.ECHONL | syscall.ICANON | syscall.ISIG | syscall.EXTEN) newState.Cflag &^= (syscall.CSIZE | syscall.PARENB) newState.Cflag |= syscall.CS8 From 45543d012e98de5ed9b1e415c8ce417fe02d3c55 Mon Sep 17 00:00:00 2001 From: David Calavera Date: Sat, 17 Aug 2013 21:29:37 -0700 Subject: [PATCH 011/215] Simplify term signal handler. --- commands.go | 5 +++-- term/term.go | 25 ++++++++++++------------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/commands.go b/commands.go index 814084f353..9300758a34 100644 --- a/commands.go +++ b/commands.go @@ -300,7 +300,8 @@ func (cli *DockerCli) CmdLogin(args ...string) error { oldState, _ := term.SaveState(cli.terminalFd) fmt.Fprintf(cli.out, "Password: ") - term.DisableEcho(cli.terminalFd, cli.out, oldState) + term.DisableEcho(cli.terminalFd, oldState) + password = readInput(cli.in, cli.out) fmt.Fprint(cli.out, "\n") @@ -1575,7 +1576,7 @@ func (cli *DockerCli) hijack(method, path string, setRawTerminal bool, in io.Rea }) if in != nil && setRawTerminal && cli.isTerminal && os.Getenv("NORAW") == "" { - oldState, err := term.SetRawTerminal(cli.terminalFd, cli.out) + oldState, err := term.SetRawTerminal(cli.terminalFd) if err != nil { return err } diff --git a/term/term.go b/term/term.go index 2c78d6806e..d8d4d1a655 100644 --- a/term/term.go +++ b/term/term.go @@ -54,34 +54,33 @@ func SaveState(fd uintptr) (*State, error) { return &oldState, nil } -func DisableEcho(fd uintptr, out io.Writer, state *State) error { +func DisableEcho(fd uintptr, state *State) error { newState := state.termios newState.Lflag &^= syscall.ECHO - HandleInterrupt(fd, out, state) if _, _, err := syscall.Syscall(syscall.SYS_IOCTL, fd, setTermios, uintptr(unsafe.Pointer(&newState))); err != 0 { return err } + handleInterrupt(fd, state) return nil } -func HandleInterrupt(fd uintptr, out io.Writer, state *State) { +func SetRawTerminal(fd uintptr) (*State, error) { + oldState, err := MakeRaw(fd) + if err != nil { + return nil, err + } + handleInterrupt(fd, oldState) + return oldState, err +} + +func handleInterrupt(fd uintptr, state *State) { sigchan := make(chan os.Signal, 1) signal.Notify(sigchan, os.Interrupt) go func() { _ = <-sigchan - fmt.Fprint(out, "\n") RestoreTerminal(fd, state) os.Exit(0) }() } - -func SetRawTerminal(fd uintptr, out io.Writer) (*State, error) { - oldState, err := MakeRaw(fd) - if err != nil { - return nil, err - } - HandleInterrupt(fd, out, oldState) - return oldState, err -} From 276d2bbf1d400415bec8d4652ac61e570b9206e3 Mon Sep 17 00:00:00 2001 From: David Calavera Date: Sat, 17 Aug 2013 22:22:11 -0700 Subject: [PATCH 012/215] Remove unused imports. --- term/term.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/term/term.go b/term/term.go index d8d4d1a655..5929c2caa1 100644 --- a/term/term.go +++ b/term/term.go @@ -1,8 +1,6 @@ package term import ( - "fmt" - "io" "os" "os/signal" "syscall" From e69f7142190451eb1e0553e2dfab8e916dc9cead Mon Sep 17 00:00:00 2001 From: David Calavera Date: Sat, 17 Aug 2013 22:22:24 -0700 Subject: [PATCH 013/215] Fix syscall name. --- term/termios_linux.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/term/termios_linux.go b/term/termios_linux.go index 6a76460a54..4a717c84a7 100644 --- a/term/termios_linux.go +++ b/term/termios_linux.go @@ -33,7 +33,7 @@ func MakeRaw(fd uintptr) (*State, error) { newState.Iflag &^= (syscall.IGNBRK | syscall.BRKINT | syscall.PARMRK | syscall.ISTRIP | syscall.INLCR | syscall.IGNCR | syscall.ICRNL | syscall.IXON) newState.Oflag &^= syscall.OPOST - newState.Lflag &^= (syscall.ECHO | syscall.ECHONL | syscall.ICANON | syscall.ISIG | syscall.EXTEN) + newState.Lflag &^= (syscall.ECHO | syscall.ECHONL | syscall.ICANON | syscall.ISIG | syscall.IEXTEN) newState.Cflag &^= (syscall.CSIZE | syscall.PARENB) newState.Cflag |= syscall.CS8 From 6aff117164a8e665aa9e417ab019581297336d2e Mon Sep 17 00:00:00 2001 From: David Calavera Date: Sat, 17 Aug 2013 22:28:05 -0700 Subject: [PATCH 014/215] Use flag.StringVar to capture the command line flags. --- commands.go | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/commands.go b/commands.go index 9300758a34..ee71e5fa77 100644 --- a/commands.go +++ b/commands.go @@ -255,9 +255,11 @@ func (cli *DockerCli) CmdBuild(args ...string) error { func (cli *DockerCli) CmdLogin(args ...string) error { cmd := Subcmd("login", "[OPTIONS]", "Register or Login to the docker registry server") - username := *cmd.String("u", "", "username") - password := *cmd.String("p", "", "password") - email := *cmd.String("e", "", "email") + var username, password, email string + + cmd.StringVar(&username, "u", "", "username") + cmd.StringVar(&password, "p", "", "password") + cmd.StringVar(&email, "e", "", "email") err := cmd.Parse(args) if err != nil { From b22c9731102abbaf42e8d7e37e179ef56b945ccd Mon Sep 17 00:00:00 2001 From: Song Gao Date: Sun, 18 Aug 2013 21:44:46 -0500 Subject: [PATCH 015/215] Added escape sequence to tutorial --- docs/sources/use/basics.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/sources/use/basics.rst b/docs/sources/use/basics.rst index 411e1c30d1..b4f93b432b 100644 --- a/docs/sources/use/basics.rst +++ b/docs/sources/use/basics.rst @@ -33,6 +33,8 @@ Running an interactive shell # Run an interactive shell in the ubuntu image, # allocate a tty, attach stdin and stdout + # To detach the tty without exiting the shell, + # use the escape sequence Ctrl-p + Ctrl-q sudo docker run -i -t ubuntu /bin/bash Why ``sudo``? From 646afab28d8ccadf81e1d18055335739b6b983d1 Mon Sep 17 00:00:00 2001 From: Victor Vieux Date: Mon, 19 Aug 2013 12:05:47 +0000 Subject: [PATCH 016/215] improve version --- commands.go | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/commands.go b/commands.go index 899a8e2f1a..9d0b0968d1 100644 --- a/commands.go +++ b/commands.go @@ -19,6 +19,7 @@ import ( "os/signal" "path/filepath" "reflect" + "runtime" "strconv" "strings" "syscall" @@ -433,6 +434,12 @@ func (cli *DockerCli) CmdVersion(args ...string) error { return nil } + fmt.Fprintf(cli.out, "Client version: %s\n", VERSION) + fmt.Fprintf(cli.out, "Go version (client): %s\n", runtime.Version()) + if GITCOMMIT != "" { + fmt.Fprintf(cli.out, "Git commit (client): %s\n", GITCOMMIT) + } + body, _, err := cli.call("GET", "/version", nil) if err != nil { return err @@ -444,13 +451,12 @@ func (cli *DockerCli) CmdVersion(args ...string) error { utils.Debugf("Error unmarshal: body: %s, err: %s\n", body, err) return err } - fmt.Fprintf(cli.out, "Client version: %s\n", VERSION) fmt.Fprintf(cli.out, "Server version: %s\n", out.Version) if out.GitCommit != "" { - fmt.Fprintf(cli.out, "Git commit: %s\n", out.GitCommit) + fmt.Fprintf(cli.out, "Git commit (version): %s\n", out.GitCommit) } if out.GoVersion != "" { - fmt.Fprintf(cli.out, "Go version: %s\n", out.GoVersion) + fmt.Fprintf(cli.out, "Go version (server): %s\n", out.GoVersion) } release := utils.GetReleaseVersion() From e9a1246527c229528286e6c9c41ec38cca9d2566 Mon Sep 17 00:00:00 2001 From: Kyle Conroy Date: Mon, 19 Aug 2013 11:54:51 -0700 Subject: [PATCH 017/215] Enable mobile view for website. The documentation currently uses responsive Bootstrap, but didn't include the correct meta tag for proper display on mobile devices. --- docs/theme/docker/layout.html | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/theme/docker/layout.html b/docs/theme/docker/layout.html index 2b7796628f..e90663d2b6 100755 --- a/docs/theme/docker/layout.html +++ b/docs/theme/docker/layout.html @@ -6,6 +6,7 @@ + {{ meta['title'] if meta and meta['title'] else title }} - Docker Documentation From 41973d41e950249cd630f193a4d9250e3b3740e5 Mon Sep 17 00:00:00 2001 From: Victor Vieux Date: Tue, 20 Aug 2013 11:52:37 +0000 Subject: [PATCH 018/215] fix typo --- commands.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/commands.go b/commands.go index 9d0b0968d1..8f31b24f7e 100644 --- a/commands.go +++ b/commands.go @@ -453,7 +453,7 @@ func (cli *DockerCli) CmdVersion(args ...string) error { } fmt.Fprintf(cli.out, "Server version: %s\n", out.Version) if out.GitCommit != "" { - fmt.Fprintf(cli.out, "Git commit (version): %s\n", out.GitCommit) + fmt.Fprintf(cli.out, "Git commit (server): %s\n", out.GitCommit) } if out.GoVersion != "" { fmt.Fprintf(cli.out, "Go version (server): %s\n", out.GoVersion) From 30726c378572f8aa2256875b1b39b94144acff80 Mon Sep 17 00:00:00 2001 From: Daniel Mizyrycki Date: Tue, 20 Aug 2013 12:18:29 -0700 Subject: [PATCH 019/215] Improve docker-ci deployment and tests --- testing/Vagrantfile | 27 +++++++++++++++++---------- testing/buildbot/master.cfg | 8 ++++---- testing/buildbot/requirements.txt | 1 + 3 files changed, 22 insertions(+), 14 deletions(-) diff --git a/testing/Vagrantfile b/testing/Vagrantfile index 033f14b3de..fd1c5916c8 100644 --- a/testing/Vagrantfile +++ b/testing/Vagrantfile @@ -2,11 +2,10 @@ # vi: set ft=ruby : BOX_NAME = "docker-ci" -BOX_URI = "http://files.vagrantup.com/precise64.box" -AWS_AMI = "ami-d0f89fb9" +BOX_URI = "http://cloud-images.ubuntu.com/vagrant/raring/current/raring-server-cloudimg-amd64-vagrant-disk1.box" +AWS_AMI = "ami-10314d79" DOCKER_PATH = "/data/docker" CFG_PATH = "#{DOCKER_PATH}/testing/buildbot" -BUILDBOT_IP = "192.168.33.41" on_vbox = File.file?("#{File.dirname(__FILE__)}/.vagrant/machines/default/virtualbox/id") | \ Dir.glob("#{File.dirname(__FILE__)}/.vagrant/machines/default/*/id").empty? & \ (on_vbox=true; ARGV.each do |arg| on_vbox &&= !arg.downcase.start_with?("--provider") end; on_vbox) @@ -16,16 +15,22 @@ Vagrant::Config.run do |config| # Setup virtual machine box. This VM configuration code is always executed. config.vm.box = BOX_NAME config.vm.box_url = BOX_URI + config.vm.forward_port 8010, 8010 config.vm.share_folder "v-data", DOCKER_PATH, "#{File.dirname(__FILE__)}/.." - config.vm.network :hostonly, BUILDBOT_IP # Deploy buildbot and its dependencies if it was not done if Dir.glob("#{File.dirname(__FILE__)}/.vagrant/machines/default/*/id").empty? # Add memory limitation capabilities pkg_cmd = 'sed -Ei \'s/^(GRUB_CMDLINE_LINUX_DEFAULT)=.+/\\1="cgroup_enable=memory swapaccount=1 quiet"/\' /etc/default/grub; ' - # Install new kernel - pkg_cmd << "apt-get update -qq; apt-get install -q -y linux-image-generic-lts-raring; " + # Adjust kernel + pkg_cmd << "apt-get update -qq; " + if on_vbox + pkg_cmd << "apt-get install -q -y linux-image-extra-`uname -r`; " + else + pkg_cmd << "apt-get install -q -y linux-image-generic; " + end + # Deploy buildbot CI pkg_cmd << "apt-get install -q -y python-dev python-pip supervisor; " \ "pip install -r #{CFG_PATH}/requirements.txt; " \ @@ -36,10 +41,12 @@ Vagrant::Config.run do |config| "#{CFG_PATH}/setup_credentials.sh #{USER} " \ "#{ENV['REGISTRY_USER']} #{ENV['REGISTRY_PWD']}; " # Install docker dependencies - pkg_cmd << "apt-get install -q -y python-software-properties; " \ - "add-apt-repository -y ppa:dotcloud/docker-golang/ubuntu; apt-get update -qq; " \ - "DEBIAN_FRONTEND=noninteractive apt-get install -q -y lxc git mercurial golang-stable aufs-tools make; " - # Activate new kernel + pkg_cmd << "curl -s https://go.googlecode.com/files/go1.1.1.linux-amd64.tar.gz | " \ + "tar -v -C /usr/local -xz; ln -s /usr/local/go/bin/go /usr/bin/go; " \ + "DEBIAN_FRONTEND=noninteractive apt-get install -q -y lxc git mercurial aufs-tools make; " \ + "export GOPATH=/data/docker-dependencies; go get -d github.com/dotcloud/docker; " \ + "rm -rf ${GOPATH}/src/github.com/dotcloud/docker; " + # Activate new kernel options pkg_cmd << "shutdown -r +1; " config.vm.provision :shell, :inline => pkg_cmd end diff --git a/testing/buildbot/master.cfg b/testing/buildbot/master.cfg index 05dcacbf58..6714f2fa8a 100644 --- a/testing/buildbot/master.cfg +++ b/testing/buildbot/master.cfg @@ -22,7 +22,6 @@ GITHUB_DOCKER = 'github.com/dotcloud/docker' BUILDBOT_PATH = '/data/buildbot' DOCKER_PATH = '/data/docker' BUILDER_PATH = '/data/buildbot/slave/{0}/build'.format(BUILDER_NAME) -DOCKER_BUILD_PATH = BUILDER_PATH + '/src/github.com/dotcloud/docker' # Credentials set by setup.sh and Vagrantfile BUILDBOT_PWD = '' @@ -57,9 +56,10 @@ c['schedulers'] += [Nightly(name='daily', branch=None, builderNames=['coverage', # Docker commit test factory = BuildFactory() factory.addStep(ShellCommand(description='Docker',logEnviron=False,usePTY=True, - command=["sh", "-c", Interpolate("cd ..; rm -rf build; export GOPATH={0}; " - "go get -d {1}; cd {2}; git reset --hard %(src::revision:-unknown)s; " - "go test -v".format(BUILDER_PATH,GITHUB_DOCKER,DOCKER_BUILD_PATH))])) + command=["sh", "-c", Interpolate("cd ..; rm -rf build; mkdir build; " + "cp -r {2}-dependencies/src {0}; export GOPATH={0}; go get {3}; cd {1}; " + "git reset --hard %(src::revision)s; go test -v".format( + BUILDER_PATH, BUILDER_PATH+'/src/'+GITHUB_DOCKER, DOCKER_PATH, GITHUB_DOCKER))])) c['builders'] = [BuilderConfig(name=BUILDER_NAME,slavenames=['buildworker'], factory=factory)] diff --git a/testing/buildbot/requirements.txt b/testing/buildbot/requirements.txt index 4e183ba062..c5d7dd0191 100644 --- a/testing/buildbot/requirements.txt +++ b/testing/buildbot/requirements.txt @@ -5,3 +5,4 @@ buildbot_slave==0.8.7p1 nose==1.2.1 requests==1.1.0 flask==0.10.1 +simplejson==2.3.2 From ee64e099e06175ec9c7735b591f51cfcdfbdd6fe Mon Sep 17 00:00:00 2001 From: Daniel Mizyrycki Date: Tue, 20 Aug 2013 12:32:32 -0700 Subject: [PATCH 020/215] testing, issue #773: Automatically test pull requests on docker-ci --- testing/buildbot/github.py | 169 ++++++++++++++++++++++++++++++++++++ testing/buildbot/master.cfg | 16 ++++ testing/buildbot/setup.sh | 3 + 3 files changed, 188 insertions(+) create mode 100644 testing/buildbot/github.py diff --git a/testing/buildbot/github.py b/testing/buildbot/github.py new file mode 100644 index 0000000000..b0fe98a135 --- /dev/null +++ b/testing/buildbot/github.py @@ -0,0 +1,169 @@ +# This file is part of Buildbot. Buildbot is free software: you can +# redistribute it and/or modify it under the terms of the GNU General Public +# License as published by the Free Software Foundation, version 2. +# +# This program is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +# details. +# +# You should have received a copy of the GNU General Public License along with +# this program; if not, write to the Free Software Foundation, Inc., 51 +# Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Copyright Buildbot Team Members + +#!/usr/bin/env python +""" +github_buildbot.py is based on git_buildbot.py + +github_buildbot.py will determine the repository information from the JSON +HTTP POST it receives from github.com and build the appropriate repository. +If your github repository is private, you must add a ssh key to the github +repository for the user who initiated the build on the buildslave. + +""" + +import re +import datetime +from twisted.python import log +import calendar + +try: + import json + assert json +except ImportError: + import simplejson as json + +# python is silly about how it handles timezones +class fixedOffset(datetime.tzinfo): + """ + fixed offset timezone + """ + def __init__(self, minutes, hours, offsetSign = 1): + self.minutes = int(minutes) * offsetSign + self.hours = int(hours) * offsetSign + self.offset = datetime.timedelta(minutes = self.minutes, + hours = self.hours) + + def utcoffset(self, dt): + return self.offset + + def dst(self, dt): + return datetime.timedelta(0) + +def convertTime(myTestTimestamp): + #"1970-01-01T00:00:00+00:00" + # Normalize myTestTimestamp + if myTestTimestamp[-1] == 'Z': + myTestTimestamp = myTestTimestamp[:-1] + '-00:00' + matcher = re.compile(r'(\d\d\d\d)-(\d\d)-(\d\d)T(\d\d):(\d\d):(\d\d)([-+])(\d\d):(\d\d)') + result = matcher.match(myTestTimestamp) + (year, month, day, hour, minute, second, offsetsign, houroffset, minoffset) = \ + result.groups() + if offsetsign == '+': + offsetsign = 1 + else: + offsetsign = -1 + + offsetTimezone = fixedOffset( minoffset, houroffset, offsetsign ) + myDatetime = datetime.datetime( int(year), + int(month), + int(day), + int(hour), + int(minute), + int(second), + 0, + offsetTimezone) + return calendar.timegm( myDatetime.utctimetuple() ) + +def getChanges(request, options = None): + """ + Reponds only to POST events and starts the build process + + :arguments: + request + the http request object + """ + payload = json.loads(request.args['payload'][0]) + if 'pull_request' in payload: + user = payload['repository']['owner']['login'] + repo = payload['repository']['name'] + repo_url = payload['repository']['html_url'] + else: + user = payload['repository']['owner']['name'] + repo = payload['repository']['name'] + repo_url = payload['repository']['url'] + project = request.args.get('project', None) + if project: + project = project[0] + elif project is None: + project = '' + # This field is unused: + #private = payload['repository']['private'] + changes = process_change(payload, user, repo, repo_url, project) + log.msg("Received %s changes from github" % len(changes)) + return (changes, 'git') + +def process_change(payload, user, repo, repo_url, project): + """ + Consumes the JSON as a python object and actually starts the build. + + :arguments: + payload + Python Object that represents the JSON sent by GitHub Service + Hook. + """ + changes = [] + + newrev = payload['after'] if 'after' in payload else payload['pull_request']['head']['sha'] + refname = payload['ref'] if 'ref' in payload else payload['pull_request']['head']['ref'] + + # We only care about regular heads, i.e. branches + match = re.match(r"^(refs\/heads\/|)([^/]+)$", refname) + if not match: + log.msg("Ignoring refname `%s': Not a branch" % refname) + return [] + + branch = match.groups()[1] + if re.match(r"^0*$", newrev): + log.msg("Branch `%s' deleted, ignoring" % branch) + return [] + else: + if 'pull_request' in payload: + changes = [{ + 'category' : 'github_pullrequest', + 'who' : user, + 'files' : [], + 'comments' : payload['pull_request']['title'], + 'revision' : newrev, + 'when' : convertTime(payload['pull_request']['updated_at']), + 'branch' : branch, + 'revlink' : '{0}/commit/{1}'.format(repo_url,newrev), + 'repository' : repo_url, + 'project' : project }] + return changes + for commit in payload['commits']: + files = [] + if 'added' in commit: + files.extend(commit['added']) + if 'modified' in commit: + files.extend(commit['modified']) + if 'removed' in commit: + files.extend(commit['removed']) + when = convertTime( commit['timestamp']) + log.msg("New revision: %s" % commit['id'][:8]) + chdict = dict( + who = commit['author']['name'] + + " <" + commit['author']['email'] + ">", + files = files, + comments = commit['message'], + revision = commit['id'], + when = when, + branch = branch, + revlink = commit['url'], + repository = repo_url, + project = project) + changes.append(chdict) + return changes + diff --git a/testing/buildbot/master.cfg b/testing/buildbot/master.cfg index 6714f2fa8a..cc261c7a3e 100644 --- a/testing/buildbot/master.cfg +++ b/testing/buildbot/master.cfg @@ -22,6 +22,7 @@ GITHUB_DOCKER = 'github.com/dotcloud/docker' BUILDBOT_PATH = '/data/buildbot' DOCKER_PATH = '/data/docker' BUILDER_PATH = '/data/buildbot/slave/{0}/build'.format(BUILDER_NAME) +PULL_REQUEST_PATH = '/data/buildbot/slave/pullrequest/build' # Credentials set by setup.sh and Vagrantfile BUILDBOT_PWD = '' @@ -48,6 +49,9 @@ c['schedulers'] = [ForceScheduler(name='trigger', builderNames=[BUILDER_NAME, c['schedulers'] += [SingleBranchScheduler(name="all", change_filter=filter.ChangeFilter(branch='master'), treeStableTimer=None, builderNames=[BUILDER_NAME])] +c['schedulers'] += [SingleBranchScheduler(name='pullrequest', + change_filter=filter.ChangeFilter(category='github_pullrequest'), treeStableTimer=None, + builderNames=['pullrequest'])] c['schedulers'] += [Nightly(name='daily', branch=None, builderNames=['coverage','registry'], hour=0, minute=30)] @@ -60,9 +64,21 @@ factory.addStep(ShellCommand(description='Docker',logEnviron=False,usePTY=True, "cp -r {2}-dependencies/src {0}; export GOPATH={0}; go get {3}; cd {1}; " "git reset --hard %(src::revision)s; go test -v".format( BUILDER_PATH, BUILDER_PATH+'/src/'+GITHUB_DOCKER, DOCKER_PATH, GITHUB_DOCKER))])) + c['builders'] = [BuilderConfig(name=BUILDER_NAME,slavenames=['buildworker'], factory=factory)] +# Docker pull request test +factory = BuildFactory() +factory.addStep(ShellCommand(description='pull_request',logEnviron=False,usePTY=True, + command=["sh", "-c", Interpolate("cd ..; rm -rf build; mkdir build; " + "cp -r {2}-dependencies/src {0}; export GOPATH={0}; go get {3}; cd {1}; " + "git fetch %(src::repository)s %(src::branch)s:PR-%(src::branch)s; " + "git checkout %(src::revision)s; git rebase master; go test -v".format( + PULL_REQUEST_PATH, PULL_REQUEST_PATH+'/src/'+GITHUB_DOCKER, DOCKER_PATH, GITHUB_DOCKER))])) +c['builders'] += [BuilderConfig(name='pullrequest',slavenames=['buildworker'], + factory=factory)] + # Docker coverage test coverage_cmd = ('GOPATH=`pwd` go get -d github.com/dotcloud/docker\n' 'GOPATH=`pwd` go get github.com/axw/gocov/gocov\n' diff --git a/testing/buildbot/setup.sh b/testing/buildbot/setup.sh index 937533ba1f..99e4f7f104 100755 --- a/testing/buildbot/setup.sh +++ b/testing/buildbot/setup.sh @@ -36,6 +36,9 @@ run "sed -i -E 's#(SMTP_PWD = ).+#\1\"$SMTP_PWD\"#' master/master.cfg" run "sed -i -E 's#(EMAIL_RCP = ).+#\1\"$EMAIL_RCP\"#' master/master.cfg" run "buildslave create-slave slave $SLAVE_SOCKET $SLAVE_NAME $BUILDBOT_PWD" +# Patch github webstatus to capture pull requests +cp $CFG_PATH/github.py /usr/local/lib/python2.7/dist-packages/buildbot/status/web/hooks + # Allow buildbot subprocesses (docker tests) to properly run in containers, # in particular with docker -u run "sed -i 's/^umask = None/umask = 000/' slave/buildbot.tac" From 62e84785b6ffec04a39cf611d7eaff21f2532195 Mon Sep 17 00:00:00 2001 From: Thijs Terlouw Date: Wed, 21 Aug 2013 15:23:12 +0200 Subject: [PATCH 021/215] proper resolv.conf parsing --- utils/utils.go | 22 +++++++++++++++++++--- utils/utils_test.go | 10 ++++++++++ 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/utils/utils.go b/utils/utils.go index 6a5beb8e48..a8ed1deebc 100644 --- a/utils/utils.go +++ b/utils/utils.go @@ -772,21 +772,37 @@ func GetResolvConf() ([]byte, error) { // CheckLocalDns looks into the /etc/resolv.conf, // it returns true if there is a local nameserver or if there is no nameserver. func CheckLocalDns(resolvConf []byte) bool { - if !bytes.Contains(resolvConf, []byte("nameserver")) { + var parsedResolvConf = ParseResolvConf(resolvConf) + if !bytes.Contains(parsedResolvConf, []byte("nameserver")) { return true } - for _, ip := range [][]byte{ []byte("127.0.0.1"), []byte("127.0.1.1"), } { - if bytes.Contains(resolvConf, ip) { + if bytes.Contains(parsedResolvConf, ip) { return true } } return false } +// ParseResolvConf parses the resolv.conf file into lines and strips away comments. +func ParseResolvConf(resolvConf []byte) []byte { + lines := bytes.Split(resolvConf, []byte("\n")) + var noCommentsResolvConf []byte + for _, currentLine := range lines { + var cleanLine = bytes.TrimLeft(currentLine, " \t") + var commentIndex = bytes.Index(cleanLine, []byte("#")) + if ( commentIndex == -1 ) { + noCommentsResolvConf = append(noCommentsResolvConf, cleanLine...) + } else { + noCommentsResolvConf = append(noCommentsResolvConf, cleanLine[:commentIndex]...) + } + } + return noCommentsResolvConf +} + func ParseHost(host string, port int, addr string) string { if strings.HasPrefix(addr, "unix://") { return addr diff --git a/utils/utils_test.go b/utils/utils_test.go index 1030b2902a..cdf9c87073 100644 --- a/utils/utils_test.go +++ b/utils/utils_test.go @@ -323,6 +323,16 @@ func TestCheckLocalDns(t *testing.T) { nameserver 10.0.2.3 search dotcloud.net`: false, `# Dynamic +#nameserver 127.0.0.1 +nameserver 10.0.2.3 +search dotcloud.net`: false, + `# Dynamic +nameserver 10.0.2.3 #not used 127.0.1.1 +search dotcloud.net`: false, + `# Dynamic +#nameserver 10.0.2.3 +#search dotcloud.net`: true, + `# Dynamic nameserver 127.0.0.1 search dotcloud.net`: true, `# Dynamic From c349b4d56c338bc43c81667bb927518b923998cb Mon Sep 17 00:00:00 2001 From: Thijs Terlouw Date: Wed, 21 Aug 2013 15:48:39 +0200 Subject: [PATCH 022/215] Keep linebreaks and generalize code --- utils/utils.go | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/utils/utils.go b/utils/utils.go index a8ed1deebc..1fd4c77a7e 100644 --- a/utils/utils.go +++ b/utils/utils.go @@ -772,7 +772,7 @@ func GetResolvConf() ([]byte, error) { // CheckLocalDns looks into the /etc/resolv.conf, // it returns true if there is a local nameserver or if there is no nameserver. func CheckLocalDns(resolvConf []byte) bool { - var parsedResolvConf = ParseResolvConf(resolvConf) + var parsedResolvConf = StripComments(resolvConf, []byte("#")) if !bytes.Contains(parsedResolvConf, []byte("nameserver")) { return true } @@ -787,20 +787,20 @@ func CheckLocalDns(resolvConf []byte) bool { return false } -// ParseResolvConf parses the resolv.conf file into lines and strips away comments. -func ParseResolvConf(resolvConf []byte) []byte { - lines := bytes.Split(resolvConf, []byte("\n")) - var noCommentsResolvConf []byte +// StripComments parses input into lines and strips away comments. +func StripComments(input []byte, commentMarker []byte) []byte { + lines := bytes.Split(input, []byte("\n")) + var output []byte for _, currentLine := range lines { - var cleanLine = bytes.TrimLeft(currentLine, " \t") - var commentIndex = bytes.Index(cleanLine, []byte("#")) + var commentIndex = bytes.Index(currentLine, commentMarker) if ( commentIndex == -1 ) { - noCommentsResolvConf = append(noCommentsResolvConf, cleanLine...) + output = append(output, currentLine...) } else { - noCommentsResolvConf = append(noCommentsResolvConf, cleanLine[:commentIndex]...) + output = append(output, currentLine[:commentIndex]...) } + output = append(output, []byte("\n")...) } - return noCommentsResolvConf + return output } func ParseHost(host string, port int, addr string) string { From 2f6ce27fde04456284457ff686c8f78ab9bd6d71 Mon Sep 17 00:00:00 2001 From: pysqz Date: Wed, 21 Aug 2013 22:37:58 +0800 Subject: [PATCH 023/215] Make sure 'Ghost' container is available with allocated IP --- container.go | 25 ++++++++++++++++++++++--- network.go | 17 ++++++++++++++++- 2 files changed, 38 insertions(+), 4 deletions(-) diff --git a/container.go b/container.go index 472ae3990d..0fae60402c 100644 --- a/container.go +++ b/container.go @@ -20,6 +20,7 @@ import ( "strings" "syscall" "time" + "net" ) type Container struct { @@ -778,10 +779,28 @@ func (container *Container) allocateNetwork() error { return nil } - iface, err := container.runtime.networkManager.Allocate() - if err != nil { - return err + var iface *NetworkInterface + var err error + if !container.State.Ghost { + iface, err = container.runtime.networkManager.Allocate() + if err != nil { + return err + } + } else { + manager := container.runtime.networkManager + if manager.disabled { + iface = &NetworkInterface{disabled: true} + } else { + iface = &NetworkInterface{ + IPNet: net.IPNet{IP: net.ParseIP(container.NetworkSettings.IPAddress), Mask: manager.bridgeNetwork.Mask}, + Gateway: manager.bridgeNetwork.IP, + manager: manager, + } + ipNum := ipToInt(iface.IPNet.IP) + manager.ipAllocator.inUse[ipNum] = struct{}{} + } } + container.NetworkSettings.PortMapping = make(map[string]PortMapping) container.NetworkSettings.PortMapping["Tcp"] = make(PortMapping) container.NetworkSettings.PortMapping["Udp"] = make(PortMapping) diff --git a/network.go b/network.go index dd0fe2dd41..c2673bd803 100644 --- a/network.go +++ b/network.go @@ -635,10 +635,25 @@ func (manager *NetworkManager) Allocate() (*NetworkInterface, error) { return &NetworkInterface{disabled: true}, nil } - ip, err := manager.ipAllocator.Acquire() + var ip net.IP + var err error + + ip, err = manager.ipAllocator.Acquire() if err != nil { return nil, err } + // avoid duplicate IP + ipNum := ipToInt(ip) + firstIP := manager.ipAllocator.network.IP.To4().Mask(manager.ipAllocator.network.Mask) + firstIPNum := ipToInt(firstIP) + 1 + + if firstIPNum == ipNum { + ip, err = manager.ipAllocator.Acquire() + if err != nil { + return nil, err + } + } + iface := &NetworkInterface{ IPNet: net.IPNet{IP: ip, Mask: manager.bridgeNetwork.Mask}, Gateway: manager.bridgeNetwork.IP, From 5e3386473a4d4c37da348c4111164449deb6dc6b Mon Sep 17 00:00:00 2001 From: Daniel Mizyrycki Date: Wed, 21 Aug 2013 17:39:45 -0700 Subject: [PATCH 024/215] testing, issue #773: Add infrastructure docker-ci PR documentation --- hack/infrastructure/docker-ci.rst | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 hack/infrastructure/docker-ci.rst diff --git a/hack/infrastructure/docker-ci.rst b/hack/infrastructure/docker-ci.rst new file mode 100644 index 0000000000..abb8492cf0 --- /dev/null +++ b/hack/infrastructure/docker-ci.rst @@ -0,0 +1,15 @@ +docker-ci github pull request +============================= + +The entire docker pull request test workflow is event driven by github. Its +usage is fully automatic and the results are logged in docker-ci.dotcloud.com + +Each time there is a pull request on docker's github project, github connects +to docker-ci using github's rest API documented in http://developer.github.com/v3/repos/hooks +The issued command to program github's notification PR event was: +curl -u GITHUB_USER:GITHUB_PASSWORD -d '{"name":"web","active":true,"events":["pull_request"],"config":{"url":"http://docker-ci.dotcloud.com:8011/change_hook/github?project=docker"}}' https://api.github.com/repos/dotcloud/docker/hooks + +buildbot (0.8.7p1) was patched using ./testing/buildbot/github.py, so it +can understand the PR data github sends to it. Originally PR #1603 (ee64e099e0) +implemented this capability. Also we added a new scheduler to exclusively filter +PRs. and the 'pullrequest' builder to rebase the PR on top of master and test it. From d6f53049c4ec4513a136bfd512dafe166c4ad901 Mon Sep 17 00:00:00 2001 From: Tyler Brock Date: Wed, 21 Aug 2013 23:48:32 -0400 Subject: [PATCH 025/215] Some fixes for MongoDB example --- docs/sources/examples/mongodb.rst | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/docs/sources/examples/mongodb.rst b/docs/sources/examples/mongodb.rst index e351b9b384..c8b46c2544 100644 --- a/docs/sources/examples/mongodb.rst +++ b/docs/sources/examples/mongodb.rst @@ -24,7 +24,7 @@ Create an empty file called ``Dockerfile``: touch Dockerfile Next, define the parent image you want to use to build your own image on top of. -Here, we’ll use `CentOS `_ (tag: ``latest``) +Here, we’ll use `Ubuntu `_ (tag: ``latest``) available on the `docker index`_: .. code-block:: bash @@ -65,11 +65,14 @@ run without needing to provide a special configuration file) # Create the MongoDB data directory RUN mkdir -p /data/db -Finally, we'll expose the standard port that MongoDB runs on (27107) +Finally, we'll expose the standard port that MongoDB runs on (27107) as well as +add an entrypoint that runs the standard --help command by default. .. code-block:: bash EXPOSE 27017 + ENTRYPOINT [ "/usr/bin/mongod" ] + CMD [ "--help" ] Now, lets build the image which will go through the ``Dockerfile`` we made and run all of the commands. From 093b85b72f7a0fcda292816716e795543b3a72eb Mon Sep 17 00:00:00 2001 From: shin- Date: Thu, 22 Aug 2013 21:15:31 +0200 Subject: [PATCH 026/215] Use additional decorator in RequestFactory to pass meta headers to registry --- api.go | 18 +++++++++++++++--- buildfile.go | 2 +- server.go | 17 ++++++++++------- utils/http.go | 14 ++++++++++++++ 4 files changed, 40 insertions(+), 11 deletions(-) diff --git a/api.go b/api.go index 41edc4f4c5..9e094231b5 100644 --- a/api.go +++ b/api.go @@ -101,7 +101,7 @@ func postAuth(srv *Server, version float64, w http.ResponseWriter, r *http.Reque if err != nil { return err } - status, err := auth.Login(authConfig, srv.HTTPRequestFactory()) + status, err := auth.Login(authConfig, srv.HTTPRequestFactory(nil)) if err != nil { return err } @@ -399,7 +399,13 @@ func postImagesCreate(srv *Server, version float64, w http.ResponseWriter, r *ht } sf := utils.NewStreamFormatter(version > 1.0) if image != "" { //pull - if err := srv.ImagePull(image, tag, w, sf, &auth.AuthConfig{}, version > 1.3); err != nil { + metaHeaders := map[string][]string{} + for k, v := range r.Header { + if strings.HasPrefix(k, "X-Meta-") { + metaHeaders[k] = v + } + } + if err := srv.ImagePull(image, tag, w, sf, &auth.AuthConfig{}, metaHeaders, version > 1.3); err != nil { if sf.Used() { w.Write(sf.FormatError(err)) return nil @@ -468,6 +474,12 @@ func postImagesInsert(srv *Server, version float64, w http.ResponseWriter, r *ht func postImagesPush(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error { authConfig := &auth.AuthConfig{} + metaHeaders := map[string][]string{} + for k, v := range r.Header { + if strings.HasPrefix(k, "X-Meta-") { + metaHeaders[k] = v + } + } if err := json.NewDecoder(r.Body).Decode(authConfig); err != nil { return err } @@ -483,7 +495,7 @@ func postImagesPush(srv *Server, version float64, w http.ResponseWriter, r *http w.Header().Set("Content-Type", "application/json") } sf := utils.NewStreamFormatter(version > 1.0) - if err := srv.ImagePush(name, w, sf, authConfig); err != nil { + if err := srv.ImagePush(name, w, sf, authConfig, metaHeaders); err != nil { if sf.Used() { w.Write(sf.FormatError(err)) return nil diff --git a/buildfile.go b/buildfile.go index 64c4503c9a..4c8db2c60e 100644 --- a/buildfile.go +++ b/buildfile.go @@ -56,7 +56,7 @@ func (b *buildFile) CmdFrom(name string) error { if err != nil { if b.runtime.graph.IsNotExist(err) { remote, tag := utils.ParseRepositoryTag(name) - if err := b.srv.ImagePull(remote, tag, b.out, utils.NewStreamFormatter(false), nil, true); err != nil { + if err := b.srv.ImagePull(remote, tag, b.out, utils.NewStreamFormatter(false), nil, nil, true); err != nil { return err } image, err = b.runtime.repositories.LookupImage(name) diff --git a/server.go b/server.go index fc41424827..646cb44877 100644 --- a/server.go +++ b/server.go @@ -102,7 +102,7 @@ func (srv *Server) ContainerExport(name string, out io.Writer) error { } func (srv *Server) ImagesSearch(term string) ([]APISearch, error) { - r, err := registry.NewRegistry(srv.runtime.root, nil, srv.HTTPRequestFactory()) + r, err := registry.NewRegistry(srv.runtime.root, nil, srv.HTTPRequestFactory(nil)) if err != nil { return nil, err } @@ -632,8 +632,8 @@ func (srv *Server) poolRemove(kind, key string) error { return nil } -func (srv *Server) ImagePull(localName string, tag string, out io.Writer, sf *utils.StreamFormatter, authConfig *auth.AuthConfig, parallel bool) error { - r, err := registry.NewRegistry(srv.runtime.root, authConfig, srv.HTTPRequestFactory()) +func (srv *Server) ImagePull(localName string, tag string, out io.Writer, sf *utils.StreamFormatter, authConfig *auth.AuthConfig, metaHeaders map[string][]string, parallel bool) error { + r, err := registry.NewRegistry(srv.runtime.root, authConfig, srv.HTTPRequestFactory(metaHeaders)) if err != nil { return err } @@ -780,7 +780,7 @@ func (srv *Server) pushImage(r *registry.Registry, out io.Writer, remote, imgID, } // FIXME: Allow to interrupt current push when new push of same image is done. -func (srv *Server) ImagePush(localName string, out io.Writer, sf *utils.StreamFormatter, authConfig *auth.AuthConfig) error { +func (srv *Server) ImagePush(localName string, out io.Writer, sf *utils.StreamFormatter, authConfig *auth.AuthConfig, metaHeaders map[string][]string) error { if err := srv.poolAdd("push", localName); err != nil { return err } @@ -794,7 +794,7 @@ func (srv *Server) ImagePush(localName string, out io.Writer, sf *utils.StreamFo out = utils.NewWriteFlusher(out) img, err := srv.runtime.graph.Get(localName) - r, err2 := registry.NewRegistry(srv.runtime.root, authConfig, srv.HTTPRequestFactory()) + r, err2 := registry.NewRegistry(srv.runtime.root, authConfig, srv.HTTPRequestFactory(metaHeaders)) if err2 != nil { return err2 } @@ -1267,10 +1267,13 @@ func NewServer(flGraphPath string, autoRestart, enableCors bool, dns ListOpts) ( return srv, nil } -func (srv *Server) HTTPRequestFactory() *utils.HTTPRequestFactory { +func (srv *Server) HTTPRequestFactory(metaHeaders map[string][]string) *utils.HTTPRequestFactory { if srv.reqFactory == nil { ud := utils.NewHTTPUserAgentDecorator(srv.versionInfos()...) - factory := utils.NewHTTPRequestFactory(ud) + md := &utils.HTTPMetaHeadersDecorator{ + Headers: metaHeaders, + } + factory := utils.NewHTTPRequestFactory(ud, md) srv.reqFactory = factory } return srv.reqFactory diff --git a/utils/http.go b/utils/http.go index 8c1e4b7a79..1332ce816d 100644 --- a/utils/http.go +++ b/utils/http.go @@ -93,6 +93,20 @@ func (self *HTTPUserAgentDecorator) ChangeRequest(req *http.Request) (newReq *ht return req, nil } +type HTTPMetaHeadersDecorator struct { + Headers map[string][]string +} + +func (self *HTTPMetaHeadersDecorator) ChangeRequest(req *http.Request) (newReq *http.Request, err error) { + if self.Headers == nil { + return req, nil + } + for k, v := range self.Headers { + req.Header[k] = v + } + return req, nil +} + // HTTPRequestFactory creates an HTTP request // and applies a list of decorators on the request. type HTTPRequestFactory struct { From 2191419f4cb5c452b02102a37d154fee6ca536e3 Mon Sep 17 00:00:00 2001 From: Kawsar Saiyeed Date: Thu, 22 Aug 2013 23:12:28 +0100 Subject: [PATCH 027/215] Removed duplicate mercurial install command --- Dockerfile | 2 -- 1 file changed, 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 08019070b3..e34261fe1e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -28,8 +28,6 @@ run PKG=github.com/kr/pty REV=27435c699; git clone http://$PKG /go/src/$PKG && run PKG=github.com/gorilla/context/ REV=708054d61e5; git clone http://$PKG /go/src/$PKG && cd /go/src/$PKG && git checkout -f $REV run PKG=github.com/gorilla/mux/ REV=9b36453141c; git clone http://$PKG /go/src/$PKG && cd /go/src/$PKG && git checkout -f $REV run PKG=github.com/dotcloud/tar/ REV=d06045a6d9; git clone http://$PKG /go/src/$PKG && cd /go/src/$PKG && git checkout -f $REV -# Docker requires code.google.com/p/go.net/websocket -run apt-get install -y -q mercurial run PKG=code.google.com/p/go.net/ REV=84a4013f96e0; hg clone http://$PKG /go/src/$PKG && cd /go/src/$PKG && hg checkout $REV # Upload docker source add . /go/src/github.com/dotcloud/docker From 1c6af604e824d8fa2896c4906f05a0a3729c8e52 Mon Sep 17 00:00:00 2001 From: shin- Date: Fri, 23 Aug 2013 04:32:09 +0200 Subject: [PATCH 028/215] Fixed: ImagePull in runtime test --- runtime_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runtime_test.go b/runtime_test.go index 8819df2221..83ada6dd21 100644 --- a/runtime_test.go +++ b/runtime_test.go @@ -101,7 +101,7 @@ func init() { // If the unit test is not found, try to download it. if img, err := globalRuntime.repositories.LookupImage(unitTestImageName); err != nil || img.ID != unitTestImageID { // Retrieve the Image - if err := srv.ImagePull(unitTestImageName, "", os.Stdout, utils.NewStreamFormatter(false), nil, true); err != nil { + if err := srv.ImagePull(unitTestImageName, "", os.Stdout, utils.NewStreamFormatter(false), nil, nil, true); err != nil { panic(err) } } From 3396a183c61b66dd60458f67049a50b393e760f8 Mon Sep 17 00:00:00 2001 From: Abhiraj Butala Date: Fri, 23 Aug 2013 01:28:58 -0700 Subject: [PATCH 029/215] Update docker_remote_api.rst --- docs/sources/api/docker_remote_api.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/sources/api/docker_remote_api.rst b/docs/sources/api/docker_remote_api.rst index 17fe3b82e3..82db83d507 100644 --- a/docs/sources/api/docker_remote_api.rst +++ b/docs/sources/api/docker_remote_api.rst @@ -165,7 +165,7 @@ Initial version Docker Remote API Client Libraries ================================== -These libraries have been not tested by the Docker Maintainers for +These libraries have not been tested by the Docker Maintainers for compatibility. Please file issues with the library owners. If you find more library implementations, please list them in Docker doc bugs and we will add the libraries here. From 72cfa3de3584d8cade530360e0e5997a06981e7a Mon Sep 17 00:00:00 2001 From: unclejack Date: Fri, 23 Aug 2013 19:13:30 +0300 Subject: [PATCH 030/215] use libffi-dev, don't build it from sources --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index e34261fe1e..8694f07c37 100644 --- a/Dockerfile +++ b/Dockerfile @@ -15,7 +15,7 @@ env GOPATH /go env CGO_ENABLED 0 run cd /tmp && echo 'package main' > t.go && go test -a -i -v # Ubuntu stuff -run apt-get install -y -q ruby1.9.3 rubygems +run apt-get install -y -q ruby1.9.3 rubygems libffi-dev run gem install fpm run apt-get install -y -q reprepro dpkg-sig # Install s3cmd 1.0.1 (earlier versions don't support env variables in the config) From d1ad0e278d67baad46168f6d04a56550a287d4a7 Mon Sep 17 00:00:00 2001 From: unclejack Date: Fri, 23 Aug 2013 18:59:11 +0300 Subject: [PATCH 031/215] return error if at least one container fails to start This makes docker start exit with exit code 1 if at least one container didn't start. This also prints an error at the end. --- commands.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/commands.go b/commands.go index b38069f075..21531231af 100644 --- a/commands.go +++ b/commands.go @@ -584,15 +584,17 @@ func (cli *DockerCli) CmdStart(args ...string) error { return nil } + var encounteredError error for _, name := range args { _, _, err := cli.call("POST", "/containers/"+name+"/start", nil) if err != nil { fmt.Fprintf(cli.err, "%s\n", err) + encounteredError = fmt.Errorf("Error: failed to start one or more containers") } else { fmt.Fprintf(cli.out, "%s\n", name) } } - return nil + return encounteredError } func (cli *DockerCli) CmdInspect(args ...string) error { From f753dfe6b3d3a8e4d770ae73e947e2fe339df536 Mon Sep 17 00:00:00 2001 From: Thatcher Peskens Date: Fri, 23 Aug 2013 10:41:53 -0700 Subject: [PATCH 032/215] Updated the docs to reflect we no longer use Launchpad and host our own repository. --- docs/sources/installation/ubuntulinux.rst | 36 ++++++++--------------- 1 file changed, 13 insertions(+), 23 deletions(-) diff --git a/docs/sources/installation/ubuntulinux.rst b/docs/sources/installation/ubuntulinux.rst index 587c8fe31b..5a41f7cd40 100644 --- a/docs/sources/installation/ubuntulinux.rst +++ b/docs/sources/installation/ubuntulinux.rst @@ -35,8 +35,8 @@ Dependencies **Linux kernel 3.8** Due to a bug in LXC, docker works best on the 3.8 kernel. Precise -comes with a 3.2 kernel, so we need to upgrade it. The kernel we -install comes with AUFS built in. We also include the generic headers +comes with a 3.2 kernel, so we need to upgrade it. The kernel you'll install when following these steps +comes with AUFS built in. We also include the generic headers to enable packages that depend on them, like ZFS and the VirtualBox guest additions. If you didn't install the headers for your "precise" kernel, then you can skip these headers for the "raring" kernel. But @@ -56,14 +56,15 @@ it is safer to include them if you're not sure. Installation ------------ -Docker is available as a Ubuntu PPA (Personal Package Archive), -`hosted on launchpad `_ -which makes installing Docker on Ubuntu very easy. +Docker is available as a Debian package, which makes installation easy. + +*Please note that these instructions have changed for 0.6. If you are upgrading from an earlier version, you will need +to follow them again.* .. code-block:: bash - # Add the PPA sources to your apt sources list. - sudo apt-get install python-software-properties && sudo add-apt-repository ppa:dotcloud/lxc-docker + # Add the Docker repository to your apt sources list. + sudo sh -c "echo deb https://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list" # Update your sources sudo apt-get update @@ -101,30 +102,19 @@ have AUFS filesystem support enabled, so we need to install it. sudo apt-get update sudo apt-get install linux-image-extra-`uname -r` -**add-apt-repository support** - -Some installations of Ubuntu 13.04 require ``software-properties-common`` to be -installed before being able to use add-apt-repository. - -.. code-block:: bash - - sudo apt-get install software-properties-common - Installation ------------ -Docker is available as a Ubuntu PPA (Personal Package Archive), -`hosted on launchpad `_ -which makes installing Docker on Ubuntu very easy. +Docker is available as a Debian package, which makes installation easy. - -Add the custom package sources to your apt sources list. +*Please note that these instructions have changed for 0.6. If you are upgrading from an earlier version, you will need +to follow them again.* .. code-block:: bash - # add the sources to your apt - sudo add-apt-repository ppa:dotcloud/lxc-docker + # Add the Docker repository to your apt sources list. + sudo sh -c "echo deb https://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list" # update sudo apt-get update From 091fb892948abee1ad5451ee6c9d7dd540d88780 Mon Sep 17 00:00:00 2001 From: Thatcher Peskens Date: Fri, 23 Aug 2013 11:45:52 -0700 Subject: [PATCH 033/215] Added line on top of ubuntulinux announcing change in 0.6 Added lines on top of vagrant installs --- docs/sources/installation/ubuntulinux.rst | 5 ++++- docs/sources/installation/vagrant.rst | 2 ++ docs/sources/installation/windows.rst | 2 ++ 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/docs/sources/installation/ubuntulinux.rst b/docs/sources/installation/ubuntulinux.rst index 5a41f7cd40..916af225e1 100644 --- a/docs/sources/installation/ubuntulinux.rst +++ b/docs/sources/installation/ubuntulinux.rst @@ -4,10 +4,13 @@ .. _ubuntu_linux: +**These instructions have changed for 0.6. If you are upgrading from an earlier version, you will need to follow them again.** + Ubuntu Linux ============ - **Please note this project is currently under heavy development. It should not be used in production.** + **Please note this project is currently under heavy development. It should not be used in production.** + Right now, the officially supported distribution are: diff --git a/docs/sources/installation/vagrant.rst b/docs/sources/installation/vagrant.rst index 24a1e91354..4ae907ff93 100644 --- a/docs/sources/installation/vagrant.rst +++ b/docs/sources/installation/vagrant.rst @@ -4,6 +4,8 @@ .. _install_using_vagrant: +**Vagrant installation is temporarily out of date, it will be updated for 0.6 soon.** + Using Vagrant (Mac, Linux) ========================== diff --git a/docs/sources/installation/windows.rst b/docs/sources/installation/windows.rst index 7830106020..2c3a2cd722 100644 --- a/docs/sources/installation/windows.rst +++ b/docs/sources/installation/windows.rst @@ -4,6 +4,8 @@ .. _windows: +**Vagrant installation is temporarily out of date, it will be updated for 0.6 soon.** + Using Vagrant (Windows) ======================= From ebb9b5e85be296fd73f4d64e61dfc87fe0c3ae72 Mon Sep 17 00:00:00 2001 From: Thatcher Peskens Date: Fri, 23 Aug 2013 12:56:03 -0700 Subject: [PATCH 034/215] Added adding the gpg key --- docs/sources/installation/ubuntulinux.rst | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/sources/installation/ubuntulinux.rst b/docs/sources/installation/ubuntulinux.rst index 916af225e1..338ecd64da 100644 --- a/docs/sources/installation/ubuntulinux.rst +++ b/docs/sources/installation/ubuntulinux.rst @@ -66,6 +66,9 @@ to follow them again.* .. code-block:: bash + # Add the Docker repository key to your local keychain + sudo sh -c "curl http://get.docker.io/gpg | apt-key add -" + # Add the Docker repository to your apt sources list. sudo sh -c "echo deb https://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list" @@ -116,6 +119,9 @@ to follow them again.* .. code-block:: bash + # Add the Docker repository key to your local keychain + sudo sh -c "curl http://get.docker.io/gpg | apt-key add -" + # Add the Docker repository to your apt sources list. sudo sh -c "echo deb https://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list" From ab882da03b57037885c4222f474fa8bd37a01956 Mon Sep 17 00:00:00 2001 From: Mohit Soni Date: Fri, 23 Aug 2013 14:37:37 -0700 Subject: [PATCH 035/215] Fixes #1643 Changed the split statement, from SplitN to Split. Doing so takes care of cases, when a minor version is followed by a suffix, that starts with '.'. --- utils/utils.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils/utils.go b/utils/utils.go index 6a5beb8e48..69d300e282 100644 --- a/utils/utils.go +++ b/utils/utils.go @@ -537,7 +537,7 @@ func GetKernelVersion() (*KernelVersionInfo, error) { release = release[:bytes.IndexByte(release, 0)] tmp := strings.SplitN(string(release), "-", 2) - tmp2 := strings.SplitN(tmp[0], ".", 3) + tmp2 := strings.Split(tmp[0], ".") if len(tmp2) > 0 { kernel, err = strconv.Atoi(tmp2[0]) From 3d9b4379a5b84e52a04b31129f87fd0eef3cf54d Mon Sep 17 00:00:00 2001 From: Michael Crosby Date: Fri, 23 Aug 2013 20:01:08 +0000 Subject: [PATCH 036/215] Use correct upstart script with new build tool --- hack/release/make.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/hack/release/make.sh b/hack/release/make.sh index a9395832bf..7792297861 100755 --- a/hack/release/make.sh +++ b/hack/release/make.sh @@ -57,7 +57,9 @@ stop on runlevel [!2345] respawn -exec docker -d +script + /usr/bin/docker -d +end script ' # Each "bundle" is a different type of build artefact: static binary, Ubuntu From f4432d50c388c242bba6b697f31b32f1fe21ff65 Mon Sep 17 00:00:00 2001 From: Mohit Soni Date: Sat, 24 Aug 2013 00:24:40 -0700 Subject: [PATCH 037/215] Refactored code and added unit tests - Extracted ParseRelease method from GetKernelVersion to make code more testable - Added tests for ParseRelease method --- utils/utils.go | 16 ++++++++++++---- utils/utils_test.go | 18 ++++++++++++++++++ 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/utils/utils.go b/utils/utils.go index 69d300e282..441f71a126 100644 --- a/utils/utils.go +++ b/utils/utils.go @@ -515,9 +515,7 @@ func FindCgroupMountpoint(cgroupType string) (string, error) { func GetKernelVersion() (*KernelVersionInfo, error) { var ( - flavor string - kernel, major, minor int - err error + err error ) uts, err := uname() @@ -536,7 +534,17 @@ func GetKernelVersion() (*KernelVersionInfo, error) { // Remove the \x00 from the release for Atoi to parse correctly release = release[:bytes.IndexByte(release, 0)] - tmp := strings.SplitN(string(release), "-", 2) + return ParseRelease(string(release)) +} + +func ParseRelease(release string) (*KernelVersionInfo, error) { + var ( + flavor string + kernel, major, minor int + err error + ) + + tmp := strings.SplitN(release, "-", 2) tmp2 := strings.Split(tmp[0], ".") if len(tmp2) > 0 { diff --git a/utils/utils_test.go b/utils/utils_test.go index 1030b2902a..20a5820dd5 100644 --- a/utils/utils_test.go +++ b/utils/utils_test.go @@ -337,3 +337,21 @@ search dotcloud.net`: true, } } } + +func assertParseRelease(t *testing.T, release string, b *KernelVersionInfo, result int) { + var ( + a *KernelVersionInfo + ) + a, _ = ParseRelease(release) + + if r := CompareKernelVersion(a, b); r != result { + t.Fatalf("Unexpected kernel version comparison result. Found %d, expected %d", r, result) + } +} + +func TestParseRelease(t *testing.T) { + assertParseRelease(t, "3.8.0", &KernelVersionInfo{Kernel: 3, Major: 8, Minor: 0}, 0) + assertParseRelease(t, "3.4.54.longterm-1", &KernelVersionInfo{Kernel: 3, Major: 4, Minor: 54}, 0) + assertParseRelease(t, "3.4.54.longterm-1", &KernelVersionInfo{Kernel: 3, Major: 4, Minor: 54, Flavor: "1"}, 0) + assertParseRelease(t, "3.8.0-19-generic", &KernelVersionInfo{Kernel: 3, Major: 8, Minor: 0, Flavor: "19-generic"}, 0) +} From 1f85ed6825c07a9c2a86f995b2db484953ee1e6e Mon Sep 17 00:00:00 2001 From: Kawsar Saiyeed Date: Sat, 24 Aug 2013 16:49:55 +0100 Subject: [PATCH 038/215] Update Vagrantfile to use docker apt repository --- Vagrantfile | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/Vagrantfile b/Vagrantfile index 18aa5b5afb..4cee3a04d0 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -17,11 +17,12 @@ Vagrant::Config.run do |config| # Provision docker and new kernel if deployment was not done if Dir.glob("#{File.dirname(__FILE__)}/.vagrant/machines/default/*/id").empty? # Add lxc-docker package - pkg_cmd = "apt-get update -qq; apt-get install -q -y python-software-properties; " \ - "add-apt-repository -y ppa:dotcloud/lxc-docker; apt-get update -qq; " \ - "apt-get install -q -y lxc-docker; " + pkg_cmd = "wget -q -O - http://get.docker.io/gpg | apt-key add -;" \ + "echo deb https://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list;" \ + "apt-get update -qq; apt-get install -q -y --force-yes lxc-docker; " # Add X.org Ubuntu backported 3.8 kernel - pkg_cmd << "add-apt-repository -y ppa:ubuntu-x-swat/r-lts-backport; " \ + pkg_cmd << "apt-get update -qq; apt-get install -q -y python-software-properties; " \ + "add-apt-repository -y ppa:ubuntu-x-swat/r-lts-backport; " \ "apt-get update -qq; apt-get install -q -y linux-image-3.8.0-19-generic; " # Add guest additions if local vbox VM is_vbox = true From 02d1d238cdde7b865879de1fc3f47acacfea0e82 Mon Sep 17 00:00:00 2001 From: Kawsar Saiyeed Date: Sat, 24 Aug 2013 18:04:40 +0100 Subject: [PATCH 039/215] Add latest docker options to docker.bash Adds bash completion options for the latest docker release (0.6.1) --- contrib/docker.bash | 138 ++++++++++++++++++++++++++++++++++---------- 1 file changed, 107 insertions(+), 31 deletions(-) diff --git a/contrib/docker.bash b/contrib/docker.bash index 6719ef6a92..32f2b5f8f1 100644 --- a/contrib/docker.bash +++ b/contrib/docker.bash @@ -115,7 +115,7 @@ _docker_build() case "$cur" in -*) - COMPREPLY=( $( compgen -W "-t -q" -- "$cur" ) ) + COMPREPLY=( $( compgen -W "-no-cache -t -q" -- "$cur" ) ) ;; *) _filedir @@ -138,11 +138,37 @@ _docker_commit() COMPREPLY=( $( compgen -W "-author -m -run" -- "$cur" ) ) ;; *) - __docker_containers_all + local counter=$cpos + while [ $counter -le $cword ]; do + case "${words[$counter]}" in + -author|-m|-run) + (( counter++ )) + ;; + -*) + ;; + *) + break + ;; + esac + (( counter++ )) + done + + if [ $counter -eq $cword ]; then + __docker_containers_all + fi ;; esac } +_docker_cp() +{ + if [ $cpos -eq $cword ]; then + __docker_containers_all + else + _filedir + fi +} + _docker_diff() { if [ $cpos -eq $cword ]; then @@ -152,7 +178,21 @@ _docker_diff() _docker_events() { - COMPREPLY=( $( compgen -W "-since" -- "$cur" ) ) + case "$prev" in + -since) + return + ;; + *) + ;; + esac + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "-since" -- "$cur" ) ) + ;; + *) + ;; + esac } _docker_export() @@ -231,7 +271,21 @@ _docker_kill() _docker_login() { - COMPREPLY=( $( compgen -W "-e -p -u" -- "$cur" ) ) + case "$prev" in + -e|-p|-u) + return + ;; + *) + ;; + esac + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "-e -p -u" -- "$cur" ) ) + ;; + *) + ;; + esac } _docker_logs() @@ -250,12 +304,40 @@ _docker_port() _docker_ps() { - COMPREPLY=( $( compgen -W "-a -beforeId -l -n -notrunc -q -s -sinceId" -- "$cur" ) ) + case "$prev" in + -beforeId|-n|-sinceId) + return + ;; + *) + ;; + esac + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "-a -beforeId -l -n -notrunc -q -s -sinceId" -- "$cur" ) ) + ;; + *) + ;; + esac } _docker_pull() { - COMPREPLY=( $( compgen -W "-t" -- "$cur" ) ) + case "$prev" in + -t) + return + ;; + *) + ;; + esac + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "-t" -- "$cur" ) ) + ;; + *) + ;; + esac } _docker_push() @@ -309,7 +391,7 @@ _docker_run() -volumes-from) __docker_containers_all ;; - -a|-c|-dns|-e|-entrypoint|-h|-m|-p|-u|-v) + -a|-c|-dns|-e|-entrypoint|-h|-lxc-conf|-m|-p|-u|-v|-w) return ;; *) @@ -318,34 +400,27 @@ _docker_run() case "$cur" in -*) - COMPREPLY=( $( compgen -W "-a -c -cidfile -d -dns -e -entrypoint -h -i -m -n -p -t -u -v -volumes-from" -- "$cur" ) ) + COMPREPLY=( $( compgen -W "-a -c -cidfile -d -dns -e -entrypoint -h -i -lxc-conf -m -n -p -privileged -t -u -v -volumes-from -w" -- "$cur" ) ) ;; *) - case "$cur" in - -*) - COMPREPLY=( $( compgen -W "-a -notrunc -q -viz" -- "$cur" ) ) - ;; - *) - local counter=$cpos - while [ $counter -le $cword ]; do - case "${words[$counter]}" in - -a|-c|-cidfile|-dns|-e|-entrypoint|-h|-m|-p|-u|-v|-volumes-from) - (( counter++ )) - ;; - -*) - ;; - *) - break - ;; - esac + local counter=$cpos + while [ $counter -le $cword ]; do + case "${words[$counter]}" in + -a|-c|-cidfile|-dns|-e|-entrypoint|-h|-lxc-conf|-m|-p|-u|-v|-volumes-from|-w) (( counter++ )) - done + ;; + -*) + ;; + *) + break + ;; + esac + (( counter++ )) + done - if [ $counter -eq $cword ]; then - __docker_image_repos_and_tags - fi - ;; - esac + if [ $counter -eq $cword ]; then + __docker_image_repos_and_tags + fi ;; esac } @@ -409,6 +484,7 @@ _docker() attach build commit + cp diff events export From 465d5313c50007460306a17be16f38dfd657b0a4 Mon Sep 17 00:00:00 2001 From: James Carr Date: Sat, 24 Aug 2013 10:26:54 -0700 Subject: [PATCH 040/215] Update for new mailing list --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 7d90e28ca8..d5438c3eae 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -23,7 +23,7 @@ that feature *on top of* docker. ### Discuss your design on the mailing list We recommend discussing your plans [on the mailing -list](https://groups.google.com/forum/?fromgroups#!forum/docker-club) +list](https://groups.google.com/forum/?fromgroups#!forum/docker-dev) before starting to code - especially for more ambitious contributions. This gives other contributors a chance to point you in the right direction, give feedback on your design, and maybe point out if someone From d8a18ea3ae96ab415885fc1554db168d94d64265 Mon Sep 17 00:00:00 2001 From: Kawsar Saiyeed Date: Sun, 25 Aug 2013 00:28:36 +0100 Subject: [PATCH 041/215] Display error if resource not specified Display an error message if a container resource is not supplied to 'docker cp'. Fixes error in #1661 --- commands.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/commands.go b/commands.go index b38069f075..3324d75754 100644 --- a/commands.go +++ b/commands.go @@ -1532,6 +1532,10 @@ func (cli *DockerCli) CmdCp(args ...string) error { var copyData APICopy info := strings.Split(cmd.Arg(0), ":") + if len(info) != 2 { + return fmt.Errorf("Error: Resource not specified") + } + copyData.Resource = info[1] copyData.HostPath = cmd.Arg(1) From f83d556bc0dec17af72bf3644fefdf0f232e206f Mon Sep 17 00:00:00 2001 From: Solomon Hykes Date: Sat, 24 Aug 2013 17:16:52 -0700 Subject: [PATCH 042/215] Make Kawsar Saiyeed @KSid the maintainer for contributed tools --- contrib/MAINTAINERS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib/MAINTAINERS b/contrib/MAINTAINERS index 0b7931f907..2531745dc6 100644 --- a/contrib/MAINTAINERS +++ b/contrib/MAINTAINERS @@ -1 +1 @@ -# Maintainer wanted! Enroll on #docker@freenode +Kawsar Saiyeed From 4440bde0ebffcb31025fd9f3db8e4275b77332b1 Mon Sep 17 00:00:00 2001 From: Tobias Schwab Date: Mon, 26 Aug 2013 11:45:15 +0200 Subject: [PATCH 043/215] Change fetching of gpg key from http to https Or was there any reason to fetch using http? --- docs/sources/installation/ubuntulinux.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/sources/installation/ubuntulinux.rst b/docs/sources/installation/ubuntulinux.rst index 80df4fab5e..02bdd09718 100644 --- a/docs/sources/installation/ubuntulinux.rst +++ b/docs/sources/installation/ubuntulinux.rst @@ -67,7 +67,7 @@ to follow them again.* .. code-block:: bash # Add the Docker repository key to your local keychain - sudo sh -c "curl http://get.docker.io/gpg | apt-key add -" + sudo sh -c "curl https://get.docker.io/gpg | apt-key add -" # Add the Docker repository to your apt sources list. sudo sh -c "echo deb https://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list" From 843ef645d2c76275e484e3fd5262b947d5611d59 Mon Sep 17 00:00:00 2001 From: kim0 Date: Mon, 26 Aug 2013 12:54:15 +0300 Subject: [PATCH 044/215] Don't force a non-existent npm version, use latest from epel Not the smartest thing to do --- docs/sources/examples/nodejs_web_app.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/sources/examples/nodejs_web_app.rst b/docs/sources/examples/nodejs_web_app.rst index cb580c43d9..67584d1794 100644 --- a/docs/sources/examples/nodejs_web_app.rst +++ b/docs/sources/examples/nodejs_web_app.rst @@ -93,7 +93,7 @@ To install the right package for CentOS, we’ll use the instructions from the # Enable EPEL for Node.js RUN rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm # Install Node.js and npm - RUN yum install -y npm-1.2.17-5.el6 + RUN yum install -y npm To bundle your app’s source code inside the docker image, use the ``ADD`` command: @@ -137,7 +137,7 @@ Your ``Dockerfile`` should now look like this: # Enable EPEL for Node.js RUN rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm # Install Node.js and npm - RUN yum install -y npm-1.2.17-5.el6 + RUN yum install -y npm # Bundle app source ADD . /src From 1adbadde80a9ce657d29e1b2163509007c8c3554 Mon Sep 17 00:00:00 2001 From: jbbarth Date: Mon, 26 Aug 2013 16:39:38 +0200 Subject: [PATCH 045/215] Add mercurial to the list of packages needed in a dev environment The dev environment setup procedure fails if mercurial is not installed on the machine, it cannot download stuff from http://code.google.com/p/go.net for instance. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2b3628375a..671c24109b 100644 --- a/README.md +++ b/README.md @@ -329,7 +329,7 @@ Setting up a dev environment Instructions that have been verified to work on Ubuntu 12.10, ```bash -sudo apt-get -y install lxc curl xz-utils golang git +sudo apt-get -y install lxc curl xz-utils golang git mercurial export GOPATH=~/go/ export PATH=$GOPATH/bin:$PATH From 331f983593a527f04046c2d6131847adcdf95e3e Mon Sep 17 00:00:00 2001 From: Greg Thornton Date: Mon, 26 Aug 2013 09:43:49 -0500 Subject: [PATCH 046/215] Start docker after lxc-net to prevent ip forwarding race --- packaging/ubuntu/docker.upstart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/ubuntu/docker.upstart b/packaging/ubuntu/docker.upstart index 143be03402..2370cb5553 100644 --- a/packaging/ubuntu/docker.upstart +++ b/packaging/ubuntu/docker.upstart @@ -1,6 +1,6 @@ description "Run docker" -start on filesystem or runlevel [2345] +start on filesystem and started lxc-net stop on runlevel [!2345] respawn From 076434ef10ebf940bb822c423056fcc4417b4a28 Mon Sep 17 00:00:00 2001 From: Solomon Hykes Date: Mon, 26 Aug 2013 12:06:56 -0700 Subject: [PATCH 047/215] Remove incorrect build instructions --- README.md | 23 ----------------------- 1 file changed, 23 deletions(-) diff --git a/README.md b/README.md index 2b3628375a..ddf3f4d805 100644 --- a/README.md +++ b/README.md @@ -163,29 +163,6 @@ supported. * [Windows (with Vagrant)](http://docs.docker.io/en/latest/installation/windows/) * [Amazon EC2 (with Vagrant)](http://docs.docker.io/en/latest/installation/amazon/) -Installing from source ----------------------- - -1. Install Dependencies - * [Go language 1.1.x](http://golang.org/doc/install) - * [git](http://git-scm.com) - * [lxc](http://lxc.sourceforge.net) - * [aufs-tools](http://aufs.sourceforge.net) - -2. Checkout the source code - - ```bash - git clone http://github.com/dotcloud/docker - ``` - -3. Build the ``docker`` binary - - ```bash - cd docker - make VERBOSE=1 - sudo cp ./bin/docker /usr/local/bin/docker - ``` - Usage examples ============== From f352ec945fbc34eafdde04dff7ced995c9e3a409 Mon Sep 17 00:00:00 2001 From: Tyler Brock Date: Mon, 26 Aug 2013 17:55:21 -0400 Subject: [PATCH 048/215] ENTRYPOINT fixups --- docs/sources/examples/mongodb.rst | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/docs/sources/examples/mongodb.rst b/docs/sources/examples/mongodb.rst index c8b46c2544..0d0f205cc8 100644 --- a/docs/sources/examples/mongodb.rst +++ b/docs/sources/examples/mongodb.rst @@ -66,13 +66,12 @@ run without needing to provide a special configuration file) RUN mkdir -p /data/db Finally, we'll expose the standard port that MongoDB runs on (27107) as well as -add an entrypoint that runs the standard --help command by default. +define an ENTRYPOINT for the container. .. code-block:: bash EXPOSE 27017 - ENTRYPOINT [ "/usr/bin/mongod" ] - CMD [ "--help" ] + ENTRYPOINT ["usr/bin/mongod"] Now, lets build the image which will go through the ``Dockerfile`` we made and run all of the commands. @@ -87,10 +86,10 @@ the local port! .. code-block:: bash # Regular style - MONGO_ID=$(docker run -d /mongodb mongod) + MONGO_ID=$(docker run -d /mongodb) # Lean and mean - MONGO_ID=$(docker run -d /mongodb mongod --noprealloc --smallfiles) + MONGO_ID=$(docker run -d /mongodb --noprealloc --smallfiles) # Check the logs out docker logs $MONGO_ID From d80b50d4b4759665b93e713b99239aba9893416e Mon Sep 17 00:00:00 2001 From: jbbarth Date: Mon, 26 Aug 2013 17:45:52 +0200 Subject: [PATCH 049/215] Improve formatting with 'go fmt' as stated in CONTRIBUTING.md As 'go fmt' doesn't support verifying files in multiple directories, it's probably a good idea to run it on all '*.go' files from time to time with something like this: find . -name "*.go" | xargs dirname | sort -u | xargs -n 1 echo go fmt --- commands.go | 2 +- commands_test.go | 1 - docker/docker.go | 2 +- sysinit.go | 3 +-- 4 files changed, 3 insertions(+), 5 deletions(-) diff --git a/commands.go b/commands.go index 236fb65d10..41e20158b8 100644 --- a/commands.go +++ b/commands.go @@ -30,7 +30,7 @@ import ( var ( GITCOMMIT string - VERSION string + VERSION string ) func (cli *DockerCli) getMethod(name string) (reflect.Method, bool) { diff --git a/commands_test.go b/commands_test.go index 25e4804361..2946da8792 100644 --- a/commands_test.go +++ b/commands_test.go @@ -152,7 +152,6 @@ func TestRunWorkdirExists(t *testing.T) { } - func TestRunExit(t *testing.T) { stdin, stdinPipe := io.Pipe() stdout, stdoutPipe := io.Pipe() diff --git a/docker/docker.go b/docker/docker.go index 6ac0c9379d..9bbd40b696 100644 --- a/docker/docker.go +++ b/docker/docker.go @@ -16,7 +16,7 @@ import ( var ( GITCOMMIT string - VERSION string + VERSION string ) func main() { diff --git a/sysinit.go b/sysinit.go index aa5d2b2a17..34f1cbdac6 100644 --- a/sysinit.go +++ b/sysinit.go @@ -27,10 +27,9 @@ func setupWorkingDirectory(workdir string) { if workdir == "" { return } - syscall.Chdir(workdir) + syscall.Chdir(workdir) } - // Takes care of dropping privileges to the desired user func changeUser(u string) { if u == "" { From f861c493bf4d391f1721f536e86da4fa007fb7f0 Mon Sep 17 00:00:00 2001 From: Daniel Mizyrycki Date: Tue, 27 Aug 2013 11:19:32 -0700 Subject: [PATCH 050/215] Troubleshooting windows installation section --- .../installation/images/win/hp_bios_vm.JPG | Bin 0 -> 38670 bytes .../installation/images/win/ts_go_bios.JPG | Bin 0 -> 60567 bytes .../installation/images/win/ts_no_docker.JPG | Bin 0 -> 23470 bytes docs/sources/installation/windows.rst | 26 ++++++++++++++++++ 4 files changed, 26 insertions(+) create mode 100644 docs/sources/installation/images/win/hp_bios_vm.JPG create mode 100644 docs/sources/installation/images/win/ts_go_bios.JPG create mode 100644 docs/sources/installation/images/win/ts_no_docker.JPG diff --git a/docs/sources/installation/images/win/hp_bios_vm.JPG b/docs/sources/installation/images/win/hp_bios_vm.JPG new file mode 100644 index 0000000000000000000000000000000000000000..b44cabeac1c6e745e66f24f4444cc2ce680a8465 GIT binary patch literal 38670 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

UA$%G!Y%dgv2TUpdv&qLW|y^2D3!eO;CY9YYkX_ zxE(!a>AcvEu+ks7sqYxUr=;cHZjapD?Z9wu`a?whWBbQR`a@Xg!%s$izwmA84NmaX zoT02^^&ixBn=#d!$8ONno3QiVI-U48C)_oAaN2W*rws($hNRHXxuKdS?B&{R9itsl Kj;v#+tpC|gh2>iS literal 0 HcmV?d00001 diff --git a/docs/sources/installation/images/win/ts_go_bios.JPG b/docs/sources/installation/images/win/ts_go_bios.JPG new file mode 100644 index 0000000000000000000000000000000000000000..05f2310ad3544563393759d3b247757208fee320 GIT binary patch literal 60567 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 literal 0 HcmV?d00001 diff --git a/docs/sources/installation/windows.rst b/docs/sources/installation/windows.rst index 2c3a2cd722..65a4a35b32 100644 --- a/docs/sources/installation/windows.rst +++ b/docs/sources/installation/windows.rst @@ -49,6 +49,8 @@ This should open a cmd prompt window. Alternatively, you can also use a Cygwin terminal, or Git Bash (or any other command line program you are usually using). The next steps would be the same. +.. _launch_ubuntu: + Launch an Ubuntu virtual server ------------------------------- @@ -168,3 +170,27 @@ You are now ready for the docker’s “hello world” example. Run All done! Now you can continue with the :ref:`hello_world` example. + +Troubleshooting +--------------- + +VM does not boot +```````````````` + +.. image:: images/win/ts_go_bios.JPG + +If you run into this error message "The VM failed to remain in the 'running' +state while attempting to boot", please check that your computer has virtualization +technology available and activated by going to the BIOS. Here's an example for an HP +computer (System configuration / Device configuration) + +.. image:: images/win/hp_bios_vm.JPG + + +Docker is not installed +``````````````````````` + +.. image:: images/win/ts_no_docker.JPG + +If you run into this error message "The program 'docker' is currently not installed", +try deleting the docker folder and restart from :ref:`launch_ubuntu` From cc18a9c650305a377150c67e5ed10f1e2f19b685 Mon Sep 17 00:00:00 2001 From: pysqz Date: Wed, 28 Aug 2013 03:14:21 +0800 Subject: [PATCH 051/215] Also reuse forwarding ports --- container.go | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/container.go b/container.go index 0fae60402c..ae96504a9f 100644 --- a/container.go +++ b/container.go @@ -801,10 +801,22 @@ func (container *Container) allocateNetwork() error { } } + var portSpecs []string + if !container.State.Ghost { + portSpecs = container.Config.PortSpecs + } else { + for backend, frontend := range container.NetworkSettings.PortMapping["Tcp"] { + portSpecs = append(portSpecs, fmt.Sprintf("%s:%s/tcp",frontend, backend)) + } + for backend, frontend := range container.NetworkSettings.PortMapping["Udp"] { + portSpecs = append(portSpecs, fmt.Sprintf("%s:%s/udp",frontend, backend)) + } + } + container.NetworkSettings.PortMapping = make(map[string]PortMapping) container.NetworkSettings.PortMapping["Tcp"] = make(PortMapping) container.NetworkSettings.PortMapping["Udp"] = make(PortMapping) - for _, spec := range container.Config.PortSpecs { + for _, spec := range portSpecs { nat, err := iface.AllocatePort(spec) if err != nil { iface.Release() From d593f579528d2555296b535aeae8383f5d2ee9b3 Mon Sep 17 00:00:00 2001 From: daniel-garcia Date: Tue, 27 Aug 2013 14:09:26 -0500 Subject: [PATCH 052/215] write newline after every log message. --- utils/utils.go | 1 + 1 file changed, 1 insertion(+) diff --git a/utils/utils.go b/utils/utils.go index 441f71a126..b26d803230 100644 --- a/utils/utils.go +++ b/utils/utils.go @@ -293,6 +293,7 @@ func (w *WriteBroadcaster) Write(p []byte) (n int, err error) { continue } lp = append(lp, b...) + lp = append(lp, '\n') } } if n, err := sw.wc.Write(lp); err != nil || n != len(lp) { From c627ff6e209ac1f660a49371d4f6bd710470aacb Mon Sep 17 00:00:00 2001 From: Andy Rothfusz Date: Tue, 27 Aug 2013 14:29:49 -0700 Subject: [PATCH 053/215] Fix #1684: Old Welcome is now Introduction. Working with Repos now follows Builder. Clean up some doc build errors. Removed old Manifesto. Tweaked layout javascript to allow direct link from first and last index elements. --- docs/sources/commandline/command/cp.rst | 7 +- docs/sources/concepts/images/lego_docker.jpg | Bin 198407 -> 0 bytes docs/sources/concepts/index.rst | 16 --- docs/sources/concepts/manifesto.rst | 129 ------------------ docs/sources/examples/mongodb.rst | 2 +- docs/sources/index.rst | 8 +- docs/sources/installation/ubuntulinux.rst | 4 +- docs/sources/installation/vagrant.rst | 4 +- docs/sources/installation/windows.rst | 4 +- .../images => static_files}/dockerlogo-h.png | Bin .../images => static_files}/dockerlogo-v.png | Bin docs/sources/toctree.rst | 5 +- docs/sources/use/builder.rst | 24 ++-- docs/sources/use/index.rst | 2 +- docs/sources/use/port_redirection.rst | 2 + docs/sources/use/workingwithrepository.rst | 70 ++++++---- docs/theme/docker/layout.html | 4 +- 17 files changed, 78 insertions(+), 203 deletions(-) delete mode 100644 docs/sources/concepts/images/lego_docker.jpg delete mode 100644 docs/sources/concepts/index.rst delete mode 100644 docs/sources/concepts/manifesto.rst rename docs/sources/{concepts/images => static_files}/dockerlogo-h.png (100%) rename docs/sources/{concepts/images => static_files}/dockerlogo-v.png (100%) diff --git a/docs/sources/commandline/command/cp.rst b/docs/sources/commandline/command/cp.rst index 14b5061ef7..ea84fa1f90 100644 --- a/docs/sources/commandline/command/cp.rst +++ b/docs/sources/commandline/command/cp.rst @@ -2,12 +2,13 @@ :description: Copy files/folders from the containers filesystem to the host path :keywords: cp, docker, container, documentation, copy -=========================================================== +============================================================================ ``cp`` -- Copy files/folders from the containers filesystem to the host path -=========================================================== +============================================================================ :: Usage: docker cp CONTAINER:RESOURCE HOSTPATH - Copy files/folders from the containers filesystem to the host path. Paths are relative to the root of the filesystem. + Copy files/folders from the containers filesystem to the host + path. Paths are relative to the root of the filesystem. diff --git a/docs/sources/concepts/images/lego_docker.jpg b/docs/sources/concepts/images/lego_docker.jpg deleted file mode 100644 index b3039a2cb5cefdd965f5fbc9d31a8676c245fcb3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 198407 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Ξ`&CqPdt~d8Ruz5 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⩔~s5TE`>2dx7? zQH}(gM>Y{@iX1$nUWEFhlr1Hl_eOnmL;@5?cz$_v6hO^pHmES8`Tw$S0bz#Qy&n~K zzCMxplPCDpef~!#aV^jYcd$RH9hZ+QZiLhT`cqnmbEI3jv!tehGaS>RuRC-2#?Aml zL|gLZUj1_C4e?fkm>6t43y7=pdjuzuXZMjC7_<7Q+P5 z^>_n>hx~g#;DTHzLkn=(Qq%r2^+bh=T#`44T z>kKccY>8>}uyd^1C)mL)kuQ(8*8Z$m+4tmvIFmX-+)>`UC=Y|oBJL~p?iRNCi(4KB z4FOXo6G8 z(p@f2JusDVdKGA}hivHNhv%6$`JXY{fg6&zzHaEx443vaOCQc{9S(C9 z?AfUUB%MLCi>3YEuaoG@hd!sv*exX2u81lKE|#pB#a4-caFlJCMc>1CPABeONw%<{ zfB-pJ=`o?PW%)0S1qD`7hjeBg`65KJH&@&RV2$@4 zlBmFt#{(Tv^peO`RfIKhIuN{LDg@9Z-<3y9;cMY8#e{e#CwoOfT;z`9;VD*{`7j|Z zoB;JEpSsHl_R?mQzOP__Oj%o$1A6UQY#G5Hd`w)YOh~EXlhAx**qt_4X;s*BPg5cy zZDuyeH`a0ndB-jlg(48VPsu@t&KExwO)!PT^5vH4@MM7+Lv^hRC=8YHL*=N$^J3!1 za?u93QyQWJ(GeGmusKkjgS4A^2{VtwoxT$nl3up7hNA|FA>m!5L4|zD>&eh`HFGO7 z)2|`IK)$wTK|wk$6^EfgAaf*a=433bTlJ)6Tpc;p6;2eX)!R$rLBPd^#~nHxzX%4H zV=0DC`OPsVM6N-ZA4rtblR4Rq1v52X|HLe&IfBXm&y`pa ze3yQBG>Gv_?p|Xjr9(1)QDhLnFf9|4w-(O~0G`6Z_M!Ky>5AStkulUw^~*2g$ICQj4YIKkB<7AWzJY6!a-r|*;Ed)x{%TjJx|mA zHS>sIYj?HIBfHWBIq(#mabri4tNZu;+0(m~G!1{K9RpZY;4{(@4|2u_7Vz!3P*dji`1@-jyj7fu0+1a;5l68sD`T zS=yHq1NPP2(JdLZ^3p0l9Iea5jB6nUSKGcY!Yv;a>dNaebojJg0=c>J+z!L^C-Z6&jYn`PD$yaXZHC+pAK~mJ-By-VBHP0?UmB%cRN0qkuwE(w7s63+e zj?4j_j@!>L%Nb#v40=N*=J^gvRA~yI!bls}+^sU7sm+K!Biz$IG9NXPd;dPY^D)%P z>nwxeP^?&`&695TzT!Ay-!hFVxJIAPZ)zpYsR}fx_FXsUnA$&5Sf#j4W{6f-sFo79 zUFVbZW>A_F(zRSwZ=~JA`81T)U-&~140!VkJmibs#aNJ`r7JX+N~)i>iEy3`M=F5h zO=Z;%zQW=qMj)(A4+2~U^NwFz85Q(&Wnb!h9d34W26ejI^u%mBQ}%i!CNzf}H{|&1 z>fY&I$BIV;H z^mUGYUkyOr=aKhupZ*D82xb=hhbZ!&$Nz(v;{H>3i)Z~1k7EKU_5!dSt1z2-PdoWO zQ`qAKB{&F*&CUJDkoe{JEt-5@{_BsbiL~=$&+L&sm@wYt7kj5^S$rQy&%az%ANZOK$#U%1I zYepw5)u+Q27M?)6jagu4JKh`Z-1Dh-W7M9a_scHU$AyPBd;)$cWteR@}q1eC{xc5i)FLR zAx*nR48fc3+iDUYw`rn-mIprIJ9)JH)V?5e-;Z{^)NM7t_b!pIg`!jXwcQy0BbdtF zvb}!cjCz?U%&0f9m26Y4dqorK!;a0bG4BIuZJgGX#SiK?KMhb7Rf~*=@Tn}iDmeI2 zH;s{^%JkdSck~5hF}TrMD~w7LPo1&V`nq2{LXX2+mJv9=cn^BVfF@jzBWGpgPZ^Yv z?v(N*IK$u_gb*DT#8R~9hXtJMPc&$4eaikq8AoY9qZkusL6<`rA&KNwWka~

|3Oo)A%#%`$#Pck*N2YtYl0b2^_9>&jg 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 (tag: ``latest``) -available on the `docker index`_: +available on the `docker index `_: .. code-block:: bash diff --git a/docs/sources/index.rst b/docs/sources/index.rst index 8dfffa718b..2800310e5e 100644 --- a/docs/sources/index.rst +++ b/docs/sources/index.rst @@ -1,11 +1,11 @@ -:title: Welcome to the Docker Documentation +:title: Docker Documentation :description: An overview of the Docker Documentation :keywords: containers, lxc, concepts, explanation -Welcome -======= +.. image:: static_files/dockerlogo-h.png -.. image:: concepts/images/dockerlogo-h.png +Introduction +------------ ``docker``, the Linux Container Runtime, runs Unix processes with strong guarantees of isolation across servers. Your software runs diff --git a/docs/sources/installation/ubuntulinux.rst b/docs/sources/installation/ubuntulinux.rst index 02bdd09718..4142a9c373 100644 --- a/docs/sources/installation/ubuntulinux.rst +++ b/docs/sources/installation/ubuntulinux.rst @@ -2,10 +2,10 @@ :description: Please note this project is currently under heavy development. It should not be used in production. :keywords: Docker, Docker documentation, requirements, virtualbox, vagrant, git, ssh, putty, cygwin, linux -.. _ubuntu_linux: - **These instructions have changed for 0.6. If you are upgrading from an earlier version, you will need to follow them again.** +.. _ubuntu_linux: + Ubuntu Linux ============ diff --git a/docs/sources/installation/vagrant.rst b/docs/sources/installation/vagrant.rst index d89e012543..568ec584ec 100644 --- a/docs/sources/installation/vagrant.rst +++ b/docs/sources/installation/vagrant.rst @@ -2,10 +2,10 @@ :description: This guide will setup a new virtualbox virtual machine with docker installed on your computer. :keywords: Docker, Docker documentation, virtualbox, vagrant, git, ssh, putty, cygwin -.. _install_using_vagrant: - **Vagrant installation is temporarily out of date, it will be updated for 0.6 soon.** +.. _install_using_vagrant: + Using Vagrant (Mac, Linux) ========================== diff --git a/docs/sources/installation/windows.rst b/docs/sources/installation/windows.rst index 2c3a2cd722..87e5045e54 100644 --- a/docs/sources/installation/windows.rst +++ b/docs/sources/installation/windows.rst @@ -2,10 +2,10 @@ :description: Docker's tutorial to run docker on Windows :keywords: Docker, Docker documentation, Windows, requirements, virtualbox, vagrant, git, ssh, putty, cygwin -.. _windows: - **Vagrant installation is temporarily out of date, it will be updated for 0.6 soon.** +.. _windows: + Using Vagrant (Windows) ======================= diff --git a/docs/sources/concepts/images/dockerlogo-h.png b/docs/sources/static_files/dockerlogo-h.png similarity index 100% rename from docs/sources/concepts/images/dockerlogo-h.png rename to docs/sources/static_files/dockerlogo-h.png diff --git a/docs/sources/concepts/images/dockerlogo-v.png b/docs/sources/static_files/dockerlogo-v.png similarity index 100% rename from docs/sources/concepts/images/dockerlogo-v.png rename to docs/sources/static_files/dockerlogo-v.png diff --git a/docs/sources/toctree.rst b/docs/sources/toctree.rst index 3c319863e2..647257a0dd 100644 --- a/docs/sources/toctree.rst +++ b/docs/sources/toctree.rst @@ -10,7 +10,7 @@ This documentation has the following resources: .. toctree:: :titlesonly: - concepts/index + Introduction installation/index use/index examples/index @@ -19,6 +19,3 @@ This documentation has the following resources: api/index terms/index faq - - - diff --git a/docs/sources/use/builder.rst b/docs/sources/use/builder.rst index cc85befe72..40ba57b76a 100644 --- a/docs/sources/use/builder.rst +++ b/docs/sources/use/builder.rst @@ -4,13 +4,13 @@ .. _dockerbuilder: -================== -Dockerfile Builder -================== +====================== +Dockerfiles for Images +====================== **Docker can act as a builder** and read instructions from a text -Dockerfile to automate the steps you would otherwise make manually to -create an image. Executing ``docker build`` will run your steps and +``Dockerfile`` to automate the steps you would otherwise take manually +to create an image. Executing ``docker build`` will run your steps and commit them along the way, giving you a final image. .. contents:: Table of Contents @@ -35,6 +35,8 @@ build succeeds: Docker will run your steps one-by-one, committing the result if necessary, before finally outputting the ID of your new image. +When you're done with your build, you're ready to look into :ref:`image_push`. + 2. Format ========= @@ -48,9 +50,9 @@ The Dockerfile format is quite simple: The Instruction is not case-sensitive, however convention is for them to be UPPERCASE in order to distinguish them from arguments more easily. -Docker evaluates the instructions in a Dockerfile in order. **The first -instruction must be `FROM`** in order to specify the base image from -which you are building. +Docker evaluates the instructions in a Dockerfile in order. **The +first instruction must be `FROM`** in order to specify the +:ref:`base_image_def` from which you are building. Docker will ignore **comment lines** *beginning* with ``#``. A comment marker anywhere in the rest of the line will be treated as an argument. @@ -68,7 +70,9 @@ building images. The ``FROM`` instruction sets the :ref:`base_image_def` for subsequent instructions. As such, a valid Dockerfile must have ``FROM`` as its -first instruction. +first instruction. The image can be any valid image -- it is +especially easy to start with an image from the +:ref:`using_public_repositories` ``FROM`` must be the first non-comment instruction in the ``Dockerfile``. @@ -160,7 +164,7 @@ override the default specified in CMD. The ``EXPOSE`` instruction sets ports to be publicly exposed when running the image. This is functionally equivalent to running ``docker commit -run '{"PortSpecs": ["", ""]}'`` outside the -builder. +builder. Take a look at :ref:`port_redirection` for more information. 3.6 ENV ------- diff --git a/docs/sources/use/index.rst b/docs/sources/use/index.rst index 2f74f60718..c5d4a5c697 100644 --- a/docs/sources/use/index.rst +++ b/docs/sources/use/index.rst @@ -13,8 +13,8 @@ Contents: :maxdepth: 1 basics + builder workingwithrepository port_redirection - builder puppet diff --git a/docs/sources/use/port_redirection.rst b/docs/sources/use/port_redirection.rst index e16a27c0eb..b19673af27 100644 --- a/docs/sources/use/port_redirection.rst +++ b/docs/sources/use/port_redirection.rst @@ -3,6 +3,8 @@ :keywords: Usage, basic port, docker, documentation, examples +.. _port_redirection: + Port redirection ================ diff --git a/docs/sources/use/workingwithrepository.rst b/docs/sources/use/workingwithrepository.rst index 1cb4c9aa90..cbb0e073bb 100644 --- a/docs/sources/use/workingwithrepository.rst +++ b/docs/sources/use/workingwithrepository.rst @@ -28,12 +28,18 @@ repositories. You can host your own Registry too! Docker acts as a client for these services via ``docker search, pull, login`` and ``push``. -Top-level, User, and Your Own Repositories ------------------------------------------- +.. _using_public_repositories: + +Public Repositories +------------------- There are two types of public repositories: *top-level* repositories which are controlled by the Docker team, and *user* repositories -created by individual contributors. +created by individual contributors. Anyone can read from these +repositories -- they really help people get started quickly! You could +also use :ref:`using_private_repositories` if you need to keep control +of who accesses your images, but we will only refer to public +repositories in these examples. * Top-level repositories can easily be recognized by **not** having a ``/`` (slash) in their name. These repositories can generally be @@ -46,28 +52,6 @@ created by individual contributors. * User images are not checked, it is therefore up to you whether or not you trust the creator of this image. -Right now (version 0.5), private repositories are only possible by -hosting `your own registry -`_. To push or pull to a -repository on your own registry, you must prefix the tag with the -address of the registry's host, like this: - -.. code-block:: bash - - # Tag to create a repository with the full registry location. - # The location (e.g. localhost.localdomain:5000) becomes - # a permanent part of the repository name - sudo docker tag 0u812deadbeef localhost.localdomain:5000/repo_name - - # Push the new repository to its home location on localhost - sudo docker push localhost.localdomain:5000/repo_name - -Once a repository has your registry's host name as part of the tag, -you can push and pull it like any other repository, but it will -**not** be searchable (or indexed at all) in the Central Index, and -there will be no user name checking performed. Your registry will -function completely independently from the Central Index. - Find public images available on the Central Index ------------------------------------------------- @@ -105,6 +89,7 @@ If your username does not exist it will prompt you to also enter a password and your e-mail address. It will then automatically log you in. +.. _container_commit: Committing a container to a named image --------------------------------------- @@ -117,16 +102,45 @@ your container to an image within your username namespace. # for example docker commit $CONTAINER_ID dhrp/kickassapp sudo docker commit / +.. _image_push: -Pushing a container to its repository -------------------------------------- +Pushing an image to its repository +---------------------------------- In order to push an image to its repository you need to have committed your container to a named image (see above) -Now you can commit this image to the repository +Now you can commit this image to the repository designated by its name +or tag. .. code-block:: bash # for example docker push dhrp/kickassapp sudo docker push / + +.. _using_private_repositories: + +Private Repositories +-------------------- + +Right now (version 0.5), private repositories are only possible by +hosting `your own registry +`_. To push or pull to a +repository on your own registry, you must prefix the tag with the +address of the registry's host, like this: + +.. code-block:: bash + + # Tag to create a repository with the full registry location. + # The location (e.g. localhost.localdomain:5000) becomes + # a permanent part of the repository name + sudo docker tag 0u812deadbeef localhost.localdomain:5000/repo_name + + # Push the new repository to its home location on localhost + sudo docker push localhost.localdomain:5000/repo_name + +Once a repository has your registry's host name as part of the tag, +you can push and pull it like any other repository, but it will +**not** be searchable (or indexed at all) in the Central Index, and +there will be no user name checking performed. Your registry will +function completely independently from the Central Index. diff --git a/docs/theme/docker/layout.html b/docs/theme/docker/layout.html index 2b7796628f..9b3f565637 100755 --- a/docs/theme/docker/layout.html +++ b/docs/theme/docker/layout.html @@ -212,7 +212,9 @@ } // attached handler on click - $('.sidebar > ul > li > a').not(':last').click(function(){ + // Do not attach to first element or last (intro, faq) so that + // first and last link directly instead of accordian + $('.sidebar > ul > li > a').not(':last').not(':first').click(function(){ var index = $.inArray(this.href, openmenus) From 98018df07856811536722df84b9558e0efdabdca Mon Sep 17 00:00:00 2001 From: shin- Date: Wed, 28 Aug 2013 00:20:35 +0200 Subject: [PATCH 054/215] More descriptive, easier to process container portmappings information in the API --- api_params.go | 16 ++++++++++++++-- commands.go | 18 ++++++++++++++++-- commands_test.go | 1 - container.go | 26 ++++++++++++++++++-------- server.go | 2 +- sysinit.go | 3 +-- 6 files changed, 50 insertions(+), 16 deletions(-) diff --git a/api_params.go b/api_params.go index df879f63ee..43a536d601 100644 --- a/api_params.go +++ b/api_params.go @@ -1,5 +1,7 @@ package docker +import "encoding/json" + type APIHistory struct { ID string `json:"Id"` Tags []string `json:",omitempty"` @@ -47,7 +49,7 @@ type APIContainers struct { Command string Created int64 Status string - Ports string + Ports []APIPort SizeRw int64 SizeRootFs int64 } @@ -67,7 +69,17 @@ type APIRun struct { } type APIPort struct { - Port string + PrivatePort int64 + PublicPort int64 + Type string +} + +func (port *APIPort) MarshalJSON() ([]byte, error) { + return json.Marshal(map[string]interface{}{ + "PrivatePort": port.PrivatePort, + "PublicPort": port.PublicPort, + "Type": port.Type, + }) } type APIVersion struct { diff --git a/commands.go b/commands.go index 236fb65d10..3090086cf0 100644 --- a/commands.go +++ b/commands.go @@ -20,6 +20,7 @@ import ( "path/filepath" "reflect" "runtime" + "sort" "strconv" "strings" "syscall" @@ -996,6 +997,19 @@ func (cli *DockerCli) CmdImages(args ...string) error { return nil } +func displayablePorts(ports []APIPort) string { + result := []string{} + for _, port := range ports { + if port.Type == "tcp" { + result = append(result, fmt.Sprintf("%d->%d", port.PublicPort, port.PrivatePort)) + } else { + result = append(result, fmt.Sprintf("%d->%d/%s", port.PublicPort, port.PrivatePort, port.Type)) + } + } + sort.Strings(result) + return strings.Join(result, ", ") +} + func (cli *DockerCli) CmdPs(args ...string) error { cmd := Subcmd("ps", "[OPTIONS]", "List containers") quiet := cmd.Bool("q", false, "Only display numeric IDs") @@ -1053,9 +1067,9 @@ func (cli *DockerCli) CmdPs(args ...string) error { for _, out := range outs { if !*quiet { if *noTrunc { - fmt.Fprintf(w, "%s\t%s\t%s\t%s ago\t%s\t%s\t", out.ID, out.Image, out.Command, utils.HumanDuration(time.Now().Sub(time.Unix(out.Created, 0))), out.Status, out.Ports) + fmt.Fprintf(w, "%s\t%s\t%s\t%s ago\t%s\t%s\t", out.ID, out.Image, out.Command, utils.HumanDuration(time.Now().Sub(time.Unix(out.Created, 0))), out.Status, displayablePorts(out.Ports)) } else { - fmt.Fprintf(w, "%s\t%s\t%s\t%s ago\t%s\t%s\t", utils.TruncateID(out.ID), out.Image, utils.Trunc(out.Command, 20), utils.HumanDuration(time.Now().Sub(time.Unix(out.Created, 0))), out.Status, out.Ports) + fmt.Fprintf(w, "%s\t%s\t%s\t%s ago\t%s\t%s\t", utils.TruncateID(out.ID), out.Image, utils.Trunc(out.Command, 20), utils.HumanDuration(time.Now().Sub(time.Unix(out.Created, 0))), out.Status, displayablePorts(out.Ports)) } if *size { if out.SizeRootFs > 0 { diff --git a/commands_test.go b/commands_test.go index 25e4804361..2946da8792 100644 --- a/commands_test.go +++ b/commands_test.go @@ -152,7 +152,6 @@ func TestRunWorkdirExists(t *testing.T) { } - func TestRunExit(t *testing.T) { stdin, stdinPipe := io.Pipe() stdout, stdoutPipe := io.Pipe() diff --git a/container.go b/container.go index 9099d90f6f..bd33ae802b 100644 --- a/container.go +++ b/container.go @@ -15,7 +15,6 @@ import ( "os/exec" "path" "path/filepath" - "sort" "strconv" "strings" "syscall" @@ -253,17 +252,28 @@ type NetworkSettings struct { PortMapping map[string]PortMapping } -// String returns a human-readable description of the port mapping defined in the settings -func (settings *NetworkSettings) PortMappingHuman() string { - var mapping []string +// returns a more easy to process description of the port mapping defined in the settings +func (settings *NetworkSettings) PortMappingAPI() []APIPort { + var mapping []APIPort for private, public := range settings.PortMapping["Tcp"] { - mapping = append(mapping, fmt.Sprintf("%s->%s", public, private)) + pubint, _ := strconv.ParseInt(public, 0, 0) + privint, _ := strconv.ParseInt(private, 0, 0) + mapping = append(mapping, APIPort{ + PrivatePort: privint, + PublicPort: pubint, + Type: "tcp", + }) } for private, public := range settings.PortMapping["Udp"] { - mapping = append(mapping, fmt.Sprintf("%s->%s/udp", public, private)) + pubint, _ := strconv.ParseInt(public, 0, 0) + privint, _ := strconv.ParseInt(private, 0, 0) + mapping = append(mapping, APIPort{ + PrivatePort: privint, + PublicPort: pubint, + Type: "udp", + }) } - sort.Strings(mapping) - return strings.Join(mapping, ", ") + return mapping } // Inject the io.Reader at the given path. Note: do not close the reader diff --git a/server.go b/server.go index 646cb44877..386f0e27b4 100644 --- a/server.go +++ b/server.go @@ -386,7 +386,7 @@ func (srv *Server) Containers(all, size bool, n int, since, before string) []API c.Command = fmt.Sprintf("%s %s", container.Path, strings.Join(container.Args, " ")) c.Created = container.Created.Unix() c.Status = container.State.String() - c.Ports = container.NetworkSettings.PortMappingHuman() + c.Ports = container.NetworkSettings.PortMappingAPI() if size { c.SizeRw, c.SizeRootFs = container.GetSize() } diff --git a/sysinit.go b/sysinit.go index aa5d2b2a17..34f1cbdac6 100644 --- a/sysinit.go +++ b/sysinit.go @@ -27,10 +27,9 @@ func setupWorkingDirectory(workdir string) { if workdir == "" { return } - syscall.Chdir(workdir) + syscall.Chdir(workdir) } - // Takes care of dropping privileges to the desired user func changeUser(u string) { if u == "" { From dffb72ca898ce44e19f148112c3f9b43c96e01da Mon Sep 17 00:00:00 2001 From: Andy Rothfusz Date: Tue, 27 Aug 2013 18:49:43 -0700 Subject: [PATCH 055/215] Fix #621: add new use/base images section. Include examples. --- docs/sources/use/baseimages.rst | 43 +++++++++++++++++++++++++++++++++ docs/sources/use/builder.rst | 4 +-- docs/sources/use/index.rst | 2 +- 3 files changed, 46 insertions(+), 3 deletions(-) create mode 100644 docs/sources/use/baseimages.rst diff --git a/docs/sources/use/baseimages.rst b/docs/sources/use/baseimages.rst new file mode 100644 index 0000000000..6c8d4fbe2c --- /dev/null +++ b/docs/sources/use/baseimages.rst @@ -0,0 +1,43 @@ +:title: Base Image Creation +:description: How to create base images +:keywords: Examples, Usage, base image, docker, documentation, examples + +.. _base_image_creation: + +Base Image Creation +=================== + +So you want to create your own :ref:`base_image_def`? Great! + +The specific process will depend heavily on the Linux distribution you +want to package. We have some examples below, and you are encouraged +to submit pull requests to contribute new ones. + +Getting Started +............... + +In general, you'll want to start with a working machine that is +running the distribution you'd like to package as a base image, though +that is not required for some tools like Debian's `Debootstrap +`_, which you can also use to +build Ubuntu images. + +It can be as simple as this to create an Ubuntu base image:: + + $ sudo debootstrap raring raring > /dev/null + $ sudo tar -C raring -c . | sudo docker import - raring + a29c15f1bf7a + $ sudo docker run raring cat /etc/lsb-release + DISTRIB_ID=Ubuntu + DISTRIB_RELEASE=13.04 + DISTRIB_CODENAME=raring + DISTRIB_DESCRIPTION="Ubuntu 13.04" + +There are more example scripts for creating base images in the +Docker Github Repo: + +* `BusyBox `_ +* `CentOS + `_ +* `Debian + `_ diff --git a/docs/sources/use/builder.rst b/docs/sources/use/builder.rst index 40ba57b76a..7a985e766b 100644 --- a/docs/sources/use/builder.rst +++ b/docs/sources/use/builder.rst @@ -71,8 +71,8 @@ building images. The ``FROM`` instruction sets the :ref:`base_image_def` for subsequent instructions. As such, a valid Dockerfile must have ``FROM`` as its first instruction. The image can be any valid image -- it is -especially easy to start with an image from the -:ref:`using_public_repositories` +especially easy to start by **pulling an image** from the +:ref:`using_public_repositories`. ``FROM`` must be the first non-comment instruction in the ``Dockerfile``. diff --git a/docs/sources/use/index.rst b/docs/sources/use/index.rst index c5d4a5c697..d0a40159e9 100644 --- a/docs/sources/use/index.rst +++ b/docs/sources/use/index.rst @@ -15,6 +15,6 @@ Contents: basics builder workingwithrepository + baseimages port_redirection puppet - From 466a88b9a8331154730551c0009b67cded83ba58 Mon Sep 17 00:00:00 2001 From: Thatcher Peskens Date: Tue, 27 Aug 2013 19:59:36 -0700 Subject: [PATCH 056/215] added apt-key finger tip and fingerprint in ubuntu installation page --- docs/sources/installation/ubuntulinux.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/sources/installation/ubuntulinux.rst b/docs/sources/installation/ubuntulinux.rst index 4142a9c373..cb79192709 100644 --- a/docs/sources/installation/ubuntulinux.rst +++ b/docs/sources/installation/ubuntulinux.rst @@ -67,6 +67,7 @@ to follow them again.* .. code-block:: bash # Add the Docker repository key to your local keychain + # using apt-key finger you can check the fingerprint matches 36A1 D786 9245 C895 0F96 6E92 D857 6A8B A88D 21E9 sudo sh -c "curl https://get.docker.io/gpg | apt-key add -" # Add the Docker repository to your apt sources list. @@ -120,6 +121,7 @@ to follow them again.* .. code-block:: bash # Add the Docker repository key to your local keychain + # using apt-key finger you can check the fingerprint matches 36A1 D786 9245 C895 0F96 6E92 D857 6A8B A88D 21E9 sudo sh -c "curl http://get.docker.io/gpg | apt-key add -" # Add the Docker repository to your apt sources list. From 69a93b36d5a43c22402af5beea01d60b1b3be91f Mon Sep 17 00:00:00 2001 From: Emily Rose Date: Wed, 28 Aug 2013 04:12:37 -0700 Subject: [PATCH 057/215] Update docker_remote_api_v1.4.rst Fixed a (very serious) typo. --- docs/sources/api/docker_remote_api_v1.4.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/sources/api/docker_remote_api_v1.4.rst b/docs/sources/api/docker_remote_api_v1.4.rst index d512de9ca3..020bc20ae4 100644 --- a/docs/sources/api/docker_remote_api_v1.4.rst +++ b/docs/sources/api/docker_remote_api_v1.4.rst @@ -679,7 +679,7 @@ Create an image :statuscode 500: server error -Insert a file in a image +Insert a file in an image ************************ .. http:post:: /images/(name)/insert From 20772f90fff54f95fc8cafe2b0c9be4c093cbf64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Fr=C3=B6ssman?= Date: Wed, 28 Aug 2013 18:02:14 +0200 Subject: [PATCH 058/215] Fix bash completion, remove have Should solve #1639. --- contrib/docker.bash | 2 -- 1 file changed, 2 deletions(-) diff --git a/contrib/docker.bash b/contrib/docker.bash index 32f2b5f8f1..63df98825c 100644 --- a/contrib/docker.bash +++ b/contrib/docker.bash @@ -21,7 +21,6 @@ # If the docker daemon is using a unix socket for communication your user # must have access to the socket for the completions to function correctly -have docker && { __docker_containers_all() { local containers @@ -542,4 +541,3 @@ _docker() } complete -F _docker docker -} \ No newline at end of file From 66ef6c0f6ed887008ad73e317767e81551f76e72 Mon Sep 17 00:00:00 2001 From: Victor Vieux Date: Wed, 28 Aug 2013 16:40:00 +0000 Subject: [PATCH 059/215] fix start doc --- docs/sources/api/docker_remote_api_v1.4.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/sources/api/docker_remote_api_v1.4.rst b/docs/sources/api/docker_remote_api_v1.4.rst index d512de9ca3..0adb5b834e 100644 --- a/docs/sources/api/docker_remote_api_v1.4.rst +++ b/docs/sources/api/docker_remote_api_v1.4.rst @@ -368,7 +368,7 @@ Start a container Content-Type: text/plain :jsonparam hostConfig: the container's host configuration (optional) - :statuscode 200: no error + :statuscode 204: no error :statuscode 404: no such container :statuscode 500: server error From a359e52f293439388684ee3853fe036892d18dbf Mon Sep 17 00:00:00 2001 From: Elias Probst Date: Thu, 29 Aug 2013 01:50:37 +0200 Subject: [PATCH 060/215] =?UTF-8?q?Added=20FIXME=20for=20iproute=20?= =?UTF-8?q?=E2=86=92=20netlink=20as=20advised=20in=20issue=20#925.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FIXME | 1 + 1 file changed, 1 insertion(+) diff --git a/FIXME b/FIXME index 97a0e0ebb1..6e14a08ee9 100644 --- a/FIXME +++ b/FIXME @@ -34,3 +34,4 @@ to put them - so we put them here :) * entry point config * bring back git revision info, looks like it was lost * Clean up the ProgressReader api, it's a PITA to use +* Use netlink instead of iproute2/iptables (#925) From b1eae313ad7d28142c7e0a8a60e3961bed0c84f0 Mon Sep 17 00:00:00 2001 From: Andy Rothfusz Date: Wed, 28 Aug 2013 17:26:10 -0700 Subject: [PATCH 061/215] Fix #1685: Notes on production use. General installation cleanup. --- docs/sources/installation/amazon.rst | 18 +++-- docs/sources/installation/archlinux.rst | 8 +- docs/sources/installation/binaries.rst | 15 ++-- docs/sources/installation/install_header.inc | 7 ++ .../installation/install_unofficial.inc | 7 ++ docs/sources/installation/rackspace.rst | 31 ++++---- docs/sources/installation/ubuntulinux.rst | 42 +++++++---- docs/sources/installation/upgrading.rst | 32 ++++++-- docs/sources/installation/vagrant.rst | 27 ++++--- docs/sources/installation/windows.rst | 73 ++++++++++++------- docs/sources/use/basics.rst | 2 + 11 files changed, 167 insertions(+), 95 deletions(-) create mode 100644 docs/sources/installation/install_header.inc create mode 100644 docs/sources/installation/install_unofficial.inc diff --git a/docs/sources/installation/amazon.rst b/docs/sources/installation/amazon.rst index 333374f976..b9344042fa 100644 --- a/docs/sources/installation/amazon.rst +++ b/docs/sources/installation/amazon.rst @@ -5,18 +5,20 @@ Using Vagrant (Amazon EC2) ========================== -This page explains how to setup and run an Amazon EC2 instance from your local machine. -Vagrant is not necessary to run Docker on EC2. You can follow the :ref:`ubuntu_linux` instructions -installing Docker on any EC2 instance running Ubuntu +This page explains how to setup and run an Amazon EC2 instance from +your local machine. **Vagrant is not necessary to run Docker on +EC2.** You can follow the :ref:`ubuntu_linux` instructions installing +Docker on any EC2 instance running Ubuntu. - Please note this is a community contributed installation path. The only 'official' installation is using the - :ref:`ubuntu_linux` installation path. This version may sometimes be out of date. - - Installation ------------ -Docker can now be installed on Amazon EC2 with a single vagrant command. Vagrant 1.1 or higher is required. +.. include:: install_header.inc + +.. include:: install_unofficial.inc + +Docker can now be installed on Amazon EC2 with a single vagrant +command. Vagrant 1.1 or higher is required. 1. Install vagrant from http://www.vagrantup.com/ (or use your package manager) 2. Install the vagrant aws plugin diff --git a/docs/sources/installation/archlinux.rst b/docs/sources/installation/archlinux.rst index 722c150194..4f0f211747 100644 --- a/docs/sources/installation/archlinux.rst +++ b/docs/sources/installation/archlinux.rst @@ -7,10 +7,6 @@ Arch Linux ========== - Please note this is a community contributed installation path. The only 'official' installation is using the - :ref:`ubuntu_linux` installation path. This version may sometimes be out of date. - - Installing on Arch Linux is not officially supported but can be handled via either of the following AUR packages: @@ -36,6 +32,10 @@ either AUR package. Installation ------------ +.. include:: install_header.inc + +.. include:: install_unofficial.inc + The instructions here assume **yaourt** is installed. See `Arch User Repository `_ for information on building and installing packages from the AUR if you have not diff --git a/docs/sources/installation/binaries.rst b/docs/sources/installation/binaries.rst index 24de528145..fea48bd7a9 100644 --- a/docs/sources/installation/binaries.rst +++ b/docs/sources/installation/binaries.rst @@ -7,9 +7,10 @@ Binaries ======== - **Please note this project is currently under heavy development. It should not be used in production.** +.. include:: install_header.inc -**This instruction set is meant for hackers who want to try out Docker on a variety of environments.** +**This instruction set is meant for hackers who want to try out Docker +on a variety of environments.** Right now, the officially supported distributions are: @@ -23,14 +24,10 @@ But we know people have had success running it under - Suse - :ref:`arch_linux` +Check Your Kernel +----------------- -Dependencies: -------------- - -* 3.8 Kernel (read more about :ref:`kernel`) -* AUFS filesystem support -* lxc -* xz-utils +Your host's Linux kernel must meet the Docker :ref:`kernel` Get the docker binary: ---------------------- diff --git a/docs/sources/installation/install_header.inc b/docs/sources/installation/install_header.inc new file mode 100644 index 0000000000..c9b9e4c494 --- /dev/null +++ b/docs/sources/installation/install_header.inc @@ -0,0 +1,7 @@ + +.. note:: + + Docker is still under heavy development! We don't recommend using + it in production yet, but we're getting closer with each + release. Please see our blog post, `"Getting to Docker 1.0" + `_ diff --git a/docs/sources/installation/install_unofficial.inc b/docs/sources/installation/install_unofficial.inc new file mode 100644 index 0000000000..8d121918b5 --- /dev/null +++ b/docs/sources/installation/install_unofficial.inc @@ -0,0 +1,7 @@ + +.. note:: + + This is a community contributed installation path. The only + 'official' installation is using the :ref:`ubuntu_linux` + installation path. This version may be out of date because it + depends on some binaries to be updated and published diff --git a/docs/sources/installation/rackspace.rst b/docs/sources/installation/rackspace.rst index 7f360682e2..2a4bdbc955 100644 --- a/docs/sources/installation/rackspace.rst +++ b/docs/sources/installation/rackspace.rst @@ -6,21 +6,22 @@ Rackspace Cloud =============== - Please note this is a community contributed installation path. The only 'official' installation is using the - :ref:`ubuntu_linux` installation path. This version may sometimes be out of date. +.. include:: install_unofficial.inc - -Installing Docker on Ubuntu provided by Rackspace is pretty straightforward, and you should mostly be able to follow the +Installing Docker on Ubuntu provided by Rackspace is pretty +straightforward, and you should mostly be able to follow the :ref:`ubuntu_linux` installation guide. **However, there is one caveat:** -If you are using any linux not already shipping with the 3.8 kernel you will need to install it. And this is a little -more difficult on Rackspace. +If you are using any linux not already shipping with the 3.8 kernel +you will need to install it. And this is a little more difficult on +Rackspace. -Rackspace boots their servers using grub's menu.lst and does not like non 'virtual' packages (e.g. xen compatible) -kernels there, although they do work. This makes ``update-grub`` to not have the expected result, and you need to -set the kernel manually. +Rackspace boots their servers using grub's ``menu.lst`` and does not +like non 'virtual' packages (e.g. xen compatible) kernels there, +although they do work. This makes ``update-grub`` to not have the +expected result, and you need to set the kernel manually. **Do not attempt this on a production machine!** @@ -33,7 +34,8 @@ set the kernel manually. apt-get install linux-generic-lts-raring -Great, now you have kernel installed in /boot/, next is to make it boot next time. +Great, now you have kernel installed in ``/boot/``, next is to make it +boot next time. .. code-block:: bash @@ -43,9 +45,10 @@ Great, now you have kernel installed in /boot/, next is to make it boot next tim # this should return some results -Now you need to manually edit /boot/grub/menu.lst, you will find a section at the bottom with the existing options. -Copy the top one and substitute the new kernel into that. Make sure the new kernel is on top, and double check kernel -and initrd point to the right files. +Now you need to manually edit ``/boot/grub/menu.lst``, you will find a +section at the bottom with the existing options. Copy the top one and +substitute the new kernel into that. Make sure the new kernel is on +top, and double check kernel and initrd point to the right files. Make special care to double check the kernel and initrd entries. @@ -92,4 +95,4 @@ Verify the kernel was updated # nice! 3.8. -Now you can finish with the :ref:`ubuntu_linux` instructions. \ No newline at end of file +Now you can finish with the :ref:`ubuntu_linux` instructions. diff --git a/docs/sources/installation/ubuntulinux.rst b/docs/sources/installation/ubuntulinux.rst index 4142a9c373..dec2eb59cb 100644 --- a/docs/sources/installation/ubuntulinux.rst +++ b/docs/sources/installation/ubuntulinux.rst @@ -2,15 +2,17 @@ :description: Please note this project is currently under heavy development. It should not be used in production. :keywords: Docker, Docker documentation, requirements, virtualbox, vagrant, git, ssh, putty, cygwin, linux -**These instructions have changed for 0.6. If you are upgrading from an earlier version, you will need to follow them again.** - .. _ubuntu_linux: Ubuntu Linux ============ - **Please note this project is currently under heavy development. It should not be used in production.** +.. warning:: + These instructions have changed for 0.6. If you are upgrading from + an earlier version, you will need to follow them again. + +.. include:: install_header.inc Right now, the officially supported distribution are: @@ -22,7 +24,8 @@ Docker has the following dependencies * Linux kernel 3.8 (read more about :ref:`kernel`) * AUFS file system support (we are working on BTRFS support as an alternative) -Please read :ref:`ufw`, if you plan to use `UFW (Uncomplicated Firewall) `_ +Please read :ref:`ufw`, if you plan to use `UFW (Uncomplicated +Firewall) `_ .. _ubuntu_precise: @@ -38,12 +41,13 @@ Dependencies **Linux kernel 3.8** Due to a bug in LXC, docker works best on the 3.8 kernel. Precise -comes with a 3.2 kernel, so we need to upgrade it. The kernel you'll install when following these steps -comes with AUFS built in. We also include the generic headers -to enable packages that depend on them, like ZFS and the VirtualBox -guest additions. If you didn't install the headers for your "precise" -kernel, then you can skip these headers for the "raring" kernel. But -it is safer to include them if you're not sure. +comes with a 3.2 kernel, so we need to upgrade it. The kernel you'll +install when following these steps comes with AUFS built in. We also +include the generic headers to enable packages that depend on them, +like ZFS and the VirtualBox guest additions. If you didn't install the +headers for your "precise" kernel, then you can skip these headers for +the "raring" kernel. But it is safer to include them if you're not +sure. .. code-block:: bash @@ -59,10 +63,13 @@ it is safer to include them if you're not sure. Installation ------------ +.. warning:: + + These instructions have changed for 0.6. If you are upgrading from + an earlier version, you will need to follow them again. + Docker is available as a Debian package, which makes installation easy. -*Please note that these instructions have changed for 0.6. If you are upgrading from an earlier version, you will need -to follow them again.* .. code-block:: bash @@ -136,7 +143,8 @@ Verify it worked .. code-block:: bash - # download the base 'ubuntu' container and run bash inside it while setting up an interactive shell + # download the base 'ubuntu' container + # and run bash inside it while setting up an interactive shell sudo docker run -i -t ubuntu /bin/bash # type exit to exit @@ -150,7 +158,8 @@ Verify it worked Docker and UFW ^^^^^^^^^^^^^^ -Docker uses a bridge to manage containers networking, by default UFW drop all `forwarding`, a first step is to enable forwarding: +Docker uses a bridge to manage containers networking, by default UFW +drop all `forwarding`, a first step is to enable forwarding: .. code-block:: bash @@ -168,8 +177,9 @@ Then reload UFW: sudo ufw reload -UFW's default set of rules denied all `incoming`, so if you want to be able to reach your containers from another host, -you should allow incoming connections on the docker port (default 4243): +UFW's default set of rules denied all `incoming`, so if you want to be +able to reach your containers from another host, you should allow +incoming connections on the docker port (default 4243): .. code-block:: bash diff --git a/docs/sources/installation/upgrading.rst b/docs/sources/installation/upgrading.rst index 9fa47904be..47482314f3 100644 --- a/docs/sources/installation/upgrading.rst +++ b/docs/sources/installation/upgrading.rst @@ -5,18 +5,32 @@ .. _upgrading: Upgrading -============ +========= -**These instructions are for upgrading Docker** +The technique for upgrading ``docker`` to a newer version depends on +how you installed ``docker``. + +.. versionadded:: 0.5.3 + You may wish to add a ``docker`` group to your system to avoid using sudo with ``docker``. (see :ref:`dockergroup`) -After normal installation -------------------------- +After ``apt-get`` +----------------- -If you installed Docker normally using apt-get or used Vagrant, use apt-get to upgrade. +If you installed Docker using ``apt-get`` or Vagrant, then you should +use ``apt-get`` to upgrade. + +.. versionadded:: 0.6 + Add Docker repository information to your system first. .. code-block:: bash + # Add the Docker repository key to your local keychain + sudo sh -c "curl https://get.docker.io/gpg | apt-key add -" + + # Add the Docker repository to your apt sources list. + sudo sh -c "echo deb https://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list" + # update your sources list sudo apt-get update @@ -27,7 +41,7 @@ If you installed Docker normally using apt-get or used Vagrant, use apt-get to u After manual installation ------------------------- -If you installed the Docker binary +If you installed the Docker :ref:`binaries` then follow these steps: .. code-block:: bash @@ -48,8 +62,10 @@ If you installed the Docker binary tar -xf docker-latest.tgz -Start docker in daemon mode (-d) and disconnect (&) starting ./docker will start the version in your current dir rather than a version which -might reside in your path. +Start docker in daemon mode (``-d``) and disconnect, running the +daemon in the background (``&``). Starting as ``./docker`` guarantees +to run the version in your current directory rather than a version +which might reside in your path. .. code-block:: bash diff --git a/docs/sources/installation/vagrant.rst b/docs/sources/installation/vagrant.rst index 568ec584ec..14f5bf5cdd 100644 --- a/docs/sources/installation/vagrant.rst +++ b/docs/sources/installation/vagrant.rst @@ -2,31 +2,36 @@ :description: This guide will setup a new virtualbox virtual machine with docker installed on your computer. :keywords: Docker, Docker documentation, virtualbox, vagrant, git, ssh, putty, cygwin -**Vagrant installation is temporarily out of date, it will be updated for 0.6 soon.** - .. _install_using_vagrant: Using Vagrant (Mac, Linux) ========================== -This guide will setup a new virtualbox virtual machine with docker installed on your computer. This works on most operating -systems, including MacOX, Windows, Linux, FreeBSD and others. If you can install these and have at least 400Mb RAM -to spare you should be good. - +This guide will setup a new virtualbox virtual machine with docker +installed on your computer. This works on most operating systems, +including MacOX, Windows, Linux, FreeBSD and others. If you can +install these and have at least 400Mb RAM to spare you should be good. Install Vagrant and Virtualbox ------------------------------ -1. Install virtualbox from https://www.virtualbox.org/ (or use your package manager) -2. Install vagrant from http://www.vagrantup.com/ (or use your package manager) -3. Install git if you had not installed it before, check if it is installed by running - ``git`` in a terminal window +.. include:: install_header.inc + +.. include:: install_unofficial.inc + +#. Install virtualbox from https://www.virtualbox.org/ (or use your + package manager) +#. Install vagrant from http://www.vagrantup.com/ (or use your package + manager) +#. Install git if you had not installed it before, check if it is + installed by running ``git`` in a terminal window Spin it up ---------- -1. Fetch the docker sources (this includes the Vagrantfile for machine setup). +1. Fetch the docker sources (this includes the ``Vagrantfile`` for + machine setup). .. code-block:: bash diff --git a/docs/sources/installation/windows.rst b/docs/sources/installation/windows.rst index 889db4c670..a6b30aa41e 100644 --- a/docs/sources/installation/windows.rst +++ b/docs/sources/installation/windows.rst @@ -2,21 +2,21 @@ :description: Docker's tutorial to run docker on Windows :keywords: Docker, Docker documentation, Windows, requirements, virtualbox, vagrant, git, ssh, putty, cygwin -**Vagrant installation is temporarily out of date, it will be updated for 0.6 soon.** - .. _windows: Using Vagrant (Windows) ======================= - Please note this is a community contributed installation path. The only 'official' installation is using the :ref:`ubuntu_linux` installation path. This version - may be out of date because it depends on some binaries to be updated and published +Docker can run on Windows using a VM like VirtualBox. You then run +Linux within the VM. - - -Requirements +Installation ------------ +.. include:: install_header.inc + +.. include:: install_unofficial.inc + 1. Install virtualbox from https://www.virtualbox.org - or follow this tutorial__ .. __: http://www.slideshare.net/julienbarbier42/install-virtualbox-on-windows-7 @@ -35,7 +35,10 @@ We recommend having at least 2Gb of free disk space and 2Gb of RAM (or more). Opening a command prompt ------------------------ -First open a cmd prompt. Press Windows key and then press “R” key. This will open the RUN dialog box for you. Type “cmd” and press Enter. Or you can click on Start, type “cmd” in the “Search programs and files” field, and click on cmd.exe. +First open a cmd prompt. Press Windows key and then press “R” +key. This will open the RUN dialog box for you. Type “cmd” and press +Enter. Or you can click on Start, type “cmd” in the “Search programs +and files” field, and click on cmd.exe. .. image:: images/win/_01.gif :alt: Git install @@ -47,14 +50,17 @@ This should open a cmd prompt window. :alt: run docker :align: center -Alternatively, you can also use a Cygwin terminal, or Git Bash (or any other command line program you are usually using). The next steps would be the same. +Alternatively, you can also use a Cygwin terminal, or Git Bash (or any +other command line program you are usually using). The next steps +would be the same. .. _launch_ubuntu: Launch an Ubuntu virtual server ------------------------------- -Let’s download and run an Ubuntu image with docker binaries already installed. +Let’s download and run an Ubuntu image with docker binaries already +installed. .. code-block:: bash @@ -66,7 +72,9 @@ Let’s download and run an Ubuntu image with docker binaries already installed. :alt: run docker :align: center -Congratulations! You are running an Ubuntu server with docker installed on it. You do not see it though, because it is running in the background. +Congratulations! You are running an Ubuntu server with docker +installed on it. You do not see it though, because it is running in +the background. Log onto your Ubuntu server --------------------------- @@ -85,7 +93,12 @@ Run the following command vagrant ssh -You may see an error message starting with “`ssh` executable not found”. In this case it means that you do not have SSH in your PATH. If you do not have SSH in your PATH you can set it up with the “set” command. For instance, if your ssh.exe is in the folder named “C:\Program Files (x86)\Git\bin”, then you can run the following command: +You may see an error message starting with “`ssh` executable not +found”. In this case it means that you do not have SSH in your +PATH. If you do not have SSH in your PATH you can set it up with the +“set” command. For instance, if your ssh.exe is in the folder named +“C:\Program Files (x86)\Git\bin”, then you can run the following +command: .. code-block:: bash @@ -104,13 +117,16 @@ First step is to get the IP and port of your Ubuntu server. Simply run: vagrant ssh-config -You should see an output with HostName and Port information. In this example, HostName is 127.0.0.1 and port is 2222. And the User is “vagrant”. The password is not shown, but it is also “vagrant”. +You should see an output with HostName and Port information. In this +example, HostName is 127.0.0.1 and port is 2222. And the User is +“vagrant”. The password is not shown, but it is also “vagrant”. .. image:: images/win/ssh-config.gif :alt: run docker :align: center -You can now use this information for connecting via SSH to your server. To do so you can: +You can now use this information for connecting via SSH to your +server. To do so you can: - Use putty.exe OR - Use SSH from a terminal @@ -118,8 +134,9 @@ You can now use this information for connecting via SSH to your server. To do so Use putty.exe ''''''''''''' -You can download putty.exe from this page http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html -Launch putty.exe and simply enter the information you got from last step. +You can download putty.exe from this page +http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html Launch +putty.exe and simply enter the information you got from last step. .. image:: images/win/putty.gif :alt: run docker @@ -134,7 +151,9 @@ Open, and enter user = vagrant and password = vagrant. SSH from a terminal ''''''''''''''''''' -You can also run this command on your favorite terminal (windows prompt, cygwin, git-bash, …). Make sure to adapt the IP and port from what you got from the vagrant ssh-config command. +You can also run this command on your favorite terminal (windows +prompt, cygwin, git-bash, …). Make sure to adapt the IP and port from +what you got from the vagrant ssh-config command. .. code-block:: bash @@ -146,12 +165,14 @@ Enter user = vagrant and password = vagrant. :alt: run docker :align: center -Congratulations, you are now logged onto your Ubuntu Server, running on top of your Windows machine ! +Congratulations, you are now logged onto your Ubuntu Server, running +on top of your Windows machine ! Running Docker -------------- -First you have to be root in order to run docker. Simply run the following command: +First you have to be root in order to run docker. Simply run the +following command: .. code-block:: bash @@ -179,10 +200,11 @@ VM does not boot .. image:: images/win/ts_go_bios.JPG -If you run into this error message "The VM failed to remain in the 'running' -state while attempting to boot", please check that your computer has virtualization -technology available and activated by going to the BIOS. Here's an example for an HP -computer (System configuration / Device configuration) +If you run into this error message "The VM failed to remain in the +'running' state while attempting to boot", please check that your +computer has virtualization technology available and activated by +going to the BIOS. Here's an example for an HP computer (System +configuration / Device configuration) .. image:: images/win/hp_bios_vm.JPG @@ -192,5 +214,6 @@ Docker is not installed .. image:: images/win/ts_no_docker.JPG -If you run into this error message "The program 'docker' is currently not installed", -try deleting the docker folder and restart from :ref:`launch_ubuntu` +If you run into this error message "The program 'docker' is currently +not installed", try deleting the docker folder and restart from +:ref:`launch_ubuntu` diff --git a/docs/sources/use/basics.rst b/docs/sources/use/basics.rst index acae031f09..d37bf40b05 100644 --- a/docs/sources/use/basics.rst +++ b/docs/sources/use/basics.rst @@ -37,6 +37,8 @@ Running an interactive shell # use the escape sequence Ctrl-p + Ctrl-q sudo docker run -i -t ubuntu /bin/bash +.. _dockergroup: + Why ``sudo``? ------------- From c1f6914e4374fcafa710c75eb23e8cffeeb45169 Mon Sep 17 00:00:00 2001 From: Emily Rose Date: Wed, 28 Aug 2013 20:01:18 -0700 Subject: [PATCH 062/215] Correct number of asterisks. --- docs/sources/api/docker_remote_api_v1.4.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/sources/api/docker_remote_api_v1.4.rst b/docs/sources/api/docker_remote_api_v1.4.rst index 020bc20ae4..729f52ca88 100644 --- a/docs/sources/api/docker_remote_api_v1.4.rst +++ b/docs/sources/api/docker_remote_api_v1.4.rst @@ -680,7 +680,7 @@ Create an image Insert a file in an image -************************ +************************* .. http:post:: /images/(name)/insert From 37a236947eaa611a441328a0dfc015091402292b Mon Sep 17 00:00:00 2001 From: Andrew Munsell Date: Wed, 28 Aug 2013 22:18:47 -0700 Subject: [PATCH 063/215] Add privileged flag in documentation for container creation --- docs/sources/api/docker_remote_api_v1.4.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/sources/api/docker_remote_api_v1.4.rst b/docs/sources/api/docker_remote_api_v1.4.rst index 0adb5b834e..85012e9af2 100644 --- a/docs/sources/api/docker_remote_api_v1.4.rst +++ b/docs/sources/api/docker_remote_api_v1.4.rst @@ -119,6 +119,7 @@ Create a container "AttachStdout":true, "AttachStderr":true, "PortSpecs":null, + "Privileged": false, "Tty":false, "OpenStdin":false, "StdinOnce":false, From 18d572abb4b633d766c9a28119a118761103f5f8 Mon Sep 17 00:00:00 2001 From: Emily Rose Date: Wed, 28 Aug 2013 22:28:31 -0700 Subject: [PATCH 064/215] Added Emily Rose to AUTHORS. --- AUTHORS | 1 + 1 file changed, 1 insertion(+) diff --git a/AUTHORS b/AUTHORS index 271cc5f65b..5bf18aa51d 100644 --- a/AUTHORS +++ b/AUTHORS @@ -34,6 +34,7 @@ Dominik Honnef Don Spaulding Dr Nic Williams Elias Probst +Emily Rose Eric Hanchrow Eric Myhre Erno Hopearuoho From f6b56e996d6b721cb95c1a19b1df061900fb8fd1 Mon Sep 17 00:00:00 2001 From: David Sissitka Date: Thu, 29 Aug 2013 09:14:14 -0700 Subject: [PATCH 065/215] Updated "POST /containers/create" to return the right Content-Type. --- api.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/api.go b/api.go index 9e094231b5..af3f2e1482 100644 --- a/api.go +++ b/api.go @@ -547,8 +547,9 @@ func postContainersCreate(srv *Server, version float64, w http.ResponseWriter, r if err != nil { return err } + w.Header().Set("Content-Type", "application/json") w.WriteHeader(http.StatusCreated) - writeJSON(w, b) + w.Write(b) return nil } From 075253238dff72bdf03179fcb1d2b90ca097e7f0 Mon Sep 17 00:00:00 2001 From: dsissitka Date: Thu, 29 Aug 2013 12:27:35 -0400 Subject: [PATCH 066/215] Fixed a minor syntax error. --- docs/sources/api/docker_remote_api_v1.4.rst | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/sources/api/docker_remote_api_v1.4.rst b/docs/sources/api/docker_remote_api_v1.4.rst index 0adb5b834e..442235ce6f 100644 --- a/docs/sources/api/docker_remote_api_v1.4.rst +++ b/docs/sources/api/docker_remote_api_v1.4.rst @@ -1091,15 +1091,15 @@ Create a new image from a container's changes {"Id":"596069db4bf5"} - :query container: source container - :query repo: repository - :query tag: tag - :query m: commit message - :query author: author (eg. "John Hannibal Smith ") - :query run: config automatically applied when the image is run. (ex: {"Cmd": ["cat", "/world"], "PortSpecs":["22"]}) - :statuscode 201: no error - :statuscode 404: no such container - :statuscode 500: server error + :query container: source container + :query repo: repository + :query tag: tag + :query m: commit message + :query author: author (eg. "John Hannibal Smith ") + :query run: config automatically applied when the image is run. (ex: {"Cmd": ["cat", "/world"], "PortSpecs":["22"]}) + :statuscode 201: no error + :statuscode 404: no such container + :statuscode 500: server error Monitor Docker's events From 57892365ef325d824ba6ce45a8e24e48cd117f0c Mon Sep 17 00:00:00 2001 From: dsissitka Date: Thu, 29 Aug 2013 12:35:37 -0400 Subject: [PATCH 067/215] Fixed a minor syntax error. --- docs/sources/api/docker_remote_api_v1.4.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/sources/api/docker_remote_api_v1.4.rst b/docs/sources/api/docker_remote_api_v1.4.rst index 0adb5b834e..59536bfaff 100644 --- a/docs/sources/api/docker_remote_api_v1.4.rst +++ b/docs/sources/api/docker_remote_api_v1.4.rst @@ -1082,7 +1082,7 @@ Create a new image from a container's changes POST /commit?container=44c004db4b17&m=message&repo=myrepo HTTP/1.1 - **Example response**: + **Example response**: .. sourcecode:: http From 230dc07d372cccb1aa1198ae300d06e418c73af6 Mon Sep 17 00:00:00 2001 From: Andy Rothfusz Date: Thu, 29 Aug 2013 11:24:59 -0700 Subject: [PATCH 068/215] fix logo path --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index accb7d2e9b..336dd94302 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ Platform-as-a-Service. It benefits directly from the experience accumulated over several years of large-scale operation and support of hundreds of thousands of applications and databases. -![Docker L](docs/sources/concepts/images/dockerlogo-h.png "Docker") +![Docker L](docs/sources/static_files/dockerlogo-h.png "Docker") ## Better than VMs From f1d0625cf895abd1e6b22db3470216b9b9c5ef29 Mon Sep 17 00:00:00 2001 From: David Calavera Date: Fri, 26 Jul 2013 17:40:45 -0700 Subject: [PATCH 069/215] Exit from `docker login` on SIGTERM and SIGINT. Fixes #1299. --- commands.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/commands.go b/commands.go index 236fb65d10..53f6706ae4 100644 --- a/commands.go +++ b/commands.go @@ -333,6 +333,14 @@ func (cli *DockerCli) CmdLogin(args ...string) error { authconfig = auth.AuthConfig{} } + c := make(chan os.Signal, 1) + signal.Notify(c, syscall.SIGINT, syscall.SIGTERM) + go func() { + for sig := range c { + os.Exit(1) + } + }() + if *flUsername == "" { promptDefault("Username", authconfig.Username) username = readAndEchoString(cli.in, cli.out) From c3154fdf4d15aed049a9c18a36cc8511ed7e82c1 Mon Sep 17 00:00:00 2001 From: David Calavera Date: Fri, 26 Jul 2013 18:12:05 -0700 Subject: [PATCH 070/215] Use a more idiomatic syntax to capture the exit. --- commands.go | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/commands.go b/commands.go index 53f6706ae4..e078a97fd1 100644 --- a/commands.go +++ b/commands.go @@ -333,12 +333,11 @@ func (cli *DockerCli) CmdLogin(args ...string) error { authconfig = auth.AuthConfig{} } - c := make(chan os.Signal, 1) - signal.Notify(c, syscall.SIGINT, syscall.SIGTERM) + sigchan := make(chan os.Signal, 1) + signal.Notify(sigchan, syscall.SIGINT, syscall.SIGTERM) go func() { - for sig := range c { - os.Exit(1) - } + <-sigchan + os.Exit(1) }() if *flUsername == "" { From 23dc52f52804219bd57b34217d8778bda0444f13 Mon Sep 17 00:00:00 2001 From: David Calavera Date: Sat, 27 Jul 2013 09:13:02 -0700 Subject: [PATCH 071/215] Allow to generate signals when termios is in raw mode. --- commands.go | 7 ------- term/termios_darwin.go | 2 +- term/termios_linux.go | 2 +- 3 files changed, 2 insertions(+), 9 deletions(-) diff --git a/commands.go b/commands.go index e078a97fd1..236fb65d10 100644 --- a/commands.go +++ b/commands.go @@ -333,13 +333,6 @@ func (cli *DockerCli) CmdLogin(args ...string) error { authconfig = auth.AuthConfig{} } - sigchan := make(chan os.Signal, 1) - signal.Notify(sigchan, syscall.SIGINT, syscall.SIGTERM) - go func() { - <-sigchan - os.Exit(1) - }() - if *flUsername == "" { promptDefault("Username", authconfig.Username) username = readAndEchoString(cli.in, cli.out) diff --git a/term/termios_darwin.go b/term/termios_darwin.go index 24e79de4b2..0f6b24b184 100644 --- a/term/termios_darwin.go +++ b/term/termios_darwin.go @@ -44,7 +44,7 @@ func MakeRaw(fd uintptr) (*State, error) { newState.Iflag &^= (ISTRIP | INLCR | IGNCR | IXON | IXOFF) newState.Iflag |= ICRNL newState.Oflag |= ONLCR - newState.Lflag &^= (ECHO | ICANON | ISIG) + newState.Lflag &^= (ECHO | ICANON) if _, _, err := syscall.Syscall(syscall.SYS_IOCTL, fd, uintptr(setTermios), uintptr(unsafe.Pointer(&newState))); err != 0 { return nil, err diff --git a/term/termios_linux.go b/term/termios_linux.go index 4a717c84a7..22f4fff430 100644 --- a/term/termios_linux.go +++ b/term/termios_linux.go @@ -33,7 +33,7 @@ func MakeRaw(fd uintptr) (*State, error) { newState.Iflag &^= (syscall.IGNBRK | syscall.BRKINT | syscall.PARMRK | syscall.ISTRIP | syscall.INLCR | syscall.IGNCR | syscall.ICRNL | syscall.IXON) newState.Oflag &^= syscall.OPOST - newState.Lflag &^= (syscall.ECHO | syscall.ECHONL | syscall.ICANON | syscall.ISIG | syscall.IEXTEN) + newState.Lflag &^= (syscall.ECHO | syscall.ECHONL | syscall.ICANON | syscall.IEXTEN) newState.Cflag &^= (syscall.CSIZE | syscall.PARENB) newState.Cflag |= syscall.CS8 From 2357fecc92c57e2fcd4a37c60d713508210358f7 Mon Sep 17 00:00:00 2001 From: David Calavera Date: Sat, 3 Aug 2013 16:43:20 -0700 Subject: [PATCH 072/215] Stop making a raw terminal to ask for registry login credentials. It only disables echo asking for the password and lets the terminal to handle everything else. It fixes #1392 since blank spaces are not discarded as they did before. It also cleans the login code a little bit to improve readability. --- commands.go | 113 +++++++++++++++------------------------------------ term/term.go | 44 ++++++++++++++++---- 2 files changed, 68 insertions(+), 89 deletions(-) diff --git a/commands.go b/commands.go index 236fb65d10..0643bc8d58 100644 --- a/commands.go +++ b/commands.go @@ -2,6 +2,7 @@ package docker import ( "archive/tar" + "bufio" "bytes" "encoding/json" "flag" @@ -25,7 +26,6 @@ import ( "syscall" "text/tabwriter" "time" - "unicode" ) var ( @@ -252,75 +252,18 @@ func (cli *DockerCli) CmdBuild(args ...string) error { // 'docker login': login / register a user to registry service. func (cli *DockerCli) CmdLogin(args ...string) error { - var readStringOnRawTerminal = func(stdin io.Reader, stdout io.Writer, echo bool) string { - char := make([]byte, 1) - buffer := make([]byte, 64) - var i = 0 - for i < len(buffer) { - n, err := stdin.Read(char) - if n > 0 { - if char[0] == '\r' || char[0] == '\n' { - stdout.Write([]byte{'\r', '\n'}) - break - } else if char[0] == 127 || char[0] == '\b' { - if i > 0 { - if echo { - stdout.Write([]byte{'\b', ' ', '\b'}) - } - i-- - } - } else if !unicode.IsSpace(rune(char[0])) && - !unicode.IsControl(rune(char[0])) { - if echo { - stdout.Write(char) - } - buffer[i] = char[0] - i++ - } - } - if err != nil { - if err != io.EOF { - fmt.Fprintf(stdout, "Read error: %v\r\n", err) - } - break - } - } - return string(buffer[:i]) - } - var readAndEchoString = func(stdin io.Reader, stdout io.Writer) string { - return readStringOnRawTerminal(stdin, stdout, true) - } - var readString = func(stdin io.Reader, stdout io.Writer) string { - return readStringOnRawTerminal(stdin, stdout, false) - } - cmd := Subcmd("login", "[OPTIONS]", "Register or Login to the docker registry server") - flUsername := cmd.String("u", "", "username") - flPassword := cmd.String("p", "", "password") - flEmail := cmd.String("e", "", "email") + + username := *cmd.String("u", "", "username") + password := *cmd.String("p", "", "password") + email := *cmd.String("e", "", "email") err := cmd.Parse(args) + if err != nil { return nil } - cli.LoadConfigFile() - - var oldState *term.State - if *flUsername == "" || *flPassword == "" || *flEmail == "" { - oldState, err = term.SetRawTerminal(cli.terminalFd) - if err != nil { - return err - } - defer term.RestoreTerminal(cli.terminalFd, oldState) - } - - var ( - username string - password string - email string - ) - - var promptDefault = func(prompt string, configDefault string) { + promptDefault := func(prompt string, configDefault string) { if configDefault == "" { fmt.Fprintf(cli.out, "%s: ", prompt) } else { @@ -328,47 +271,55 @@ func (cli *DockerCli) CmdLogin(args ...string) error { } } + readInput := func(in io.Reader) (string, error) { + reader := bufio.NewReader(in) + line, err := reader.ReadString('\n') + if err != nil { + return "", err + } + return line, nil + } + authconfig, ok := cli.configFile.Configs[auth.IndexServerAddress()] if !ok { authconfig = auth.AuthConfig{} } - if *flUsername == "" { + if username == "" { promptDefault("Username", authconfig.Username) - username = readAndEchoString(cli.in, cli.out) + username, _ = readInput(cli.in) if username == "" { username = authconfig.Username } - } else { - username = *flUsername } + if username != authconfig.Username { - if *flPassword == "" { + if password == "" { + oldState, _ := term.SaveState(cli.terminalFd) fmt.Fprintf(cli.out, "Password: ") - password = readString(cli.in, cli.out) + + term.DisableEcho(cli.terminalFd, cli.out, oldState) + password, _ = readInput(cli.in) + + term.RestoreTerminal(cli.terminalFd, oldState) + if password == "" { return fmt.Errorf("Error : Password Required") } - } else { - password = *flPassword } - if *flEmail == "" { - promptDefault("Email", authconfig.Email) - email = readAndEchoString(cli.in, cli.out) + if email == "" { + promptDefault("\nEmail", authconfig.Email) + email, _ = readInput(cli.in) if email == "" { email = authconfig.Email } - } else { - email = *flEmail } } else { password = authconfig.Password email = authconfig.Email } - if oldState != nil { - term.RestoreTerminal(cli.terminalFd, oldState) - } + authconfig.Username = username authconfig.Password = password authconfig.Email = email @@ -1694,7 +1645,7 @@ func (cli *DockerCli) hijack(method, path string, setRawTerminal bool, in io.Rea } if in != nil && setRawTerminal && cli.isTerminal && os.Getenv("NORAW") == "" { - oldState, err := term.SetRawTerminal(cli.terminalFd) + oldState, err := term.SetRawTerminal(cli.terminalFd, cli.out) if err != nil { return err } diff --git a/term/term.go b/term/term.go index f4d66a71d6..074319c287 100644 --- a/term/term.go +++ b/term/term.go @@ -1,6 +1,8 @@ package term import ( + "fmt" + "io" "os" "os/signal" "syscall" @@ -43,17 +45,43 @@ func RestoreTerminal(fd uintptr, state *State) error { return err } -func SetRawTerminal(fd uintptr) (*State, error) { +func SaveState(fd uintptr) (*State, error) { + var oldState State + if _, _, err := syscall.Syscall(syscall.SYS_IOCTL, fd, getTermios, uintptr(unsafe.Pointer(&oldState.termios))); err != 0 { + return nil, err + } + + return &oldState, nil +} + +func DisableEcho(fd uintptr, out io.Writer, state *State) error { + newState := state.termios + newState.Lflag &^= syscall.ECHO + + HandleInterrupt(fd, out, state) + if _, _, err := syscall.Syscall(syscall.SYS_IOCTL, fd, setTermios, uintptr(unsafe.Pointer(&newState))); err != 0 { + return err + } + return nil +} + +func HandleInterrupt(fd uintptr, out io.Writer, state *State) { + sigchan := make(chan os.Signal, 1) + signal.Notify(sigchan, os.Interrupt) + + go func() { + _ = <-sigchan + fmt.Fprintf(out, "\n") + RestoreTerminal(fd, state) + os.Exit(0) + }() +} + +func SetRawTerminal(fd uintptr, out io.Writer) (*State, error) { oldState, err := MakeRaw(fd) if err != nil { return nil, err } - c := make(chan os.Signal, 1) - signal.Notify(c, os.Interrupt) - go func() { - _ = <-c - RestoreTerminal(fd, oldState) - os.Exit(0) - }() + HandleInterrupt(fd, out, oldState) return oldState, err } From 6e4a818ee65008a043d3ba8e5053cc43babb2f66 Mon Sep 17 00:00:00 2001 From: David Calavera Date: Sat, 3 Aug 2013 17:27:15 -0700 Subject: [PATCH 073/215] Exit if there is any error reading from stdin. --- commands.go | 13 +++++++------ term/term.go | 2 +- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/commands.go b/commands.go index 0643bc8d58..ecd9c63155 100644 --- a/commands.go +++ b/commands.go @@ -271,13 +271,14 @@ func (cli *DockerCli) CmdLogin(args ...string) error { } } - readInput := func(in io.Reader) (string, error) { + readInput := func(in io.Reader, out io.Writer) string { reader := bufio.NewReader(in) line, err := reader.ReadString('\n') if err != nil { - return "", err + fmt.Fprintln(out, err.Error()) + os.Exit(1) } - return line, nil + return line } authconfig, ok := cli.configFile.Configs[auth.IndexServerAddress()] @@ -287,7 +288,7 @@ func (cli *DockerCli) CmdLogin(args ...string) error { if username == "" { promptDefault("Username", authconfig.Username) - username, _ = readInput(cli.in) + username = readInput(cli.in, cli.out) if username == "" { username = authconfig.Username } @@ -299,7 +300,7 @@ func (cli *DockerCli) CmdLogin(args ...string) error { fmt.Fprintf(cli.out, "Password: ") term.DisableEcho(cli.terminalFd, cli.out, oldState) - password, _ = readInput(cli.in) + password = readInput(cli.in, cli.out) term.RestoreTerminal(cli.terminalFd, oldState) @@ -310,7 +311,7 @@ func (cli *DockerCli) CmdLogin(args ...string) error { if email == "" { promptDefault("\nEmail", authconfig.Email) - email, _ = readInput(cli.in) + email = readInput(cli.in, cli.out) if email == "" { email = authconfig.Email } diff --git a/term/term.go b/term/term.go index 074319c287..2c78d6806e 100644 --- a/term/term.go +++ b/term/term.go @@ -71,7 +71,7 @@ func HandleInterrupt(fd uintptr, out io.Writer, state *State) { go func() { _ = <-sigchan - fmt.Fprintf(out, "\n") + fmt.Fprint(out, "\n") RestoreTerminal(fd, state) os.Exit(0) }() From f18889bf674e574a3ac1315ed7bbd56bf638e6c5 Mon Sep 17 00:00:00 2001 From: David Calavera Date: Sat, 3 Aug 2013 21:30:07 -0700 Subject: [PATCH 074/215] Print a new line after getting the password from stdin. --- commands.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/commands.go b/commands.go index ecd9c63155..b58a2e360d 100644 --- a/commands.go +++ b/commands.go @@ -301,6 +301,7 @@ func (cli *DockerCli) CmdLogin(args ...string) error { term.DisableEcho(cli.terminalFd, cli.out, oldState) password = readInput(cli.in, cli.out) + fmt.Fprint(cli.out, "\n") term.RestoreTerminal(cli.terminalFd, oldState) @@ -310,7 +311,7 @@ func (cli *DockerCli) CmdLogin(args ...string) error { } if email == "" { - promptDefault("\nEmail", authconfig.Email) + promptDefault("Email", authconfig.Email) email = readInput(cli.in, cli.out) if email == "" { email = authconfig.Email From b54ba5095bc8b9323a3649806df98345cbe1f3b0 Mon Sep 17 00:00:00 2001 From: David Calavera Date: Sat, 17 Aug 2013 21:08:00 -0700 Subject: [PATCH 075/215] Add the ISIG syscall back to not kill the client withing a shell with ctrl+c. --- term/termios_darwin.go | 2 +- term/termios_linux.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/term/termios_darwin.go b/term/termios_darwin.go index 0f6b24b184..24e79de4b2 100644 --- a/term/termios_darwin.go +++ b/term/termios_darwin.go @@ -44,7 +44,7 @@ func MakeRaw(fd uintptr) (*State, error) { newState.Iflag &^= (ISTRIP | INLCR | IGNCR | IXON | IXOFF) newState.Iflag |= ICRNL newState.Oflag |= ONLCR - newState.Lflag &^= (ECHO | ICANON) + newState.Lflag &^= (ECHO | ICANON | ISIG) if _, _, err := syscall.Syscall(syscall.SYS_IOCTL, fd, uintptr(setTermios), uintptr(unsafe.Pointer(&newState))); err != 0 { return nil, err diff --git a/term/termios_linux.go b/term/termios_linux.go index 22f4fff430..6a76460a54 100644 --- a/term/termios_linux.go +++ b/term/termios_linux.go @@ -33,7 +33,7 @@ func MakeRaw(fd uintptr) (*State, error) { newState.Iflag &^= (syscall.IGNBRK | syscall.BRKINT | syscall.PARMRK | syscall.ISTRIP | syscall.INLCR | syscall.IGNCR | syscall.ICRNL | syscall.IXON) newState.Oflag &^= syscall.OPOST - newState.Lflag &^= (syscall.ECHO | syscall.ECHONL | syscall.ICANON | syscall.IEXTEN) + newState.Lflag &^= (syscall.ECHO | syscall.ECHONL | syscall.ICANON | syscall.ISIG | syscall.EXTEN) newState.Cflag &^= (syscall.CSIZE | syscall.PARENB) newState.Cflag |= syscall.CS8 From b8a89628339dd63b5f2ff3d28715a5431412b65a Mon Sep 17 00:00:00 2001 From: David Calavera Date: Sat, 17 Aug 2013 21:29:37 -0700 Subject: [PATCH 076/215] Simplify term signal handler. --- commands.go | 5 +++-- term/term.go | 25 ++++++++++++------------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/commands.go b/commands.go index b58a2e360d..3dbcc41cf6 100644 --- a/commands.go +++ b/commands.go @@ -299,7 +299,8 @@ func (cli *DockerCli) CmdLogin(args ...string) error { oldState, _ := term.SaveState(cli.terminalFd) fmt.Fprintf(cli.out, "Password: ") - term.DisableEcho(cli.terminalFd, cli.out, oldState) + term.DisableEcho(cli.terminalFd, oldState) + password = readInput(cli.in, cli.out) fmt.Fprint(cli.out, "\n") @@ -1647,7 +1648,7 @@ func (cli *DockerCli) hijack(method, path string, setRawTerminal bool, in io.Rea } if in != nil && setRawTerminal && cli.isTerminal && os.Getenv("NORAW") == "" { - oldState, err := term.SetRawTerminal(cli.terminalFd, cli.out) + oldState, err := term.SetRawTerminal(cli.terminalFd) if err != nil { return err } diff --git a/term/term.go b/term/term.go index 2c78d6806e..d8d4d1a655 100644 --- a/term/term.go +++ b/term/term.go @@ -54,34 +54,33 @@ func SaveState(fd uintptr) (*State, error) { return &oldState, nil } -func DisableEcho(fd uintptr, out io.Writer, state *State) error { +func DisableEcho(fd uintptr, state *State) error { newState := state.termios newState.Lflag &^= syscall.ECHO - HandleInterrupt(fd, out, state) if _, _, err := syscall.Syscall(syscall.SYS_IOCTL, fd, setTermios, uintptr(unsafe.Pointer(&newState))); err != 0 { return err } + handleInterrupt(fd, state) return nil } -func HandleInterrupt(fd uintptr, out io.Writer, state *State) { +func SetRawTerminal(fd uintptr) (*State, error) { + oldState, err := MakeRaw(fd) + if err != nil { + return nil, err + } + handleInterrupt(fd, oldState) + return oldState, err +} + +func handleInterrupt(fd uintptr, state *State) { sigchan := make(chan os.Signal, 1) signal.Notify(sigchan, os.Interrupt) go func() { _ = <-sigchan - fmt.Fprint(out, "\n") RestoreTerminal(fd, state) os.Exit(0) }() } - -func SetRawTerminal(fd uintptr, out io.Writer) (*State, error) { - oldState, err := MakeRaw(fd) - if err != nil { - return nil, err - } - HandleInterrupt(fd, out, oldState) - return oldState, err -} From e7ee2f443ad93803e8312bc224da618d555aebdc Mon Sep 17 00:00:00 2001 From: David Calavera Date: Sat, 17 Aug 2013 22:22:11 -0700 Subject: [PATCH 077/215] Remove unused imports. --- term/term.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/term/term.go b/term/term.go index d8d4d1a655..5929c2caa1 100644 --- a/term/term.go +++ b/term/term.go @@ -1,8 +1,6 @@ package term import ( - "fmt" - "io" "os" "os/signal" "syscall" From 78d995bbd6dc8022faef251835ae6001c4c3da49 Mon Sep 17 00:00:00 2001 From: David Calavera Date: Sat, 17 Aug 2013 22:22:24 -0700 Subject: [PATCH 078/215] Fix syscall name. --- term/termios_linux.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/term/termios_linux.go b/term/termios_linux.go index 6a76460a54..4a717c84a7 100644 --- a/term/termios_linux.go +++ b/term/termios_linux.go @@ -33,7 +33,7 @@ func MakeRaw(fd uintptr) (*State, error) { newState.Iflag &^= (syscall.IGNBRK | syscall.BRKINT | syscall.PARMRK | syscall.ISTRIP | syscall.INLCR | syscall.IGNCR | syscall.ICRNL | syscall.IXON) newState.Oflag &^= syscall.OPOST - newState.Lflag &^= (syscall.ECHO | syscall.ECHONL | syscall.ICANON | syscall.ISIG | syscall.EXTEN) + newState.Lflag &^= (syscall.ECHO | syscall.ECHONL | syscall.ICANON | syscall.ISIG | syscall.IEXTEN) newState.Cflag &^= (syscall.CSIZE | syscall.PARENB) newState.Cflag |= syscall.CS8 From 9f8e5a93b4b7c6b190177c73085e7d2d2d93c64b Mon Sep 17 00:00:00 2001 From: David Calavera Date: Sat, 17 Aug 2013 22:28:05 -0700 Subject: [PATCH 079/215] Use flag.StringVar to capture the command line flags. --- commands.go | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/commands.go b/commands.go index 3dbcc41cf6..be2a4c02d4 100644 --- a/commands.go +++ b/commands.go @@ -254,9 +254,11 @@ func (cli *DockerCli) CmdBuild(args ...string) error { func (cli *DockerCli) CmdLogin(args ...string) error { cmd := Subcmd("login", "[OPTIONS]", "Register or Login to the docker registry server") - username := *cmd.String("u", "", "username") - password := *cmd.String("p", "", "password") - email := *cmd.String("e", "", "email") + var username, password, email string + + cmd.StringVar(&username, "u", "", "username") + cmd.StringVar(&password, "p", "", "password") + cmd.StringVar(&email, "e", "", "email") err := cmd.Parse(args) if err != nil { From 3f141e1fd3a11507b049359ea59253b49395d494 Mon Sep 17 00:00:00 2001 From: Greg Thornton Date: Thu, 29 Aug 2013 14:06:24 -0500 Subject: [PATCH 080/215] Update remaining upstart scripts to wait for lxc-net --- contrib/install.sh | 2 +- hack/release/make.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/contrib/install.sh b/contrib/install.sh index 3cf7169a07..40e3aaafb4 100755 --- a/contrib/install.sh +++ b/contrib/install.sh @@ -47,7 +47,7 @@ else echo "Creating /etc/init/dockerd.conf..." cat >/etc/init/dockerd.conf < Date: Thu, 29 Aug 2013 23:49:41 +0000 Subject: [PATCH 086/215] added a Dockerfile which installs all deps and builds the docs. --- docs/Dockerfile | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 docs/Dockerfile diff --git a/docs/Dockerfile b/docs/Dockerfile new file mode 100644 index 0000000000..e5fd267ebd --- /dev/null +++ b/docs/Dockerfile @@ -0,0 +1,15 @@ +from ubuntu:12.04 +maintainer Nick Stinemates + +run apt-get update +run apt-get install -y python-setuptools make +run easy_install pip +add . /docs +run pip install -r /docs/requirements.txt +run cd /docs; make docs + +expose 8000 + +workdir /docs/_build/html + +entrypoint ["python", "-m", "SimpleHTTPServer"] From e3b58d302795fbbfa6c117774906a4c9efd536f4 Mon Sep 17 00:00:00 2001 From: Victor Vieux Date: Fri, 30 Aug 2013 00:46:43 +0000 Subject: [PATCH 087/215] hide version when not available --- commands.go | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/commands.go b/commands.go index 41e20158b8..01256b1da8 100644 --- a/commands.go +++ b/commands.go @@ -434,8 +434,9 @@ func (cli *DockerCli) CmdVersion(args ...string) error { cmd.Usage() return nil } - - fmt.Fprintf(cli.out, "Client version: %s\n", VERSION) + if VERSION != "" { + fmt.Fprintf(cli.out, "Client version: %s\n", VERSION) + } fmt.Fprintf(cli.out, "Go version (client): %s\n", runtime.Version()) if GITCOMMIT != "" { fmt.Fprintf(cli.out, "Git commit (client): %s\n", GITCOMMIT) @@ -452,7 +453,9 @@ func (cli *DockerCli) CmdVersion(args ...string) error { utils.Debugf("Error unmarshal: body: %s, err: %s\n", body, err) return err } - fmt.Fprintf(cli.out, "Server version: %s\n", out.Version) + if out.Version != "" { + fmt.Fprintf(cli.out, "Server version: %s\n", out.Version) + } if out.GitCommit != "" { fmt.Fprintf(cli.out, "Git commit (server): %s\n", out.GitCommit) } @@ -463,7 +466,7 @@ func (cli *DockerCli) CmdVersion(args ...string) error { release := utils.GetReleaseVersion() if release != "" { fmt.Fprintf(cli.out, "Last stable version: %s", release) - if strings.Trim(VERSION, "-dev") != release || strings.Trim(out.Version, "-dev") != release { + if (VERSION != "" || out.Version != "") && (strings.Trim(VERSION, "-dev") != release || strings.Trim(out.Version, "-dev") != release) { fmt.Fprintf(cli.out, ", please update docker") } fmt.Fprintf(cli.out, "\n") From c0e95fa68a37166ce551a33332bbede6b6531b68 Mon Sep 17 00:00:00 2001 From: dsissitka Date: Thu, 29 Aug 2013 21:05:18 -0400 Subject: [PATCH 088/215] Updated "Use -> The Basics" to use ubuntu:12.10. ubuntu:latest doesn't have nc. ubuntu:12.10 does. --- docs/sources/use/basics.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/sources/use/basics.rst b/docs/sources/use/basics.rst index d37bf40b05..8b4676f6ee 100644 --- a/docs/sources/use/basics.rst +++ b/docs/sources/use/basics.rst @@ -142,7 +142,7 @@ Expose a service on a TCP port .. code-block:: bash # Expose port 4444 of this container, and tell netcat to listen on it - JOB=$(sudo docker run -d -p 4444 ubuntu /bin/nc -l -p 4444) + JOB=$(sudo docker run -d -p 4444 ubuntu:12.10 /bin/nc -l -p 4444) # Which public port is NATed to my container? PORT=$(sudo docker port $JOB 4444) From 6c206f7d7835310c39ef20d3375e949b1fbfd7b9 Mon Sep 17 00:00:00 2001 From: "Shih-Yuan Lee (FourDollars)" Date: Wed, 21 Aug 2013 12:44:58 +0800 Subject: [PATCH 089/215] Install Ubuntu raring backported kernel from official archives directly. --- Vagrantfile | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/Vagrantfile b/Vagrantfile index 4cee3a04d0..53620eabc6 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -20,15 +20,13 @@ Vagrant::Config.run do |config| pkg_cmd = "wget -q -O - http://get.docker.io/gpg | apt-key add -;" \ "echo deb https://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list;" \ "apt-get update -qq; apt-get install -q -y --force-yes lxc-docker; " - # Add X.org Ubuntu backported 3.8 kernel - pkg_cmd << "apt-get update -qq; apt-get install -q -y python-software-properties; " \ - "add-apt-repository -y ppa:ubuntu-x-swat/r-lts-backport; " \ - "apt-get update -qq; apt-get install -q -y linux-image-3.8.0-19-generic; " + # Add Ubuntu raring backported kernel + pkg_cmd << "apt-get update -qq; apt-get install -q -y linux-image-generic-lts-raring; " # Add guest additions if local vbox VM is_vbox = true ARGV.each do |arg| is_vbox &&= !arg.downcase.start_with?("--provider") end if is_vbox - pkg_cmd << "apt-get install -q -y linux-headers-3.8.0-19-generic dkms; " \ + pkg_cmd << "apt-get install -q -y linux-headers-generic-lts-raring dkms; " \ "echo 'Downloading VBox Guest Additions...'; " \ "wget -q http://dlc.sun.com.edgesuite.net/virtualbox/4.2.12/VBoxGuestAdditions_4.2.12.iso; " # Prepare the VM to add guest additions after reboot From 1a8a540209c997f5e75a476b942365aad892ad35 Mon Sep 17 00:00:00 2001 From: Morten Siebuhr Date: Fri, 30 Aug 2013 15:23:32 +0200 Subject: [PATCH 090/215] Document FROM : Dockerfile instruction. --- docs/sources/use/builder.rst | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/docs/sources/use/builder.rst b/docs/sources/use/builder.rst index 7a985e766b..61c7fccd1d 100644 --- a/docs/sources/use/builder.rst +++ b/docs/sources/use/builder.rst @@ -68,6 +68,10 @@ building images. ``FROM `` +Or + + ``FROM :`` + The ``FROM`` instruction sets the :ref:`base_image_def` for subsequent instructions. As such, a valid Dockerfile must have ``FROM`` as its first instruction. The image can be any valid image -- it is @@ -81,6 +85,9 @@ especially easy to start by **pulling an image** from the to create multiple images. Simply make a note of the last image id output by the commit before each new ``FROM`` command. +If no ``tag`` is given to the ``FROM`` instruction, ``latest`` is +assumed. If the used tag does not exist, an error will be returned. + 3.2 MAINTAINER -------------- From d605e82badf64c3033f5f26199285aed414f63dd Mon Sep 17 00:00:00 2001 From: Victor Vieux Date: Fri, 30 Aug 2013 18:08:29 +0000 Subject: [PATCH 091/215] fix error in docker build when param is not a directory --- commands.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/commands.go b/commands.go index 6d78c032f3..0b276ff77f 100644 --- a/commands.go +++ b/commands.go @@ -187,8 +187,10 @@ func (cli *DockerCli) CmdBuild(args ...string) error { } else if utils.IsURL(cmd.Arg(0)) || utils.IsGIT(cmd.Arg(0)) { isRemote = true } else { - if _, err := os.Stat(cmd.Arg(0)); err != nil { + if fi, err := os.Stat(cmd.Arg(0)); err != nil { return err + } else if !fi.IsDir() { + return fmt.Errorf("\"%s\" is not a path or URL. Please provide a path to a directory containing a Dockerfile.", cmd.Arg(0)) } context, err = Tar(cmd.Arg(0), Uncompressed) } From 6756e786ac36d4e5cda46541b5d6e0b2913b6997 Mon Sep 17 00:00:00 2001 From: Brian Olsen Date: Fri, 30 Aug 2013 02:49:11 +0200 Subject: [PATCH 092/215] Just fixing gofmt issues in other people's code. --- container.go | 10 +++++----- network.go | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/container.go b/container.go index 39c19c53d4..5799fa4e12 100644 --- a/container.go +++ b/container.go @@ -11,6 +11,7 @@ import ( "io" "io/ioutil" "log" + "net" "os" "os/exec" "path" @@ -20,7 +21,6 @@ import ( "strings" "syscall" "time" - "net" ) type Container struct { @@ -813,10 +813,10 @@ func (container *Container) allocateNetwork() error { iface = &NetworkInterface{disabled: true} } else { iface = &NetworkInterface{ - IPNet: net.IPNet{IP: net.ParseIP(container.NetworkSettings.IPAddress), Mask: manager.bridgeNetwork.Mask}, + IPNet: net.IPNet{IP: net.ParseIP(container.NetworkSettings.IPAddress), Mask: manager.bridgeNetwork.Mask}, Gateway: manager.bridgeNetwork.IP, manager: manager, - } + } ipNum := ipToInt(iface.IPNet.IP) manager.ipAllocator.inUse[ipNum] = struct{}{} } @@ -827,10 +827,10 @@ func (container *Container) allocateNetwork() error { portSpecs = container.Config.PortSpecs } else { for backend, frontend := range container.NetworkSettings.PortMapping["Tcp"] { - portSpecs = append(portSpecs, fmt.Sprintf("%s:%s/tcp",frontend, backend)) + portSpecs = append(portSpecs, fmt.Sprintf("%s:%s/tcp", frontend, backend)) } for backend, frontend := range container.NetworkSettings.PortMapping["Udp"] { - portSpecs = append(portSpecs, fmt.Sprintf("%s:%s/udp",frontend, backend)) + portSpecs = append(portSpecs, fmt.Sprintf("%s:%s/udp", frontend, backend)) } } diff --git a/network.go b/network.go index c2673bd803..b552919253 100644 --- a/network.go +++ b/network.go @@ -642,7 +642,7 @@ func (manager *NetworkManager) Allocate() (*NetworkInterface, error) { if err != nil { return nil, err } - // avoid duplicate IP + // avoid duplicate IP ipNum := ipToInt(ip) firstIP := manager.ipAllocator.network.IP.To4().Mask(manager.ipAllocator.network.Mask) firstIPNum := ipToInt(firstIP) + 1 From 7a9c71183212a40fdd10369d009a9f97b56fe359 Mon Sep 17 00:00:00 2001 From: Brian Olsen Date: Fri, 30 Aug 2013 02:29:35 +0200 Subject: [PATCH 093/215] Copies content from image to volumne if non-empty. Fixes #1582. --- container.go | 33 +++++++++++++++++++++++------ container_test.go | 54 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 81 insertions(+), 6 deletions(-) diff --git a/container.go b/container.go index 5799fa4e12..6b52983b0d 100644 --- a/container.go +++ b/container.go @@ -642,11 +642,13 @@ func (container *Container) Start(hostConfig *HostConfig) error { if _, exists := container.Volumes[volPath]; exists { continue } + var srcPath string + srcRW := false // If an external bind is defined for this volume, use that as a source if bindMap, exists := binds[volPath]; exists { - container.Volumes[volPath] = bindMap.SrcPath + srcPath = bindMap.SrcPath if strings.ToLower(bindMap.Mode) == "rw" { - container.VolumesRW[volPath] = true + srcRW = true } // Otherwise create an directory in $ROOT/volumes/ and use that } else { @@ -654,17 +656,36 @@ func (container *Container) Start(hostConfig *HostConfig) error { if err != nil { return err } - srcPath, err := c.layer() + srcPath, err = c.layer() if err != nil { return err } - container.Volumes[volPath] = srcPath - container.VolumesRW[volPath] = true // RW by default + srcRW = true // RW by default } + container.Volumes[volPath] = srcPath + container.VolumesRW[volPath] = srcRW // Create the mountpoint - if err := os.MkdirAll(path.Join(container.RootfsPath(), volPath), 0755); err != nil { + rootVolPath := path.Join(container.RootfsPath(), volPath) + if err := os.MkdirAll(rootVolPath, 0755); err != nil { return nil } + if srcRW { + volList, err := ioutil.ReadDir(rootVolPath) + if err != nil { + return err + } + if len(volList) > 0 { + srcList, err := ioutil.ReadDir(srcPath) + if err != nil { + return err + } + if len(srcList) == 0 { + if err := CopyWithTar(rootVolPath, srcPath); err != nil { + return err + } + } + } + } } if err := container.generateLXCConfig(hostConfig); err != nil { diff --git a/container_test.go b/container_test.go index ba48ceb47a..9b6b563048 100644 --- a/container_test.go +++ b/container_test.go @@ -1193,6 +1193,60 @@ func tempDir(t *testing.T) string { return tmpDir } +// Test for #1582 +func TestCopyVolumeContent(t *testing.T) { + r := mkRuntime(t) + defer nuke(r) + + // Put some content in a directory of a container and commit it + container1, _, _ := mkContainer(r, []string{"_", "/bin/sh", "-c", "mkdir -p /hello/local && echo hello > /hello/local/world"}, t) + defer r.Destroy(container1) + + if container1.State.Running { + t.Errorf("Container shouldn't be running") + } + if err := container1.Run(); err != nil { + t.Fatal(err) + } + if container1.State.Running { + t.Errorf("Container shouldn't be running") + } + + rwTar, err := container1.ExportRw() + if err != nil { + t.Error(err) + } + img, err := r.graph.Create(rwTar, container1, "unit test commited image", "", nil) + if err != nil { + t.Error(err) + } + + // Test that the content is copied from the image to the volume + tmpDir1 := tempDir(t) + defer os.RemoveAll(tmpDir1) + stdout1, _ := runContainer(r, []string{"-v", fmt.Sprintf("%s:/hello", tmpDir1), img.ID, "find", "/hello"}, t) + if !(strings.Contains(stdout1, "/hello/local/world") && strings.Contains(stdout1, "/hello/local")) { + t.Fatal("Container failed to transfer content to volume") + } + + // Test that the content is not copied when the volume is readonly + tmpDir2 := tempDir(t) + defer os.RemoveAll(tmpDir2) + stdout2, _ := runContainer(r, []string{"-v", fmt.Sprintf("%s:/hello:ro", tmpDir2), img.ID, "find", "/hello"}, t) + if strings.Contains(stdout2, "/hello/local/world") || strings.Contains(stdout2, "/hello/local") { + t.Fatal("Container transfered content to readonly volume") + } + + // Test that the content is not copied when the volume is non-empty + tmpDir3 := tempDir(t) + defer os.RemoveAll(tmpDir3) + writeFile(path.Join(tmpDir3, "touch-me"), "", t) + stdout3, _ := runContainer(r, []string{"-v", fmt.Sprintf("%s:/hello:rw", tmpDir3), img.ID, "find", "/hello"}, t) + if strings.Contains(stdout3, "/hello/local/world") || strings.Contains(stdout3, "/hello/local") || !strings.Contains(stdout3, "/hello/touch-me") { + t.Fatal("Container transfered content to non-empty volume") + } +} + func TestBindMounts(t *testing.T) { r := mkRuntime(t) defer nuke(r) From 46c9c5c84317907153f06284dc5110b53a0fbf3c Mon Sep 17 00:00:00 2001 From: Brian Olsen Date: Fri, 30 Aug 2013 21:45:01 +0200 Subject: [PATCH 094/215] Made calling changelog before run return empty. Fixes #1705. --- changes.go | 2 +- container_test.go | 11 ++++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/changes.go b/changes.go index dc1b015726..43573cd606 100644 --- a/changes.go +++ b/changes.go @@ -99,7 +99,7 @@ func Changes(layers []string, rw string) ([]Change, error) { changes = append(changes, change) return nil }) - if err != nil { + if err != nil && !os.IsNotExist(err) { return nil, err } return changes, nil diff --git a/container_test.go b/container_test.go index ba48ceb47a..b06d531cf7 100644 --- a/container_test.go +++ b/container_test.go @@ -138,12 +138,21 @@ func TestDiff(t *testing.T) { container1, _, _ := mkContainer(runtime, []string{"_", "/bin/rm", "/etc/passwd"}, t) defer runtime.Destroy(container1) + // The changelog should be empty and not fail before run. See #1705 + c, err := container1.Changes() + if err != nil { + t.Fatal(err) + } + if len(c) != 0 { + t.Fatalf("Changelog should be empty before run") + } + if err := container1.Run(); err != nil { t.Fatal(err) } // Check the changelog - c, err := container1.Changes() + c, err = container1.Changes() if err != nil { t.Fatal(err) } From e42d3a1bfaa555c68cb4a45a2272f8ebf5a3782b Mon Sep 17 00:00:00 2001 From: Matt Apperson Date: Sat, 31 Aug 2013 22:13:15 -0400 Subject: [PATCH 095/215] Added NodeJS library --- docs/sources/api/docker_remote_api.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/sources/api/docker_remote_api.rst b/docs/sources/api/docker_remote_api.rst index 82db83d507..6e4bd2bba0 100644 --- a/docs/sources/api/docker_remote_api.rst +++ b/docs/sources/api/docker_remote_api.rst @@ -181,6 +181,9 @@ and we will add the libraries here. +----------------------+----------------+--------------------------------------------+ | Ruby | docker-api | https://github.com/swipely/docker-api | +----------------------+----------------+--------------------------------------------+ +| Javascript (NodeJS) | docker.io | https://github.com/appersonlabs/docker.io | +| | | Install via NPM: `npm install docker.io` | ++----------------------+----------------+--------------------------------------------+ | Javascript | docker-js | https://github.com/dgoujard/docker-js | +----------------------+----------------+--------------------------------------------+ | Javascript (Angular) | dockerui | https://github.com/crosbymichael/dockerui | From 1fca99ad908c530fcd03158a56767b55500a8521 Mon Sep 17 00:00:00 2001 From: Brandon Liu Date: Sat, 31 Aug 2013 20:31:21 -0700 Subject: [PATCH 096/215] Replace Graph.All with Graph.Map --- api_test.go | 2 +- graph.go | 19 ++++--------------- graph_test.go | 16 ++++++++++------ runtime_test.go | 10 +++++----- server.go | 6 +++--- 5 files changed, 23 insertions(+), 30 deletions(-) diff --git a/api_test.go b/api_test.go index fc7eeed713..9d773301ef 100644 --- a/api_test.go +++ b/api_test.go @@ -68,7 +68,7 @@ func TestGetInfo(t *testing.T) { srv := &Server{runtime: runtime} - initialImages, err := srv.runtime.graph.All() + initialImages, err := srv.runtime.graph.Map() if err != nil { t.Fatal(err) } diff --git a/graph.go b/graph.go index c54725fdb4..09770f8e30 100644 --- a/graph.go +++ b/graph.go @@ -272,27 +272,16 @@ func (graph *Graph) Delete(name string) error { // Map returns a list of all images in the graph, addressable by ID. func (graph *Graph) Map() (map[string]*Image, error) { - // FIXME: this should replace All() - all, err := graph.All() + images := make(map[string]*Image) + err := graph.WalkAll(func(image *Image) { + images[image.ID] = image + }) if err != nil { return nil, err } - images := make(map[string]*Image, len(all)) - for _, image := range all { - images[image.ID] = image - } return images, nil } -// All returns a list of all images in the graph. -func (graph *Graph) All() ([]*Image, error) { - var images []*Image - err := graph.WalkAll(func(image *Image) { - images = append(images, image) - }) - return images, err -} - // WalkAll iterates over each image in the graph, and passes it to a handler. // The walking order is undetermined. func (graph *Graph) WalkAll(handler func(*Image)) error { diff --git a/graph_test.go b/graph_test.go index 32fb0ef441..471016938d 100644 --- a/graph_test.go +++ b/graph_test.go @@ -20,11 +20,11 @@ func TestInit(t *testing.T) { if _, err := os.Stat(graph.Root); err != nil { t.Fatal(err) } - // All() should be empty - if l, err := graph.All(); err != nil { + // Map() should be empty + if l, err := graph.Map(); err != nil { t.Fatal(err) } else if len(l) != 0 { - t.Fatalf("List() should return %d, not %d", 0, len(l)) + t.Fatalf("len(Map()) should return %d, not %d", 0, len(l)) } } @@ -76,11 +76,15 @@ func TestGraphCreate(t *testing.T) { if image.DockerVersion != VERSION { t.Fatalf("Wrong docker_version: should be '%s', not '%s'", VERSION, image.DockerVersion) } - if images, err := graph.All(); err != nil { + images, err := graph.Map() + if err != nil { t.Fatal(err) } else if l := len(images); l != 1 { t.Fatalf("Wrong number of images. Should be %d, not %d", 1, l) } + if images[image.ID] == nil { + t.Fatalf("Could not find image with id %s", image.ID) + } } func TestRegister(t *testing.T) { @@ -99,7 +103,7 @@ func TestRegister(t *testing.T) { if err != nil { t.Fatal(err) } - if images, err := graph.All(); err != nil { + if images, err := graph.Map(); err != nil { t.Fatal(err) } else if l := len(images); l != 1 { t.Fatalf("Wrong number of images. Should be %d, not %d", 1, l) @@ -274,7 +278,7 @@ func TestByParent(t *testing.T) { } func assertNImages(graph *Graph, t *testing.T, n int) { - if images, err := graph.All(); err != nil { + if images, err := graph.Map(); err != nil { t.Fatal(err) } else if actualN := len(images); actualN != n { t.Fatalf("Expected %d images, found %d", n, actualN) diff --git a/runtime_test.go b/runtime_test.go index a65d962fa6..3cd7a0a5d0 100644 --- a/runtime_test.go +++ b/runtime_test.go @@ -50,7 +50,7 @@ func cleanup(runtime *Runtime) error { container.Kill() runtime.Destroy(container) } - images, err := runtime.graph.All() + images, err := runtime.graph.Map() if err != nil { return err } @@ -123,13 +123,13 @@ func init() { // FIXME: test that ImagePull(json=true) send correct json output func GetTestImage(runtime *Runtime) *Image { - imgs, err := runtime.graph.All() + imgs, err := runtime.graph.Map() if err != nil { panic(err) } - for i := range imgs { - if imgs[i].ID == unitTestImageID { - return imgs[i] + for _, image := range imgs { + if image.ID == unitTestImageID { + return image } } panic(fmt.Errorf("Test image %v not found", unitTestImageID)) diff --git a/server.go b/server.go index 646cb44877..b27f149996 100644 --- a/server.go +++ b/server.go @@ -158,7 +158,7 @@ func (srv *Server) ImageInsert(name, url, path string, out io.Writer, sf *utils. } func (srv *Server) ImagesViz(out io.Writer) error { - images, _ := srv.runtime.graph.All() + images, _ := srv.runtime.graph.Map() if images == nil { return nil } @@ -247,7 +247,7 @@ func (srv *Server) Images(all bool, filter string) ([]APIImages, error) { } func (srv *Server) DockerInfo() *APIInfo { - images, _ := srv.runtime.graph.All() + images, _ := srv.runtime.graph.Map() var imgcount int if images == nil { imgcount = 0 @@ -1064,7 +1064,7 @@ func (srv *Server) ImageDelete(name string, autoPrune bool) ([]APIRmi, error) { func (srv *Server) ImageGetCached(imgID string, config *Config) (*Image, error) { // Retrieve all images - images, err := srv.runtime.graph.All() + images, err := srv.runtime.graph.Map() if err != nil { return nil, err } From 113bb396cdef5e07a19306dea767870b2775214d Mon Sep 17 00:00:00 2001 From: Brandon Liu Date: Sat, 31 Aug 2013 20:34:51 -0700 Subject: [PATCH 097/215] Don't export Graph.walkAll. --- graph.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/graph.go b/graph.go index 09770f8e30..34adec1b04 100644 --- a/graph.go +++ b/graph.go @@ -273,7 +273,7 @@ func (graph *Graph) Delete(name string) error { // Map returns a list of all images in the graph, addressable by ID. func (graph *Graph) Map() (map[string]*Image, error) { images := make(map[string]*Image) - err := graph.WalkAll(func(image *Image) { + err := graph.walkAll(func(image *Image) { images[image.ID] = image }) if err != nil { @@ -282,9 +282,9 @@ func (graph *Graph) Map() (map[string]*Image, error) { return images, nil } -// WalkAll iterates over each image in the graph, and passes it to a handler. +// walkAll iterates over each image in the graph, and passes it to a handler. // The walking order is undetermined. -func (graph *Graph) WalkAll(handler func(*Image)) error { +func (graph *Graph) walkAll(handler func(*Image)) error { files, err := ioutil.ReadDir(graph.Root) if err != nil { return err @@ -306,7 +306,7 @@ func (graph *Graph) WalkAll(handler func(*Image)) error { // If an image has no children, it will not have an entry in the table. func (graph *Graph) ByParent() (map[string][]*Image, error) { byParent := make(map[string][]*Image) - err := graph.WalkAll(func(image *Image) { + err := graph.walkAll(func(image *Image) { parent, err := graph.Get(image.Parent) if err != nil { return @@ -328,7 +328,7 @@ func (graph *Graph) Heads() (map[string]*Image, error) { if err != nil { return nil, err } - err = graph.WalkAll(func(image *Image) { + err = graph.walkAll(func(image *Image) { // If it's not in the byParent lookup table, then // it's not a parent -> so it's a head! if _, exists := byParent[image.ID]; !exists { From ce53e21ea6790cf7c2e96f8c5f0725bdf41a80f0 Mon Sep 17 00:00:00 2001 From: David Calavera Date: Sun, 1 Sep 2013 16:12:07 -0700 Subject: [PATCH 098/215] Read the stdin line properly. Load the auth config before it's used. --- commands.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/commands.go b/commands.go index 95f67f4f33..7760108588 100644 --- a/commands.go +++ b/commands.go @@ -277,14 +277,15 @@ func (cli *DockerCli) CmdLogin(args ...string) error { readInput := func(in io.Reader, out io.Writer) string { reader := bufio.NewReader(in) - line, err := reader.ReadString('\n') + line, _, err := reader.ReadLine() if err != nil { fmt.Fprintln(out, err.Error()) os.Exit(1) } - return line + return string(line) } + cli.LoadConfigFile() authconfig, ok := cli.configFile.Configs[auth.IndexServerAddress()] if !ok { authconfig = auth.AuthConfig{} From 6380b42edbf98dec3b04b3b74fcfbfd63dba4034 Mon Sep 17 00:00:00 2001 From: Thijs Terlouw Date: Tue, 3 Sep 2013 16:35:22 +0200 Subject: [PATCH 099/215] Add 2 missing cli commands to docs (events + insert) and alphabetically order docker output --- AUTHORS | 1 + commands.go | 2 +- docs/sources/commandline/command/events.rst | 34 +++++++++++++++++++++ docs/sources/commandline/command/insert.rst | 23 ++++++++++++++ docs/sources/commandline/index.rst | 2 ++ 5 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 docs/sources/commandline/command/events.rst create mode 100644 docs/sources/commandline/command/insert.rst diff --git a/AUTHORS b/AUTHORS index 5bf18aa51d..791d966cef 100644 --- a/AUTHORS +++ b/AUTHORS @@ -104,6 +104,7 @@ Solomon Hykes Sridhar Ratnakumar Stefan Praszalowicz Thatcher Peskens +Thijs Terlouw Thomas Bikeev Thomas Hansen Tianon Gravi diff --git a/commands.go b/commands.go index 0b276ff77f..ffa94973bf 100644 --- a/commands.go +++ b/commands.go @@ -91,7 +91,6 @@ func (cli *DockerCli) CmdHelp(args ...string) error { {"login", "Register or Login to the docker registry server"}, {"logs", "Fetch the logs of a container"}, {"port", "Lookup the public-facing port which is NAT-ed to PRIVATE_PORT"}, - {"top", "Lookup the running processes of a container"}, {"ps", "List containers"}, {"pull", "Pull an image or a repository from the docker registry server"}, {"push", "Push an image or a repository to the docker registry server"}, @@ -103,6 +102,7 @@ func (cli *DockerCli) CmdHelp(args ...string) error { {"start", "Start a stopped container"}, {"stop", "Stop a running container"}, {"tag", "Tag an image into a repository"}, + {"top", "Lookup the running processes of a container"}, {"version", "Show the docker version information"}, {"wait", "Block until a container stops, then print its exit code"}, } { diff --git a/docs/sources/commandline/command/events.rst b/docs/sources/commandline/command/events.rst new file mode 100644 index 0000000000..b8dd591fb1 --- /dev/null +++ b/docs/sources/commandline/command/events.rst @@ -0,0 +1,34 @@ +:title: Events Command +:description: Get real time events from the server +:keywords: events, docker, documentation + +================================================================= +``events`` -- Get real time events from the server +================================================================= + +:: + + Usage: docker events + + Get real time events from the server + +Examples +-------- + +Starting and stopping a container +................................. + +.. code-block:: bash + + $ sudo docker start 4386fb97867d + $ sudo docker stop 4386fb97867d + +In another shell + +.. code-block:: bash + + $ sudo docker events + [2013-09-03 15:49:26 +0200 CEST] 4386fb97867d: (from 12de384bfb10) start + [2013-09-03 15:49:29 +0200 CEST] 4386fb97867d: (from 12de384bfb10) die + [2013-09-03 15:49:29 +0200 CEST] 4386fb97867d: (from 12de384bfb10) stop + diff --git a/docs/sources/commandline/command/insert.rst b/docs/sources/commandline/command/insert.rst new file mode 100644 index 0000000000..0f2612c9af --- /dev/null +++ b/docs/sources/commandline/command/insert.rst @@ -0,0 +1,23 @@ +:title: Insert Command +:description: Insert a file in an image +:keywords: insert, image, docker, documentation + +========================================================================== +``insert`` -- Insert a file in an image +========================================================================== + +:: + + Usage: docker insert IMAGE URL PATH + + Insert a file from URL in the IMAGE at PATH + +Examples +-------- + +Insert file from github +....................... + +.. code-block:: bash + + $ sudo docker insert 8283e18b24bc https://raw.github.com/metalivedev/django/master/postinstall /tmp/postinstall.sh diff --git a/docs/sources/commandline/index.rst b/docs/sources/commandline/index.rst index 5c2b373205..0e7c8738b3 100644 --- a/docs/sources/commandline/index.rst +++ b/docs/sources/commandline/index.rst @@ -17,11 +17,13 @@ Contents: commit cp diff + events export history images import info + insert inspect kill login From ea813d8593d30e430ce05597becb1e394cb72a25 Mon Sep 17 00:00:00 2001 From: Michael Crosby Date: Tue, 3 Sep 2013 18:30:32 +0000 Subject: [PATCH 100/215] Update tar pkg revision number --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 8694f07c37..43f493d3ff 100644 --- a/Dockerfile +++ b/Dockerfile @@ -27,7 +27,7 @@ run /bin/echo -e '[default]\naccess_key=$AWS_ACCESS_KEY\nsecret_key=$AWS_SECRET_ run PKG=github.com/kr/pty REV=27435c699; git clone http://$PKG /go/src/$PKG && cd /go/src/$PKG && git checkout -f $REV run PKG=github.com/gorilla/context/ REV=708054d61e5; git clone http://$PKG /go/src/$PKG && cd /go/src/$PKG && git checkout -f $REV run PKG=github.com/gorilla/mux/ REV=9b36453141c; git clone http://$PKG /go/src/$PKG && cd /go/src/$PKG && git checkout -f $REV -run PKG=github.com/dotcloud/tar/ REV=d06045a6d9; git clone http://$PKG /go/src/$PKG && cd /go/src/$PKG && git checkout -f $REV +run PKG=github.com/dotcloud/tar/ REV=e5ea6bb21a3294; git clone http://$PKG /go/src/$PKG && cd /go/src/$PKG && git checkout -f $REV run PKG=code.google.com/p/go.net/ REV=84a4013f96e0; hg clone http://$PKG /go/src/$PKG && cd /go/src/$PKG && hg checkout $REV # Upload docker source add . /go/src/github.com/dotcloud/docker From fcee6056dc50de7698772a3049cdfa1eb0f2416f Mon Sep 17 00:00:00 2001 From: Marco Hennings Date: Tue, 3 Sep 2013 20:45:49 +0200 Subject: [PATCH 101/215] Login against private registry To improve the use of docker with a private registry the login command is extended with a parameter for the server address. While implementing i noticed that two problems hindered authentication to a private registry: 1. the resolve of the authentication did not match during push because the looked up key was for example localhost:8080 but the stored one would have been https://localhost:8080 Besides The lookup needs to still work if the https->http fallback is used 2. During pull of an image no authentication is sent, which means all repositories are expected to be private. These points are fixed now. The changes are implemented in a way to be compatible to existing behavior both in the API as also with the private registry. Update: - login does not require the full url any more, you can login to the repository prefix: example: docker logon localhost:8080 Fixed corner corner cases: - When login is done during pull and push the registry endpoint is used and not the central index - When Remote sends a 401 during pull, it is now correctly delegating to CmdLogin - After a Login is done pull and push are using the newly entered login data, and not the previous ones. This one seems to be also broken in master, too. - Auth config is now transfered in a parameter instead of the body when /images/create is called. --- api.go | 13 ++- auth/auth.go | 97 ++++++++++++++++++--- commands.go | 80 ++++++++++++----- docs/sources/api/docker_remote_api_v1.4.rst | 3 +- docs/sources/commandline/command/login.rst | 9 +- registry/registry.go | 33 ++++++- server.go | 3 + 7 files changed, 199 insertions(+), 39 deletions(-) diff --git a/api.go b/api.go index 9e094231b5..0debbe94f3 100644 --- a/api.go +++ b/api.go @@ -3,6 +3,7 @@ package docker import ( "code.google.com/p/go.net/websocket" "encoding/json" + "encoding/base64" "fmt" "github.com/dotcloud/docker/auth" "github.com/dotcloud/docker/utils" @@ -394,6 +395,16 @@ func postImagesCreate(srv *Server, version float64, w http.ResponseWriter, r *ht tag := r.Form.Get("tag") repo := r.Form.Get("repo") + authEncoded := r.Form.Get("authConfig") + authConfig := &auth.AuthConfig{} + if authEncoded != "" { + authJson := base64.NewDecoder(base64.URLEncoding, strings.NewReader(authEncoded)) + if err := json.NewDecoder(authJson).Decode(authConfig); err != nil { + // for a pull it is not an error if no auth was given + // to increase compatibilit to existing api it is defaulting to be empty + authConfig = &auth.AuthConfig{} + } + } if version > 1.0 { w.Header().Set("Content-Type", "application/json") } @@ -405,7 +416,7 @@ func postImagesCreate(srv *Server, version float64, w http.ResponseWriter, r *ht metaHeaders[k] = v } } - if err := srv.ImagePull(image, tag, w, sf, &auth.AuthConfig{}, metaHeaders, version > 1.3); err != nil { + if err := srv.ImagePull(image, tag, w, sf, authConfig, metaHeaders, version > 1.3); err != nil { if sf.Used() { w.Write(sf.FormatError(err)) return nil diff --git a/auth/auth.go b/auth/auth.go index 91314877c7..aff6de6dce 100644 --- a/auth/auth.go +++ b/auth/auth.go @@ -26,10 +26,11 @@ var ( ) type AuthConfig struct { - Username string `json:"username,omitempty"` - Password string `json:"password,omitempty"` - Auth string `json:"auth"` - Email string `json:"email"` + Username string `json:"username,omitempty"` + Password string `json:"password,omitempty"` + Auth string `json:"auth"` + Email string `json:"email"` + ServerAddress string `json:"serveraddress,omitempty"` } type ConfigFile struct { @@ -96,6 +97,7 @@ func LoadConfig(rootPath string) (*ConfigFile, error) { } origEmail := strings.Split(arr[1], " = ") authConfig.Email = origEmail[1] + authConfig.ServerAddress = IndexServerAddress() configFile.Configs[IndexServerAddress()] = authConfig } else { for k, authConfig := range configFile.Configs { @@ -105,6 +107,7 @@ func LoadConfig(rootPath string) (*ConfigFile, error) { } authConfig.Auth = "" configFile.Configs[k] = authConfig + authConfig.ServerAddress = k } } return &configFile, nil @@ -125,7 +128,7 @@ func SaveConfig(configFile *ConfigFile) error { authCopy.Auth = encodeAuth(&authCopy) authCopy.Username = "" authCopy.Password = "" - + authCopy.ServerAddress = "" configs[k] = authCopy } @@ -146,14 +149,26 @@ func Login(authConfig *AuthConfig, factory *utils.HTTPRequestFactory) (string, e reqStatusCode := 0 var status string var reqBody []byte - jsonBody, err := json.Marshal(authConfig) + + serverAddress := authConfig.ServerAddress + if serverAddress == "" { + serverAddress = IndexServerAddress() + } + + loginAgainstOfficialIndex := serverAddress == IndexServerAddress() + + // to avoid sending the server address to the server it should be removed before marshalled + authCopy := *authConfig + authCopy.ServerAddress = "" + + jsonBody, err := json.Marshal(authCopy) if err != nil { return "", fmt.Errorf("Config Error: %s", err) } // using `bytes.NewReader(jsonBody)` here causes the server to respond with a 411 status. b := strings.NewReader(string(jsonBody)) - req1, err := http.Post(IndexServerAddress()+"users/", "application/json; charset=utf-8", b) + req1, err := http.Post(serverAddress+"users/", "application/json; charset=utf-8", b) if err != nil { return "", fmt.Errorf("Server Error: %s", err) } @@ -165,14 +180,23 @@ func Login(authConfig *AuthConfig, factory *utils.HTTPRequestFactory) (string, e } if reqStatusCode == 201 { - status = "Account created. Please use the confirmation link we sent" + - " to your e-mail to activate it." + if loginAgainstOfficialIndex { + status = "Account created. Please use the confirmation link we sent" + + " to your e-mail to activate it." + } else { + status = "Account created. Please see the documentation of the registry " + serverAddress + " for instructions how to activate it." + } } else if reqStatusCode == 403 { - return "", fmt.Errorf("Login: Your account hasn't been activated. " + - "Please check your e-mail for a confirmation link.") + if loginAgainstOfficialIndex { + return "", fmt.Errorf("Login: Your account hasn't been activated. " + + "Please check your e-mail for a confirmation link.") + } else { + return "", fmt.Errorf("Login: Your account hasn't been activated. " + + "Please see the documentation of the registry " + serverAddress + " for instructions how to activate it.") + } } else if reqStatusCode == 400 { if string(reqBody) == "\"Username or email already exists\"" { - req, err := factory.NewRequest("GET", IndexServerAddress()+"users/", nil) + req, err := factory.NewRequest("GET", serverAddress+"users/", nil) req.SetBasicAuth(authConfig.Username, authConfig.Password) resp, err := client.Do(req) if err != nil { @@ -199,3 +223,52 @@ func Login(authConfig *AuthConfig, factory *utils.HTTPRequestFactory) (string, e } return status, nil } + +// this method matches a auth configuration to a server address or a url +func (config *ConfigFile) ResolveAuthConfig(registry string) AuthConfig { + if registry == IndexServerAddress() || len(registry) == 0 { + // default to the index server + return config.Configs[IndexServerAddress()] + } + // if its not the index server there are three cases: + // + // 1. this is a full config url -> it should be used as is + // 2. it could be a full url, but with the wrong protocol + // 3. it can be the hostname optionally with a port + // + // as there is only one auth entry which is fully qualified we need to start + // parsing and matching + + swapProtocoll := func(url string) string { + if strings.HasPrefix(url, "http:") { + return strings.Replace(url, "http:", "https:", 1) + } + if strings.HasPrefix(url, "https:") { + return strings.Replace(url, "https:", "http:", 1) + } + return url + } + + resolveIgnoringProtocol := func(url string) AuthConfig { + if c, found := config.Configs[url]; found { + return c + } + registrySwappedProtocoll := swapProtocoll(url) + // now try to match with the different protocol + if c, found := config.Configs[registrySwappedProtocoll]; found { + return c + } + return AuthConfig{} + } + + // match both protocols as it could also be a server name like httpfoo + if strings.HasPrefix(registry, "http:") || strings.HasPrefix(registry, "https:") { + return resolveIgnoringProtocol(registry) + } + + url := "https://" + registry + if !strings.Contains(registry, "/") { + url = url + "/v1/" + } + return resolveIgnoringProtocol(url) +} diff --git a/commands.go b/commands.go index b2a4d3db13..16340d74ae 100644 --- a/commands.go +++ b/commands.go @@ -4,10 +4,12 @@ import ( "archive/tar" "bufio" "bytes" + "encoding/base64" "encoding/json" "flag" "fmt" "github.com/dotcloud/docker/auth" + "github.com/dotcloud/docker/registry" "github.com/dotcloud/docker/term" "github.com/dotcloud/docker/utils" "io" @@ -91,6 +93,7 @@ func (cli *DockerCli) CmdHelp(args ...string) error { {"login", "Register or Login to the docker registry server"}, {"logs", "Fetch the logs of a container"}, {"port", "Lookup the public-facing port which is NAT-ed to PRIVATE_PORT"}, + {"top", "Lookup the running processes of a container"}, {"ps", "List containers"}, {"pull", "Pull an image or a repository from the docker registry server"}, {"push", "Push an image or a repository to the docker registry server"}, @@ -102,7 +105,6 @@ func (cli *DockerCli) CmdHelp(args ...string) error { {"start", "Start a stopped container"}, {"stop", "Stop a running container"}, {"tag", "Tag an image into a repository"}, - {"top", "Lookup the running processes of a container"}, {"version", "Show the docker version information"}, {"wait", "Block until a container stops, then print its exit code"}, } { @@ -187,10 +189,8 @@ func (cli *DockerCli) CmdBuild(args ...string) error { } else if utils.IsURL(cmd.Arg(0)) || utils.IsGIT(cmd.Arg(0)) { isRemote = true } else { - if fi, err := os.Stat(cmd.Arg(0)); err != nil { + if _, err := os.Stat(cmd.Arg(0)); err != nil { return err - } else if !fi.IsDir() { - return fmt.Errorf("\"%s\" is not a path or URL. Please provide a path to a directory containing a Dockerfile.", cmd.Arg(0)) } context, err = Tar(cmd.Arg(0), Uncompressed) } @@ -254,7 +254,7 @@ func (cli *DockerCli) CmdBuild(args ...string) error { // 'docker login': login / register a user to registry service. func (cli *DockerCli) CmdLogin(args ...string) error { - cmd := Subcmd("login", "[OPTIONS]", "Register or Login to the docker registry server") + cmd := Subcmd("login", "[OPTIONS] [SERVER]", "Register or Login to a docker registry server, if no server is specified \""+auth.IndexServerAddress()+"\" is the default.") var username, password, email string @@ -262,10 +262,17 @@ func (cli *DockerCli) CmdLogin(args ...string) error { cmd.StringVar(&password, "p", "", "password") cmd.StringVar(&email, "e", "", "email") err := cmd.Parse(args) - if err != nil { return nil } + serverAddress := auth.IndexServerAddress() + if len(cmd.Args()) > 0 { + serverAddress, err = registry.ExpandAndVerifyRegistryUrl(cmd.Arg(0)) + if err != nil { + return err + } + fmt.Fprintf(cli.out, "Login against server at %s\n", serverAddress) + } promptDefault := func(prompt string, configDefault string) { if configDefault == "" { @@ -298,19 +305,16 @@ func (cli *DockerCli) CmdLogin(args ...string) error { username = authconfig.Username } } - if username != authconfig.Username { if password == "" { oldState, _ := term.SaveState(cli.terminalFd) fmt.Fprintf(cli.out, "Password: ") - term.DisableEcho(cli.terminalFd, oldState) password = readInput(cli.in, cli.out) fmt.Fprint(cli.out, "\n") term.RestoreTerminal(cli.terminalFd, oldState) - if password == "" { return fmt.Errorf("Error : Password Required") } @@ -327,15 +331,15 @@ func (cli *DockerCli) CmdLogin(args ...string) error { password = authconfig.Password email = authconfig.Email } - authconfig.Username = username authconfig.Password = password authconfig.Email = email - cli.configFile.Configs[auth.IndexServerAddress()] = authconfig + authconfig.ServerAddress = serverAddress + cli.configFile.Configs[serverAddress] = authconfig - body, statusCode, err := cli.call("POST", "/auth", cli.configFile.Configs[auth.IndexServerAddress()]) + body, statusCode, err := cli.call("POST", "/auth", cli.configFile.Configs[serverAddress]) if statusCode == 401 { - delete(cli.configFile.Configs, auth.IndexServerAddress()) + delete(cli.configFile.Configs, serverAddress) auth.SaveConfig(cli.configFile) return err } @@ -812,6 +816,13 @@ func (cli *DockerCli) CmdPush(args ...string) error { cli.LoadConfigFile() + // Resolve the Repository name from fqn to endpoint + name + endpoint, _, err := registry.ResolveRepositoryName(name) + if err != nil { + return err + } + // Resolve the Auth config relevant for this server + authConfig := cli.configFile.ResolveAuthConfig(endpoint) // If we're not using a custom registry, we know the restrictions // applied to repository names and can warn the user in advance. // Custom repositories can have different rules, and we must also @@ -825,8 +836,8 @@ func (cli *DockerCli) CmdPush(args ...string) error { } v := url.Values{} - push := func() error { - buf, err := json.Marshal(cli.configFile.Configs[auth.IndexServerAddress()]) + push := func(authConfig auth.AuthConfig) error { + buf, err := json.Marshal(authConfig) if err != nil { return err } @@ -834,13 +845,14 @@ func (cli *DockerCli) CmdPush(args ...string) error { return cli.stream("POST", "/images/"+name+"/push?"+v.Encode(), bytes.NewBuffer(buf), cli.out) } - if err := push(); err != nil { - if err.Error() == "Authentication is required." { + if err := push(authConfig); err != nil { + if err.Error() == registry.ErrLoginRequired.Error() { fmt.Fprintln(cli.out, "\nPlease login prior to push:") - if err := cli.CmdLogin(""); err != nil { + if err := cli.CmdLogin(endpoint); err != nil { return err } - return push() + authConfig := cli.configFile.ResolveAuthConfig(endpoint) + return push(authConfig) } return err } @@ -864,11 +876,39 @@ func (cli *DockerCli) CmdPull(args ...string) error { *tag = parsedTag } + // Resolve the Repository name from fqn to endpoint + name + endpoint, _, err := registry.ResolveRepositoryName(remote) + if err != nil { + return err + } + + cli.LoadConfigFile() + + // Resolve the Auth config relevant for this server + authConfig := cli.configFile.ResolveAuthConfig(endpoint) v := url.Values{} v.Set("fromImage", remote) v.Set("tag", *tag) - if err := cli.stream("POST", "/images/create?"+v.Encode(), nil, cli.out); err != nil { + pull := func(authConfig auth.AuthConfig) error { + buf, err := json.Marshal(authConfig) + if err != nil { + return err + } + v.Set("authConfig", base64.URLEncoding.EncodeToString(buf)) + + return cli.stream("POST", "/images/create?"+v.Encode(), bytes.NewBuffer(buf), cli.out) + } + + if err := pull(authConfig); err != nil { + if err.Error() == registry.ErrLoginRequired.Error() { + fmt.Fprintln(cli.out, "\nPlease login prior to push:") + if err := cli.CmdLogin(endpoint); err != nil { + return err + } + authConfig := cli.configFile.ResolveAuthConfig(endpoint) + return pull(authConfig) + } return err } diff --git a/docs/sources/api/docker_remote_api_v1.4.rst b/docs/sources/api/docker_remote_api_v1.4.rst index 3ab5cdee0a..df355c78a5 100644 --- a/docs/sources/api/docker_remote_api_v1.4.rst +++ b/docs/sources/api/docker_remote_api_v1.4.rst @@ -991,7 +991,8 @@ Check auth configuration { "username":"hannibal", "password:"xxxx", - "email":"hannibal@a-team.com" + "email":"hannibal@a-team.com", + "serveraddress":"https://index.docker.io/v1/" } **Example response**: diff --git a/docs/sources/commandline/command/login.rst b/docs/sources/commandline/command/login.rst index 57ecaeb00e..46f354d6be 100644 --- a/docs/sources/commandline/command/login.rst +++ b/docs/sources/commandline/command/login.rst @@ -8,10 +8,17 @@ :: - Usage: docker login [OPTIONS] + Usage: docker login [OPTIONS] [SERVER] Register or Login to the docker registry server -e="": email -p="": password -u="": username + + If you want to login to a private registry you can + specify this by adding the server name. + + example: + docker login localhost:8080 + diff --git a/registry/registry.go b/registry/registry.go index 759652f074..f24e0b3502 100644 --- a/registry/registry.go +++ b/registry/registry.go @@ -22,6 +22,7 @@ import ( var ( ErrAlreadyExists = errors.New("Image already exists") ErrInvalidRepositoryName = errors.New("Invalid repository name (ex: \"registry.domain.tld/myrepos\")") + ErrLoginRequired = errors.New("Authentication is required.") ) func pingRegistryEndpoint(endpoint string) error { @@ -102,17 +103,38 @@ func ResolveRepositoryName(reposName string) (string, string, error) { if err := validateRepositoryName(reposName); err != nil { return "", "", err } + endpoint, err := ExpandAndVerifyRegistryUrl(hostname) + if err != nil { + return "", "", err + } + return endpoint, reposName, err +} + +// this method expands the registry name as used in the prefix of a repo +// to a full url. if it already is a url, there will be no change. +// The registry is pinged to test if it http or https +func ExpandAndVerifyRegistryUrl(hostname string) (string, error) { + if strings.HasPrefix(hostname, "http:") || strings.HasPrefix(hostname, "https:") { + // if there is no slash after https:// (8 characters) then we have no path in the url + if strings.LastIndex(hostname, "/") < 9 { + // there is no path given. Expand with default path + hostname = hostname + "/v1/" + } + if err := pingRegistryEndpoint(hostname); err != nil { + return "", errors.New("Invalid Registry endpoint: " + err.Error()) + } + return hostname, nil + } endpoint := fmt.Sprintf("https://%s/v1/", hostname) if err := pingRegistryEndpoint(endpoint); err != nil { utils.Debugf("Registry %s does not work (%s), falling back to http", endpoint, err) endpoint = fmt.Sprintf("http://%s/v1/", hostname) if err = pingRegistryEndpoint(endpoint); err != nil { //TODO: triggering highland build can be done there without "failing" - return "", "", errors.New("Invalid Registry endpoint: " + err.Error()) + return "", errors.New("Invalid Registry endpoint: " + err.Error()) } } - err := validateRepositoryName(reposName) - return endpoint, reposName, err + return endpoint, nil } func doWithCookies(c *http.Client, req *http.Request) (*http.Response, error) { @@ -139,6 +161,9 @@ func (r *Registry) GetRemoteHistory(imgID, registry string, token []string) ([]s req.Header.Set("Authorization", "Token "+strings.Join(token, ", ")) res, err := doWithCookies(r.client, req) if err != nil || res.StatusCode != 200 { + if res.StatusCode == 401 { + return nil, ErrLoginRequired + } if res != nil { return nil, utils.NewHTTPRequestError(fmt.Sprintf("Internal server error: %d trying to fetch remote history for %s", res.StatusCode, imgID), res) } @@ -282,7 +307,7 @@ func (r *Registry) GetRepositoryData(indexEp, remote string) (*RepositoryData, e } defer res.Body.Close() if res.StatusCode == 401 { - return nil, utils.NewHTTPRequestError(fmt.Sprintf("Please login first (HTTP code %d)", res.StatusCode), res) + return nil, ErrLoginRequired } // TODO: Right now we're ignoring checksums in the response body. // In the future, we need to use them to check image validity. diff --git a/server.go b/server.go index 646cb44877..e1ff55206e 100644 --- a/server.go +++ b/server.go @@ -655,6 +655,9 @@ func (srv *Server) ImagePull(localName string, tag string, out io.Writer, sf *ut out = utils.NewWriteFlusher(out) err = srv.pullRepository(r, out, localName, remoteName, tag, endpoint, sf, parallel) + if err == registry.ErrLoginRequired { + return err + } if err != nil { if err := srv.pullImage(r, out, remoteName, endpoint, nil, sf); err != nil { return err From da3bb9a7c6ad79f224ee91a2dd053c1e1b2ad053 Mon Sep 17 00:00:00 2001 From: Marco Hennings Date: Fri, 23 Aug 2013 09:38:33 +0200 Subject: [PATCH 102/215] Move authConfig to a Parameter on postImagePush, too --- api.go | 23 +++++++++++++++++++---- commands.go | 5 +++-- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/api.go b/api.go index 0debbe94f3..8b6d0280e7 100644 --- a/api.go +++ b/api.go @@ -2,8 +2,8 @@ package docker import ( "code.google.com/p/go.net/websocket" - "encoding/json" "encoding/base64" + "encoding/json" "fmt" "github.com/dotcloud/docker/auth" "github.com/dotcloud/docker/utils" @@ -491,12 +491,27 @@ func postImagesPush(srv *Server, version float64, w http.ResponseWriter, r *http metaHeaders[k] = v } } - if err := json.NewDecoder(r.Body).Decode(authConfig); err != nil { - return err - } if err := parseForm(r); err != nil { return err } + authConfig := &auth.AuthConfig{} + + authEncoded := r.Form.Get("authConfig") + if authEncoded != "" { + // the new format is to handle the authConfg as a parameter + authJson := base64.NewDecoder(base64.URLEncoding, strings.NewReader(authEncoded)) + if err := json.NewDecoder(authJson).Decode(authConfig); err != nil { + // for a pull it is not an error if no auth was given + // to increase compatibilit to existing api it is defaulting to be empty + authConfig = &auth.AuthConfig{} + } + } else { + // the old format is supported for compatibility if there was no authConfig parameter + if err := json.NewDecoder(r.Body).Decode(authConfig); err != nil { + return err + } + + } if vars == nil { return fmt.Errorf("Missing parameter") diff --git a/commands.go b/commands.go index 16340d74ae..3d3728ac9e 100644 --- a/commands.go +++ b/commands.go @@ -841,8 +841,9 @@ func (cli *DockerCli) CmdPush(args ...string) error { if err != nil { return err } + v.Set("authConfig", base64.URLEncoding.EncodeToString(buf)) - return cli.stream("POST", "/images/"+name+"/push?"+v.Encode(), bytes.NewBuffer(buf), cli.out) + return cli.stream("POST", "/images/"+name+"/push?"+v.Encode(), nil, cli.out) } if err := push(authConfig); err != nil { @@ -897,7 +898,7 @@ func (cli *DockerCli) CmdPull(args ...string) error { } v.Set("authConfig", base64.URLEncoding.EncodeToString(buf)) - return cli.stream("POST", "/images/create?"+v.Encode(), bytes.NewBuffer(buf), cli.out) + return cli.stream("POST", "/images/create?"+v.Encode(), nil, cli.out) } if err := pull(authConfig); err != nil { From ad322d7cca4857292d41e164058382f83a06cf98 Mon Sep 17 00:00:00 2001 From: Marco Hennings Date: Fri, 23 Aug 2013 14:02:24 +0200 Subject: [PATCH 103/215] Send corrent endpoint authentication when an image is pulled during the run cmd. --- commands.go | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/commands.go b/commands.go index 3d3728ac9e..8aba44b594 100644 --- a/commands.go +++ b/commands.go @@ -1432,6 +1432,25 @@ func (cli *DockerCli) CmdRun(args ...string) error { repos, tag := utils.ParseRepositoryTag(config.Image) v.Set("fromImage", repos) v.Set("tag", tag) + + // Resolve the Repository name from fqn to endpoint + name + var endpoint string + endpoint, _, err = registry.ResolveRepositoryName(repos) + if err != nil { + return err + } + + // Load the auth config file, to be able to pull the image + cli.LoadConfigFile() + + // Resolve the Auth config relevant for this server + authConfig := cli.configFile.ResolveAuthConfig(endpoint) + buf, err := json.Marshal(authConfig) + if err != nil { + return err + } + v.Set("authConfig", base64.URLEncoding.EncodeToString(buf)) + err = cli.stream("POST", "/images/create?"+v.Encode(), nil, cli.err) if err != nil { return err From a2603477ddd0a7eba794dd5fd917a4d88c5241da Mon Sep 17 00:00:00 2001 From: Marco Hennings Date: Sat, 24 Aug 2013 21:23:14 +0200 Subject: [PATCH 104/215] Merge on current master --- api.go | 1 - 1 file changed, 1 deletion(-) diff --git a/api.go b/api.go index 8b6d0280e7..ecc9fc47a9 100644 --- a/api.go +++ b/api.go @@ -484,7 +484,6 @@ func postImagesInsert(srv *Server, version float64, w http.ResponseWriter, r *ht } func postImagesPush(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error { - authConfig := &auth.AuthConfig{} metaHeaders := map[string][]string{} for k, v := range r.Header { if strings.HasPrefix(k, "X-Meta-") { From d04beb7f4315c6b659958227954398437a69e5d6 Mon Sep 17 00:00:00 2001 From: shin- Date: Fri, 30 Aug 2013 21:46:19 +0200 Subject: [PATCH 105/215] Pass auth config through headers rather than as URL param --- api.go | 23 +++++++++-------------- commands.go | 35 +++++++++++++++++++++++++---------- 2 files changed, 34 insertions(+), 24 deletions(-) diff --git a/api.go b/api.go index ecc9fc47a9..28765b1b5f 100644 --- a/api.go +++ b/api.go @@ -2,7 +2,6 @@ package docker import ( "code.google.com/p/go.net/websocket" - "encoding/base64" "encoding/json" "fmt" "github.com/dotcloud/docker/auth" @@ -395,13 +394,12 @@ func postImagesCreate(srv *Server, version float64, w http.ResponseWriter, r *ht tag := r.Form.Get("tag") repo := r.Form.Get("repo") - authEncoded := r.Form.Get("authConfig") + authJson := r.Header.Get("X-Registry-Auth") authConfig := &auth.AuthConfig{} - if authEncoded != "" { - authJson := base64.NewDecoder(base64.URLEncoding, strings.NewReader(authEncoded)) - if err := json.NewDecoder(authJson).Decode(authConfig); err != nil { + if authJson != "" { + if err := json.NewDecoder(strings.NewReader(authJson)).Decode(authConfig); err != nil { // for a pull it is not an error if no auth was given - // to increase compatibilit to existing api it is defaulting to be empty + // to increase compatibility with the existing api it is defaulting to be empty authConfig = &auth.AuthConfig{} } } @@ -495,17 +493,14 @@ func postImagesPush(srv *Server, version float64, w http.ResponseWriter, r *http } authConfig := &auth.AuthConfig{} - authEncoded := r.Form.Get("authConfig") - if authEncoded != "" { - // the new format is to handle the authConfg as a parameter - authJson := base64.NewDecoder(base64.URLEncoding, strings.NewReader(authEncoded)) - if err := json.NewDecoder(authJson).Decode(authConfig); err != nil { - // for a pull it is not an error if no auth was given - // to increase compatibilit to existing api it is defaulting to be empty + authJson := r.Header.Get("X-Registry-Auth") + if authJson != "" { + if err := json.NewDecoder(strings.NewReader(authJson)).Decode(authConfig); err != nil { + // to increase compatibility with the existing api it is defaulting to be empty authConfig = &auth.AuthConfig{} } } else { - // the old format is supported for compatibility if there was no authConfig parameter + // the old format is supported for compatibility if there was no authConfig header if err := json.NewDecoder(r.Body).Decode(authConfig); err != nil { return err } diff --git a/commands.go b/commands.go index 8aba44b594..83aa7bfeb9 100644 --- a/commands.go +++ b/commands.go @@ -128,7 +128,7 @@ func (cli *DockerCli) CmdInsert(args ...string) error { v.Set("url", cmd.Arg(1)) v.Set("path", cmd.Arg(2)) - if err := cli.stream("POST", "/images/"+cmd.Arg(0)+"/insert?"+v.Encode(), nil, cli.out); err != nil { + if err := cli.stream("POST", "/images/"+cmd.Arg(0)+"/insert?"+v.Encode(), nil, cli.out, nil); err != nil { return err } return nil @@ -795,7 +795,7 @@ func (cli *DockerCli) CmdImport(args ...string) error { v.Set("tag", tag) v.Set("fromSrc", src) - err := cli.stream("POST", "/images/create?"+v.Encode(), cli.in, cli.out) + err := cli.stream("POST", "/images/create?"+v.Encode(), cli.in, cli.out, nil) if err != nil { return err } @@ -841,9 +841,13 @@ func (cli *DockerCli) CmdPush(args ...string) error { if err != nil { return err } - v.Set("authConfig", base64.URLEncoding.EncodeToString(buf)) + registryAuthHeader := []string{ + string(buf), + } - return cli.stream("POST", "/images/"+name+"/push?"+v.Encode(), nil, cli.out) + return cli.stream("POST", "/images/"+name+"/push?"+v.Encode(), nil, cli.out, map[string][]string{ + "X-Registry-Auth": registryAuthHeader, + }) } if err := push(authConfig); err != nil { @@ -896,9 +900,13 @@ func (cli *DockerCli) CmdPull(args ...string) error { if err != nil { return err } - v.Set("authConfig", base64.URLEncoding.EncodeToString(buf)) + registryAuthHeader := []string{ + string(buf), + } - return cli.stream("POST", "/images/create?"+v.Encode(), nil, cli.out) + return cli.stream("POST", "/images/create?"+v.Encode(), nil, cli.out, map[string][]string{ + "X-Registry-Auth": registryAuthHeader, + }) } if err := pull(authConfig); err != nil { @@ -1143,7 +1151,7 @@ func (cli *DockerCli) CmdEvents(args ...string) error { v.Set("since", *since) } - if err := cli.stream("GET", "/events?"+v.Encode(), nil, cli.out); err != nil { + if err := cli.stream("GET", "/events?"+v.Encode(), nil, cli.out, nil); err != nil { return err } return nil @@ -1160,7 +1168,7 @@ func (cli *DockerCli) CmdExport(args ...string) error { return nil } - if err := cli.stream("GET", "/containers/"+cmd.Arg(0)+"/export", nil, cli.out); err != nil { + if err := cli.stream("GET", "/containers/"+cmd.Arg(0)+"/export", nil, cli.out, nil); err != nil { return err } return nil @@ -1451,7 +1459,7 @@ func (cli *DockerCli) CmdRun(args ...string) error { } v.Set("authConfig", base64.URLEncoding.EncodeToString(buf)) - err = cli.stream("POST", "/images/create?"+v.Encode(), nil, cli.err) + err = cli.stream("POST", "/images/create?"+v.Encode(), nil, cli.err, nil) if err != nil { return err } @@ -1628,7 +1636,7 @@ func (cli *DockerCli) call(method, path string, data interface{}) ([]byte, int, return body, resp.StatusCode, nil } -func (cli *DockerCli) stream(method, path string, in io.Reader, out io.Writer) error { +func (cli *DockerCli) stream(method, path string, in io.Reader, out io.Writer, headers map[string][]string) error { if (method == "POST" || method == "PUT") && in == nil { in = bytes.NewReader([]byte{}) } @@ -1641,6 +1649,13 @@ func (cli *DockerCli) stream(method, path string, in io.Reader, out io.Writer) e if method == "POST" { req.Header.Set("Content-Type", "plain/text") } + + if headers != nil { + for k, v := range headers { + req.Header[k] = v + } + } + dial, err := net.Dial(cli.proto, cli.addr) if err != nil { if strings.Contains(err.Error(), "connection refused") { From dd4aab8411ec070baeb14ecc43f683d12b722746 Mon Sep 17 00:00:00 2001 From: shin- Date: Fri, 30 Aug 2013 22:49:37 +0200 Subject: [PATCH 106/215] Use base64 encoding --- api.go | 18 +++++++++++------- commands.go | 4 ++-- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/api.go b/api.go index 28765b1b5f..39d242099d 100644 --- a/api.go +++ b/api.go @@ -2,6 +2,7 @@ package docker import ( "code.google.com/p/go.net/websocket" + "encoding/base64" "encoding/json" "fmt" "github.com/dotcloud/docker/auth" @@ -394,10 +395,11 @@ func postImagesCreate(srv *Server, version float64, w http.ResponseWriter, r *ht tag := r.Form.Get("tag") repo := r.Form.Get("repo") - authJson := r.Header.Get("X-Registry-Auth") + authEncoded := r.Header.Get("X-Registry-Auth") authConfig := &auth.AuthConfig{} - if authJson != "" { - if err := json.NewDecoder(strings.NewReader(authJson)).Decode(authConfig); err != nil { + if authEncoded != "" { + authJson := base64.NewDecoder(base64.URLEncoding, strings.NewReader(authEncoded)) + if err := json.NewDecoder(authJson).Decode(authConfig); err != nil { // for a pull it is not an error if no auth was given // to increase compatibility with the existing api it is defaulting to be empty authConfig = &auth.AuthConfig{} @@ -493,10 +495,12 @@ func postImagesPush(srv *Server, version float64, w http.ResponseWriter, r *http } authConfig := &auth.AuthConfig{} - authJson := r.Header.Get("X-Registry-Auth") - if authJson != "" { - if err := json.NewDecoder(strings.NewReader(authJson)).Decode(authConfig); err != nil { - // to increase compatibility with the existing api it is defaulting to be empty + authEncoded := r.Header.Get("X-Registry-Auth") + if authEncoded != "" { + // the new format is to handle the authConfig as a header + authJson := base64.NewDecoder(base64.URLEncoding, strings.NewReader(authEncoded)) + if err := json.NewDecoder(authJson).Decode(authConfig); err != nil { + // to increase compatibility to existing api it is defaulting to be empty authConfig = &auth.AuthConfig{} } } else { diff --git a/commands.go b/commands.go index 83aa7bfeb9..24f6de13a6 100644 --- a/commands.go +++ b/commands.go @@ -842,7 +842,7 @@ func (cli *DockerCli) CmdPush(args ...string) error { return err } registryAuthHeader := []string{ - string(buf), + base64.URLEncoding.EncodeToString(buf), } return cli.stream("POST", "/images/"+name+"/push?"+v.Encode(), nil, cli.out, map[string][]string{ @@ -901,7 +901,7 @@ func (cli *DockerCli) CmdPull(args ...string) error { return err } registryAuthHeader := []string{ - string(buf), + base64.URLEncoding.EncodeToString(buf), } return cli.stream("POST", "/images/create?"+v.Encode(), nil, cli.out, map[string][]string{ From ded973219e997f52634eb18d0cfe828472412dd8 Mon Sep 17 00:00:00 2001 From: Marco Hennings Date: Fri, 30 Aug 2013 23:15:07 +0200 Subject: [PATCH 107/215] Move auth header on run cmd --- commands.go | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/commands.go b/commands.go index 24f6de13a6..b373267456 100644 --- a/commands.go +++ b/commands.go @@ -1457,9 +1457,13 @@ func (cli *DockerCli) CmdRun(args ...string) error { if err != nil { return err } - v.Set("authConfig", base64.URLEncoding.EncodeToString(buf)) - err = cli.stream("POST", "/images/create?"+v.Encode(), nil, cli.err, nil) + registryAuthHeader := []string{ + base64.URLEncoding.EncodeToString(buf), + } + err = cli.stream("POST", "/images/create?"+v.Encode(), nil, cli.err, map[string][]string{ + "X-Registry-Auth": registryAuthHeader, + }) if err != nil { return err } From fac4cedcc105a7b5a6789917ddf9a5e9745bd2d3 Mon Sep 17 00:00:00 2001 From: Hector Castro Date: Tue, 3 Sep 2013 16:29:07 -0400 Subject: [PATCH 108/215] Add a Docker example for running Riak. --- docs/sources/examples/index.rst | 1 + .../sources/examples/running_riak_service.rst | 151 ++++++++++++++++++ 2 files changed, 152 insertions(+) create mode 100644 docs/sources/examples/running_riak_service.rst diff --git a/docs/sources/examples/index.rst b/docs/sources/examples/index.rst index 2664b95e54..1114790280 100644 --- a/docs/sources/examples/index.rst +++ b/docs/sources/examples/index.rst @@ -22,3 +22,4 @@ Contents: couchdb_data_volumes postgresql_service mongodb + running_riak_service diff --git a/docs/sources/examples/running_riak_service.rst b/docs/sources/examples/running_riak_service.rst new file mode 100644 index 0000000000..d98de6a77c --- /dev/null +++ b/docs/sources/examples/running_riak_service.rst @@ -0,0 +1,151 @@ +:title: Running a Riak service +:description: Build a Docker image with Riak pre-installed +:keywords: docker, example, package installation, networking, riak + +Riak Service +============================== + +.. include:: example_header.inc + +The goal of this example is to show you how to build a Docker image with Riak +pre-installed. + +Creating a ``Dockerfile`` ++++++++++++++++++++++++++ + +Create an empty file called ``Dockerfile``: + +.. code-block:: bash + + touch Dockerfile + +Next, define the parent image you want to use to build your image on top of. +We’ll use `Ubuntu `_ (tag: ``latest``), +which is available on the `docker index `_: + +.. code-block:: bash + + # Riak + # + # VERSION 0.1.0 + + # Use the Ubuntu base image provided by dotCloud + FROM ubuntu:latest + MAINTAINER Hector Castro hector@basho.com + +Next, we update the APT cache and apply any updates: + +.. code-block:: bash + + # Update the APT cache + RUN sed -i.bak 's/main$/main universe/' /etc/apt/sources.list + RUN apt-get update + RUN apt-get upgrade -y + +After that, we install and setup a few dependencies: + +- ``curl`` is used to download Basho's APT repository key +- ``lsb-release`` helps us derive the Ubuntu release codename +- ``openssh-server`` allows us to login to containers remotely and join Riak + nodes to form a cluster +- ``supervisor`` is used manage the OpenSSH and Riak processes + +.. code-block:: bash + + # Install and setup project dependencies + RUN apt-get install -y curl lsb-release supervisor openssh-server + + RUN mkdir -p /var/run/sshd + RUN mkdir -p /var/log/supervisor + + RUN locale-gen en_US en_US.UTF-8 + + ADD supervisord.conf /etc/supervisor/conf.d/supervisord.conf + + RUN echo 'root:basho' | chpasswd + +Next, we add Basho's APT repository: + +.. code-block:: bash + + RUN curl -s http://apt.basho.com/gpg/basho.apt.key | apt-key add -- + RUN echo "deb http://apt.basho.com $(lsb_release -cs) main" > /etc/apt/sources.list.d/basho.list + RUN apt-get update + +After that, we install Riak and alter a few defaults: + +.. code-block:: bash + + # Install Riak and prepare it to run + RUN apt-get install -y riak + RUN sed -i.bak 's/127.0.0.1/0.0.0.0/' /etc/riak/app.config + RUN echo "ulimit -n 4096" >> /etc/default/riak + +Almost there. Next, we add a hack to get us by the lack of ``initctl``: + +.. code-block:: bash + + # Hack for initctl + # See: https://github.com/dotcloud/docker/issues/1024 + RUN dpkg-divert --local --rename --add /sbin/initctl + RUN ln -s /bin/true /sbin/initctl + +Then, we expose the Riak Protocol Buffers and HTTP interfaces, along with SSH: + +.. code-block:: bash + + # Expose Riak Protocol Buffers and HTTP interfaces, along with SSH + EXPOSE 8087 8098 22 + +Finally, run ``supervisord`` so that Riak and OpenSSH are started: + +.. code-block:: bash + + CMD ["/usr/bin/supervisord"] + +Create a ``supervisord`` configuration file ++++++++++++++++++++++++++++++++++++++++++++ + +Create an empty file called ``supervisord.conf``. Make sure it's at the same +level as your ``Dockerfile``: + +.. code-block:: bash + + touch supervisord.conf + +Populate it with the following program definitions: + +.. code-block:: bash + + [supervisord] + nodaemon=true + + [program:sshd] + command=/usr/sbin/sshd -D + stdout_logfile=/var/log/supervisor/%(program_name)s.log + stderr_logfile=/var/log/supervisor/%(program_name)s.log + autorestart=true + + [program:riak] + command=bash -c ". /etc/default/riak && /usr/sbin/riak console" + pidfile=/var/log/riak/riak.pid + stdout_logfile=/var/log/supervisor/%(program_name)s.log + stderr_logfile=/var/log/supervisor/%(program_name)s.log + +Build the Docker image for Riak ++++++++++++++++++++++++++++++++ + +Now you should be able to build a Docker image for Riak: + +.. code-block:: bash + + docker build -t "/riak" . + +Next steps +++++++++++ + +Riak is a distributed database. Many production deployments consist of `at +least five nodes `_. See the `docker-riak `_ project details on how to deploy a Riak cluster using Docker and +Pipework. From 846524115bb6d1ce850f9babba59467c1054fbdd Mon Sep 17 00:00:00 2001 From: Daniel Mizyrycki Date: Tue, 3 Sep 2013 15:38:06 -0700 Subject: [PATCH 109/215] testing, issue #1620: Add index functional test on docker-ci --- testing/Vagrantfile | 10 +++-- testing/buildbot/master.cfg | 20 ++++++--- testing/buildbot/requirements.txt | 1 + testing/functionaltests/test_index.py | 61 +++++++++++++++++++++++++++ 4 files changed, 82 insertions(+), 10 deletions(-) create mode 100755 testing/functionaltests/test_index.py diff --git a/testing/Vagrantfile b/testing/Vagrantfile index fd1c5916c8..1d15709a36 100644 --- a/testing/Vagrantfile +++ b/testing/Vagrantfile @@ -40,10 +40,12 @@ Vagrant::Config.run do |config| "#{ENV['SMTP_PWD']} #{ENV['EMAIL_RCP']}; " \ "#{CFG_PATH}/setup_credentials.sh #{USER} " \ "#{ENV['REGISTRY_USER']} #{ENV['REGISTRY_PWD']}; " - # Install docker dependencies - pkg_cmd << "curl -s https://go.googlecode.com/files/go1.1.1.linux-amd64.tar.gz | " \ - "tar -v -C /usr/local -xz; ln -s /usr/local/go/bin/go /usr/bin/go; " \ - "DEBIAN_FRONTEND=noninteractive apt-get install -q -y lxc git mercurial aufs-tools make; " \ + # Install docker and testing dependencies + pkg_cmd << "curl -s https://go.googlecode.com/files/go1.1.2.linux-amd64.tar.gz | " \ + " tar -v -C /usr/local -xz; ln -s /usr/local/go/bin/go /usr/bin/go; " \ + "curl -s https://phantomjs.googlecode.com/files/phantomjs-1.9.1-linux-x86_64.tar.bz2 | " \ + " tar jx -C /usr/bin --strip-components=2 phantomjs-1.9.1-linux-x86_64/bin/phantomjs; " \ + "DEBIAN_FRONTEND=noninteractive apt-get install -q -y lxc git mercurial aufs-tools make libfontconfig; " \ "export GOPATH=/data/docker-dependencies; go get -d github.com/dotcloud/docker; " \ "rm -rf ${GOPATH}/src/github.com/dotcloud/docker; " # Activate new kernel options diff --git a/testing/buildbot/master.cfg b/testing/buildbot/master.cfg index cc261c7a3e..7962fe9e9d 100644 --- a/testing/buildbot/master.cfg +++ b/testing/buildbot/master.cfg @@ -45,16 +45,17 @@ c['slavePortnum'] = PORT_MASTER # Schedulers c['schedulers'] = [ForceScheduler(name='trigger', builderNames=[BUILDER_NAME, - 'registry','coverage'])] + 'index','registry','coverage'])] c['schedulers'] += [SingleBranchScheduler(name="all", change_filter=filter.ChangeFilter(branch='master'), treeStableTimer=None, builderNames=[BUILDER_NAME])] c['schedulers'] += [SingleBranchScheduler(name='pullrequest', change_filter=filter.ChangeFilter(category='github_pullrequest'), treeStableTimer=None, builderNames=['pullrequest'])] -c['schedulers'] += [Nightly(name='daily', branch=None, builderNames=['coverage','registry'], +c['schedulers'] += [Nightly(name='daily', branch=None, builderNames=['coverage'], hour=0, minute=30)] - +c['schedulers'] += [Nightly(name='every4hrs', branch=None, builderNames=['registry','index'], + hour=range(0,24,4), minute=15)] # Builders # Docker commit test @@ -64,7 +65,6 @@ factory.addStep(ShellCommand(description='Docker',logEnviron=False,usePTY=True, "cp -r {2}-dependencies/src {0}; export GOPATH={0}; go get {3}; cd {1}; " "git reset --hard %(src::revision)s; go test -v".format( BUILDER_PATH, BUILDER_PATH+'/src/'+GITHUB_DOCKER, DOCKER_PATH, GITHUB_DOCKER))])) - c['builders'] = [BuilderConfig(name=BUILDER_NAME,slavenames=['buildworker'], factory=factory)] @@ -91,16 +91,24 @@ factory.addStep(ShellCommand(description='Coverage',logEnviron=False,usePTY=True c['builders'] += [BuilderConfig(name='coverage',slavenames=['buildworker'], factory=factory)] -# Registry Functionaltest builder +# Registry functional test factory = BuildFactory() factory.addStep(ShellCommand(description='registry', logEnviron=False, command='. {0}/master/credentials.cfg; ' '{1}/testing/functionaltests/test_registry.sh'.format(BUILDBOT_PATH, DOCKER_PATH), usePTY=True)) - c['builders'] += [BuilderConfig(name='registry',slavenames=['buildworker'], factory=factory)] +# Index functional test +factory = BuildFactory() +factory.addStep(ShellCommand(description='index', logEnviron=False, + command='. {0}/master/credentials.cfg; ' + '{1}/testing/functionaltests/test_index.py'.format(BUILDBOT_PATH, + DOCKER_PATH), usePTY=True)) +c['builders'] += [BuilderConfig(name='index',slavenames=['buildworker'], + factory=factory)] + # Status authz_cfg = authz.Authz(auth=auth.BasicAuth([(TEST_USER, TEST_PWD)]), diff --git a/testing/buildbot/requirements.txt b/testing/buildbot/requirements.txt index c5d7dd0191..d2dcf1d125 100644 --- a/testing/buildbot/requirements.txt +++ b/testing/buildbot/requirements.txt @@ -6,3 +6,4 @@ nose==1.2.1 requests==1.1.0 flask==0.10.1 simplejson==2.3.2 +selenium==2.35.0 diff --git a/testing/functionaltests/test_index.py b/testing/functionaltests/test_index.py new file mode 100755 index 0000000000..fd002c81e8 --- /dev/null +++ b/testing/functionaltests/test_index.py @@ -0,0 +1,61 @@ +#!/usr/bin/python + +import os +username, password = os.environ['DOCKER_CREDS'].split(':') + +from selenium import webdriver +from selenium.webdriver.common.by import By +from selenium.webdriver.common.keys import Keys +from selenium.webdriver.support.ui import Select +from selenium.common.exceptions import NoSuchElementException +import unittest, time, re + +class Docker(unittest.TestCase): + def setUp(self): + self.driver = webdriver.PhantomJS() + self.driver.implicitly_wait(30) + self.base_url = "http://www.docker.io/" + self.verificationErrors = [] + self.accept_next_alert = True + + def test_docker(self): + driver = self.driver + print "Login into {0} as login user {1} ...".format(self.base_url,username) + driver.get(self.base_url + "/") + driver.find_element_by_link_text("INDEX").click() + driver.find_element_by_link_text("login").click() + driver.find_element_by_id("id_username").send_keys(username) + driver.find_element_by_id("id_password").send_keys(password) + print "Checking login user ..." + driver.find_element_by_css_selector("input[type=\"submit\"]").click() + try: self.assertEqual("test", driver.find_element_by_css_selector("h3").text) + except AssertionError as e: self.verificationErrors.append(str(e)) + print "Login user {0} found".format(username) + + def is_element_present(self, how, what): + try: self.driver.find_element(by=how, value=what) + except NoSuchElementException, e: return False + return True + + def is_alert_present(self): + try: self.driver.switch_to_alert() + except NoAlertPresentException, e: return False + return True + + def close_alert_and_get_its_text(self): + try: + alert = self.driver.switch_to_alert() + alert_text = alert.text + if self.accept_next_alert: + alert.accept() + else: + alert.dismiss() + return alert_text + finally: self.accept_next_alert = True + + def tearDown(self): + self.driver.quit() + self.assertEqual([], self.verificationErrors) + +if __name__ == "__main__": + unittest.main() From 52fe45249798991a35f5a5b5a4e1af26ea42221c Mon Sep 17 00:00:00 2001 From: Markus Fix Date: Tue, 3 Sep 2013 17:19:05 +0200 Subject: [PATCH 110/215] Changed docker apt repo URI from https to http because the http driver for apt is not installed by default --- Vagrantfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Vagrantfile b/Vagrantfile index 53620eabc6..4767a8b1cc 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -18,7 +18,7 @@ Vagrant::Config.run do |config| if Dir.glob("#{File.dirname(__FILE__)}/.vagrant/machines/default/*/id").empty? # Add lxc-docker package pkg_cmd = "wget -q -O - http://get.docker.io/gpg | apt-key add -;" \ - "echo deb https://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list;" \ + "echo deb http://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list;" \ "apt-get update -qq; apt-get install -q -y --force-yes lxc-docker; " # Add Ubuntu raring backported kernel pkg_cmd << "apt-get update -qq; apt-get install -q -y linux-image-generic-lts-raring; " From 91ee67954961e9f8e5b4827022c2a3aee7997253 Mon Sep 17 00:00:00 2001 From: Daniel Mizyrycki Date: Tue, 3 Sep 2013 17:14:49 -0700 Subject: [PATCH 111/215] pr #1718: Fetch docker gpg over https --- Vagrantfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Vagrantfile b/Vagrantfile index 4767a8b1cc..0b4df3d684 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -17,7 +17,7 @@ Vagrant::Config.run do |config| # Provision docker and new kernel if deployment was not done if Dir.glob("#{File.dirname(__FILE__)}/.vagrant/machines/default/*/id").empty? # Add lxc-docker package - pkg_cmd = "wget -q -O - http://get.docker.io/gpg | apt-key add -;" \ + pkg_cmd = "wget -q -O - https://get.docker.io/gpg | apt-key add -;" \ "echo deb http://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list;" \ "apt-get update -qq; apt-get install -q -y --force-yes lxc-docker; " # Add Ubuntu raring backported kernel From b3a70d767d913ec476bc1af53983c91a10d17f84 Mon Sep 17 00:00:00 2001 From: shin- Date: Wed, 4 Sep 2013 02:20:50 +0200 Subject: [PATCH 112/215] Compute dependency graph and upload layers in the right order when pushing --- server.go | 96 ++++++++++++++++++++++++------------ utils/utils.go | 116 ++++++++++++++++++++++++++++++++++++++++++++ utils/utils_test.go | 57 ++++++++++++++++++++++ 3 files changed, 237 insertions(+), 32 deletions(-) diff --git a/server.go b/server.go index 646cb44877..69edabf07a 100644 --- a/server.go +++ b/server.go @@ -667,29 +667,57 @@ func (srv *Server) ImagePull(localName string, tag string, out io.Writer, sf *ut // Retrieve the all the images to be uploaded in the correct order // Note: we can't use a map as it is not ordered -func (srv *Server) getImageList(localRepo map[string]string) ([]*registry.ImgData, error) { - var imgList []*registry.ImgData +func (srv *Server) getImageList(localRepo map[string]string) ([][]*registry.ImgData, error) { + imgList := map[string]*registry.ImgData{} + depGraph := utils.NewDependencyGraph() - imageSet := make(map[string]struct{}) for tag, id := range localRepo { img, err := srv.runtime.graph.Get(id) if err != nil { return nil, err } - img.WalkHistory(func(img *Image) error { - if _, exists := imageSet[img.ID]; exists { + depGraph.NewNode(img.ID) + img.WalkHistory(func(current *Image) error { + imgList[current.ID] = ®istry.ImgData{ + ID: current.ID, + Tag: tag, + } + parent, err := current.GetParent() + if err != nil { + return err + } + if parent == nil { return nil } - imageSet[img.ID] = struct{}{} - - imgList = append([]*registry.ImgData{{ - ID: img.ID, - Tag: tag, - }}, imgList...) + depGraph.NewNode(parent.ID) + depGraph.AddDependency(current.ID, parent.ID) return nil }) } - return imgList, nil + + traversalMap, err := depGraph.GenerateTraversalMap() + if err != nil { + return nil, err + } + + utils.Debugf("Traversal map: %v", traversalMap) + result := [][]*registry.ImgData{} + for _, round := range traversalMap { + dataRound := []*registry.ImgData{} + for _, imgID := range round { + dataRound = append(dataRound, imgList[imgID]) + } + result = append(result, dataRound) + } + return result, nil +} + +func flatten(slc [][]*registry.ImgData) []*registry.ImgData { + result := []*registry.ImgData{} + for _, x := range slc { + result = append(result, x...) + } + return result } func (srv *Server) pushRepository(r *registry.Registry, out io.Writer, localName, remoteName string, localRepo map[string]string, indexEp string, sf *utils.StreamFormatter) error { @@ -698,39 +726,43 @@ func (srv *Server) pushRepository(r *registry.Registry, out io.Writer, localName if err != nil { return err } + flattenedImgList := flatten(imgList) out.Write(sf.FormatStatus("", "Sending image list")) var repoData *registry.RepositoryData - repoData, err = r.PushImageJSONIndex(indexEp, remoteName, imgList, false, nil) + repoData, err = r.PushImageJSONIndex(indexEp, remoteName, flattenedImgList, false, nil) if err != nil { return err } for _, ep := range repoData.Endpoints { out.Write(sf.FormatStatus("", "Pushing repository %s (%d tags)", localName, len(localRepo))) - // For each image within the repo, push them - for _, elem := range imgList { - if _, exists := repoData.ImgList[elem.ID]; exists { - out.Write(sf.FormatStatus("", "Image %s already pushed, skipping", elem.ID)) - continue - } else if r.LookupRemoteImage(elem.ID, ep, repoData.Tokens) { - out.Write(sf.FormatStatus("", "Image %s already pushed, skipping", elem.ID)) - continue - } - if checksum, err := srv.pushImage(r, out, remoteName, elem.ID, ep, repoData.Tokens, sf); err != nil { - // FIXME: Continue on error? - return err - } else { - elem.Checksum = checksum - } - out.Write(sf.FormatStatus("", "Pushing tags for rev [%s] on {%s}", elem.ID, ep+"repositories/"+remoteName+"/tags/"+elem.Tag)) - if err := r.PushRegistryTag(remoteName, elem.ID, elem.Tag, ep, repoData.Tokens); err != nil { - return err + // This section can not be parallelized (each round depends on the previous one) + for _, round := range imgList { + // FIXME: This section can be parallelized + for _, elem := range round { + if _, exists := repoData.ImgList[elem.ID]; exists { + out.Write(sf.FormatStatus("", "Image %s already pushed, skipping", elem.ID)) + continue + } else if r.LookupRemoteImage(elem.ID, ep, repoData.Tokens) { + out.Write(sf.FormatStatus("", "Image %s already pushed, skipping", elem.ID)) + continue + } + if checksum, err := srv.pushImage(r, out, remoteName, elem.ID, ep, repoData.Tokens, sf); err != nil { + // FIXME: Continue on error? + return err + } else { + elem.Checksum = checksum + } + out.Write(sf.FormatStatus("", "Pushing tags for rev [%s] on {%s}", elem.ID, ep+"repositories/"+remoteName+"/tags/"+elem.Tag)) + if err := r.PushRegistryTag(remoteName, elem.ID, elem.Tag, ep, repoData.Tokens); err != nil { + return err + } } } } - if _, err := r.PushImageJSONIndex(indexEp, remoteName, imgList, true, repoData.Endpoints); err != nil { + if _, err := r.PushImageJSONIndex(indexEp, remoteName, flattenedImgList, true, repoData.Endpoints); err != nil { return err } diff --git a/utils/utils.go b/utils/utils.go index e8cf08aaba..b761da0fbd 100644 --- a/utils/utils.go +++ b/utils/utils.go @@ -889,3 +889,119 @@ func UserLookup(uid string) (*user.User, error) { } return nil, fmt.Errorf("User not found in /etc/passwd") } + +type DependencyGraph struct{ + nodes map[string]*DependencyNode +} + +type DependencyNode struct{ + id string + deps map[*DependencyNode]bool +} + +func NewDependencyGraph() DependencyGraph { + return DependencyGraph{ + nodes: map[string]*DependencyNode{}, + } +} + +func (graph *DependencyGraph) addNode(node *DependencyNode) string { + if graph.nodes[node.id] == nil { + graph.nodes[node.id] = node + } + return node.id +} + +func (graph *DependencyGraph) NewNode(id string) string { + if graph.nodes[id] != nil { + return id + } + nd := &DependencyNode{ + id: id, + deps: map[*DependencyNode]bool{}, + } + graph.addNode(nd) + return id +} + +func (graph *DependencyGraph) AddDependency(node, to string) error { + if graph.nodes[node] == nil { + return fmt.Errorf("Node %s does not belong to this graph", node) + } + + if graph.nodes[to] == nil { + return fmt.Errorf("Node %s does not belong to this graph", to) + } + + if node == to { + return fmt.Errorf("Dependency loops are forbidden!") + } + + graph.nodes[node].addDependency(graph.nodes[to]) + return nil +} + +func (node *DependencyNode) addDependency(to *DependencyNode) bool { + node.deps[to] = true + return node.deps[to] +} + +func (node *DependencyNode) Degree() int { + return len(node.deps) +} + +// The magic happens here :: +func (graph *DependencyGraph) GenerateTraversalMap() ([][]string, error) { + Debugf("Generating traversal map. Nodes: %d", len(graph.nodes)) + result := [][]string{} + processed := map[*DependencyNode]bool{} + // As long as we haven't processed all nodes... + for len(processed) < len(graph.nodes) { + // Use a temporary buffer for processed nodes, otherwise + // nodes that depend on each other could end up in the same round. + tmp_processed := []*DependencyNode{} + for _, node := range graph.nodes { + // If the node has more dependencies than what we have cleared, + // it won't be valid for this round. + if node.Degree() > len(processed) { + continue + } + // If it's already processed, get to the next one + if processed[node] { + continue + } + // It's not been processed yet and has 0 deps. Add it! + // (this is a shortcut for what we're doing below) + if node.Degree() == 0 { + tmp_processed = append(tmp_processed, node) + continue + } + // If at least one dep hasn't been processed yet, we can't + // add it. + ok := true + for dep, _ := range node.deps { + if !processed[dep] { + ok = false + break + } + } + // All deps have already been processed. Add it! + if ok { + tmp_processed = append(tmp_processed, node) + } + } + Debugf("Round %d: found %d available nodes", len(result), len(tmp_processed)) + // If no progress has been made this round, + // that means we have circular dependencies. + if len(tmp_processed) == 0 { + return nil, fmt.Errorf("Could not find a solution to this dependency graph") + } + round := []string{} + for _, nd := range tmp_processed { + round = append(round, nd.id) + processed[nd] = true + } + result = append(result, round) + } + return result, nil +} \ No newline at end of file diff --git a/utils/utils_test.go b/utils/utils_test.go index 3341650860..be796b2381 100644 --- a/utils/utils_test.go +++ b/utils/utils_test.go @@ -365,3 +365,60 @@ func TestParseRelease(t *testing.T) { assertParseRelease(t, "3.4.54.longterm-1", &KernelVersionInfo{Kernel: 3, Major: 4, Minor: 54, Flavor: "1"}, 0) assertParseRelease(t, "3.8.0-19-generic", &KernelVersionInfo{Kernel: 3, Major: 8, Minor: 0, Flavor: "19-generic"}, 0) } + + +func TestDependencyGraphCircular(t *testing.T) { + g1 := NewDependencyGraph() + a := g1.NewNode("a") + b := g1.NewNode("b") + g1.AddDependency(a, b) + g1.AddDependency(b, a) + res, err := g1.GenerateTraversalMap() + if res != nil { + t.Fatalf("Expected nil result") + } + if err == nil { + t.Fatalf("Expected error (circular graph can not be resolved)") + } +} + +func TestDependencyGraph(t *testing.T) { + g1 := NewDependencyGraph() + a := g1.NewNode("a") + b := g1.NewNode("b") + c := g1.NewNode("c") + d := g1.NewNode("d") + g1.AddDependency(b, a) + g1.AddDependency(c, a) + g1.AddDependency(d, c) + g1.AddDependency(d, b) + res, err := g1.GenerateTraversalMap() + + if err != nil { + t.Fatalf("%s", err) + } + + if res == nil { + t.Fatalf("Unexpected nil result") + } + + if len(res) != 3 { + t.Fatalf("Expected map of length 3, found %d instead", len(res)) + } + + if len(res[0]) != 1 || res[0][0] != "a" { + t.Fatalf("Expected [a], found %v instead", res[0]) + } + + if len(res[1]) != 2 { + t.Fatalf("Expected 2 nodes for step 2, found %d", len(res[1])) + } + + if (res[1][0] != "b" && res[1][1] != "b") || (res[1][0] != "c" && res[1][1] != "c") { + t.Fatalf("Expected [b, c], found %v instead", res[1]) + } + + if len(res[2]) != 1 || res[2][0] != "d" { + t.Fatalf("Expected [d], found %v instead", res[2]) + } +} \ No newline at end of file From 251d1261b0c2edfc8b014141cc03d32c30263226 Mon Sep 17 00:00:00 2001 From: Briehan Lombaard Date: Wed, 4 Sep 2013 10:52:53 +0200 Subject: [PATCH 113/215] Fixed typos --- docs/sources/commandline/command/run.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/sources/commandline/command/run.rst b/docs/sources/commandline/command/run.rst index cd283669e6..d29e70dd50 100644 --- a/docs/sources/commandline/command/run.rst +++ b/docs/sources/commandline/command/run.rst @@ -67,7 +67,7 @@ use-cases, like running Docker within Docker. docker run -w /path/to/dir/ -i -t ubuntu pwd -The ``-w`` lets the command beeing executed inside directory given, +The ``-w`` lets the command being executed inside directory given, here /path/to/dir/. If the path does not exists it is created inside the container. @@ -76,8 +76,8 @@ container. docker run -v `pwd`:`pwd` -w `pwd` -i -t ubuntu pwd The ``-v`` flag mounts the current working directory into the container. -The ``-w`` lets the command beeing executed inside the current -working directory, by changeing into the directory to the value +The ``-w`` lets the command being executed inside the current +working directory, by changing into the directory to the value returned by ``pwd``. So this combination executes the command using the container, but inside the current working directory. From 9ce1d02ef6b0593861809248307d058656f56304 Mon Sep 17 00:00:00 2001 From: Tianon Gravi Date: Wed, 4 Sep 2013 02:45:54 -0600 Subject: [PATCH 114/215] Add Gentoo documentation --- docs/sources/installation/gentoolinux.rst | 98 +++++++++++++++++++++++ docs/sources/installation/index.rst | 1 + 2 files changed, 99 insertions(+) create mode 100644 docs/sources/installation/gentoolinux.rst diff --git a/docs/sources/installation/gentoolinux.rst b/docs/sources/installation/gentoolinux.rst new file mode 100644 index 0000000000..6fdd51747a --- /dev/null +++ b/docs/sources/installation/gentoolinux.rst @@ -0,0 +1,98 @@ +:title: Installation on Gentoo Linux +:description: Docker installation instructions and nuances for Gentoo Linux. +:keywords: gentoo linux, virtualization, docker, documentation, installation + +.. _gentoo_linux: + +Gentoo Linux +============ + +.. include:: install_header.inc + +.. include:: install_unofficial.inc + +Installing Docker on Gentoo Linux can be accomplished by using the overlay provided at https://github.com/tianon/docker-overlay. The most up-to-date documentation for properly installing the overlay can be found in the overlay README. The information here is provided for reference, and may be out of date. + +Installation +^^^^^^^^^^^^ + +Ensure that layman is installed: + +.. code-block:: bash + + sudo emerge -av app-portage/layman + +Using your favorite editor, add ``https://raw.github.com/tianon/docker-overlay/master/repositories.xml`` to the ``overlays`` section in ``/etc/layman/layman.cfg`` (as per instructions on the `Gentoo Wiki `_), then invoke the following: + +.. code-block:: bash + + sudo layman -f -a docker + +Once that completes, the ``app-emulation/lxc-docker`` package will be available for emerge: + +.. code-block:: bash + + sudo emerge -av app-emulation/lxc-docker + +If you prefer to use the official binaries, or just do not wish to compile docker, emerge ``app-emulation/lxc-docker-bin`` instead. It is important to remember that Gentoo is still an unsupported platform, even when using the official binaries. + +The package should already include all the necessary dependencies. For the simplest installation experiece, use ``sys-kernel/aufs-sources`` directly as your kernel sources. If you prefer not to use ``sys-kernel/aufs-sources``, the portage tree also contains ``sys-fs/aufs3``, which contains the patches necessary for adding AUFS support to other kernel source packages (and a ``kernel-patch`` use flag to perform the patching automatically). + +Between ``app-emulation/lxc`` and ``app-emulation/lxc-docker``, all the necessary kernel configuration flags should be checked for and warned about in the standard manner. + +If any issues arise from this ebuild or the resulting binary, including and especially missing kernel configuration flags and/or dependencies, `open an issue `_ on the docker-overlay repository or ping tianon in the #docker IRC channel. + +Starting Docker +^^^^^^^^^^^^^^^ + +Ensure that you are running a kernel that includes the necessary AUFS support and includes all the necessary modules and/or configuration for LXC. + +OpenRC +------ + +To start the docker daemon: + +.. code-block:: bash + + sudo /etc/init.d/docker start + +To start on system boot: + +.. code-block:: bash + + sudo rc-update add docker default + +systemd +------- + +To start the docker daemon: + +.. code-block:: bash + + sudo systemctl start docker.service + +To start on system boot: + +.. code-block:: bash + + sudo systemctl enable docker.service + +Network Configuration +^^^^^^^^^^^^^^^^^^^^^ + +IPv4 packet forwarding is disabled by default, so internet access from inside the container will not work unless ``net.ipv4.ip_forward`` is enabled: + +.. code-block:: bash + + sudo sysctl -w net.ipv4.ip_forward=1 + +Or, to enable it more permanently: + +.. code-block:: bash + + echo net.ipv4.ip_forward = 1 | sudo tee /etc/sysctl.d/docker.conf + +fork/exec /usr/sbin/lxc-start: operation not permitted +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Unfortunately, Gentoo suffers from `issue #1422 `_, meaning that after every fresh start of docker, the first docker run fails due to some tricky terminal issues, so be sure to run something trivial (such as ``docker run -i -t busybox echo hi``) before attempting to run anything important. diff --git a/docs/sources/installation/index.rst b/docs/sources/installation/index.rst index c2a93f5a01..1a73cb7ae6 100644 --- a/docs/sources/installation/index.rst +++ b/docs/sources/installation/index.rst @@ -24,5 +24,6 @@ Contents: amazon rackspace archlinux + gentoolinux upgrading kernel From 58ffd03bf16f41b9c954e61ef948768f44871c28 Mon Sep 17 00:00:00 2001 From: Vladimir Kirillov Date: Wed, 4 Sep 2013 12:53:38 +0300 Subject: [PATCH 115/215] add new docker api client for erlang, erldocker --- docs/sources/api/docker_remote_api.rst | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/sources/api/docker_remote_api.rst b/docs/sources/api/docker_remote_api.rst index 6e4bd2bba0..be15c3494e 100644 --- a/docs/sources/api/docker_remote_api.rst +++ b/docs/sources/api/docker_remote_api.rst @@ -191,4 +191,5 @@ and we will add the libraries here. +----------------------+----------------+--------------------------------------------+ | Java | docker-java | https://github.com/kpelykh/docker-java | +----------------------+----------------+--------------------------------------------+ - +| Erlang | erldocker | https://github.com/proger/erldocker | ++----------------------+----------------+--------------------------------------------+ From 368d0385e1d426a32da66135e7ff8d4f5a3c7a26 Mon Sep 17 00:00:00 2001 From: Thijs Terlouw Date: Wed, 4 Sep 2013 13:21:44 +0200 Subject: [PATCH 116/215] Fix documentation index for cli --- docs/sources/commandline/cli.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/sources/commandline/cli.rst b/docs/sources/commandline/cli.rst index 9f8c296fe6..edc618b823 100644 --- a/docs/sources/commandline/cli.rst +++ b/docs/sources/commandline/cli.rst @@ -32,11 +32,13 @@ Available Commands command/commit command/cp command/diff + command/events command/export command/history command/images command/import command/info + command/insert command/inspect command/kill command/login From 34145f9840b62de85d385a65702f054962878cae Mon Sep 17 00:00:00 2001 From: Daniel Mizyrycki Date: Wed, 4 Sep 2013 10:05:54 -0700 Subject: [PATCH 117/215] deployment, issue #1787: Remove deprecated port forwarding from /Vagrantfile --- Vagrantfile | 1 - 1 file changed, 1 deletion(-) diff --git a/Vagrantfile b/Vagrantfile index 66de6fe227..ab631dbe26 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -12,7 +12,6 @@ Vagrant::Config.run do |config| # Setup virtual machine box. This VM configuration code is always executed. config.vm.box = BOX_NAME config.vm.box_url = BOX_URI - config.vm.forward_port 4243, 4243 # Provision docker and new kernel if deployment was not done if Dir.glob("#{File.dirname(__FILE__)}/.vagrant/machines/default/*/id").empty? From ad5796de9febb5724bd2bf0639ae617c2ff34ba5 Mon Sep 17 00:00:00 2001 From: Tommaso Visconti Date: Wed, 4 Sep 2013 19:17:10 +0200 Subject: [PATCH 118/215] Adds instruction about UDP port redirection --- docs/sources/use/port_redirection.rst | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/docs/sources/use/port_redirection.rst b/docs/sources/use/port_redirection.rst index b19673af27..5c321d429d 100644 --- a/docs/sources/use/port_redirection.rst +++ b/docs/sources/use/port_redirection.rst @@ -8,7 +8,7 @@ Port redirection ================ -Docker can redirect public TCP ports to your container, so it can be +Docker can redirect public TCP and UDP ports to your container, so it can be reached over the network. Port redirection is done on ``docker run`` using the -p flag. @@ -25,6 +25,12 @@ will be allocated. # PUBLIC port 80 is redirected to PRIVATE port 80 sudo docker run -p 80:80 +To redirect a UDP port the redirection must be expressed as *PUBLIC:PRIVATE/udp*: + +.. code-block:: bash + + # PUBLIC port 5300 is redirected to the PRIVATE port 53 using UDP + sudo docker run -p 5300:53/udp Default port redirects can be built into a container with the ``EXPOSE`` build command. From 28e75b23b39aa0aee951378bf1039886c00f7783 Mon Sep 17 00:00:00 2001 From: Jimmy Cuadra Date: Sat, 17 Aug 2013 23:58:04 -0700 Subject: [PATCH 119/215] Don't install VirtualBox Guest Additions if VAGRANT_DEFAULT_PROVIDER is set. --- Vagrantfile | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/Vagrantfile b/Vagrantfile index ab631dbe26..4609f9fa2d 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -22,11 +22,8 @@ Vagrant::Config.run do |config| # Add Ubuntu raring backported kernel pkg_cmd << "apt-get update -qq; apt-get install -q -y linux-image-generic-lts-raring; " # Add guest additions if local vbox VM - is_vbox = true - # The logic here makes a few assumptions (i.e. no one uses --provider=virtualbox) - ARGV.each do |arg| is_vbox &&= ( !arg.downcase.start_with?("--provider") && !ENV['VAGRANT_DEFAULT_PROVIDER'] )end - if is_vbox - pkg_cmd << "apt-get install -q -y linux-headers-generic-lts-raring dkms; " \ + if ENV["VAGRANT_DEFAULT_PROVIDER"].nil? && ARGV.none? { |arg| arg.downcase.start_with?("--provider") } + pkg_cmd << "apt-get install -q -y linux-headers-3.8.0-19-generic dkms; " \ "echo 'Downloading VBox Guest Additions...'; " \ "wget -q http://dlc.sun.com.edgesuite.net/virtualbox/4.2.12/VBoxGuestAdditions_4.2.12.iso; " # Prepare the VM to add guest additions after reboot From 396274fa6db88466fef0b1a5e314ba5b077cd3f2 Mon Sep 17 00:00:00 2001 From: Elias Probst Date: Wed, 4 Sep 2013 21:56:51 +0200 Subject: [PATCH 120/215] Typo --- docs/sources/installation/gentoolinux.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/sources/installation/gentoolinux.rst b/docs/sources/installation/gentoolinux.rst index 6fdd51747a..aa809768ee 100644 --- a/docs/sources/installation/gentoolinux.rst +++ b/docs/sources/installation/gentoolinux.rst @@ -36,7 +36,7 @@ Once that completes, the ``app-emulation/lxc-docker`` package will be available If you prefer to use the official binaries, or just do not wish to compile docker, emerge ``app-emulation/lxc-docker-bin`` instead. It is important to remember that Gentoo is still an unsupported platform, even when using the official binaries. -The package should already include all the necessary dependencies. For the simplest installation experiece, use ``sys-kernel/aufs-sources`` directly as your kernel sources. If you prefer not to use ``sys-kernel/aufs-sources``, the portage tree also contains ``sys-fs/aufs3``, which contains the patches necessary for adding AUFS support to other kernel source packages (and a ``kernel-patch`` use flag to perform the patching automatically). +The package should already include all the necessary dependencies. For the simplest installation experience, use ``sys-kernel/aufs-sources`` directly as your kernel sources. If you prefer not to use ``sys-kernel/aufs-sources``, the portage tree also contains ``sys-fs/aufs3``, which contains the patches necessary for adding AUFS support to other kernel source packages (and a ``kernel-patch`` use flag to perform the patching automatically). Between ``app-emulation/lxc`` and ``app-emulation/lxc-docker``, all the necessary kernel configuration flags should be checked for and warned about in the standard manner. From 98edd0e7510183f561716307299be8834617917b Mon Sep 17 00:00:00 2001 From: shin- Date: Wed, 4 Sep 2013 22:58:58 +0200 Subject: [PATCH 121/215] Updated docs for API v1.5 --- docs/sources/api/docker_remote_api.rst | 26 +- docs/sources/api/docker_remote_api_v1.5.rst | 1175 +++++++++++++++++++ 2 files changed, 1199 insertions(+), 2 deletions(-) create mode 100644 docs/sources/api/docker_remote_api_v1.5.rst diff --git a/docs/sources/api/docker_remote_api.rst b/docs/sources/api/docker_remote_api.rst index be15c3494e..70db4a5eb1 100644 --- a/docs/sources/api/docker_remote_api.rst +++ b/docs/sources/api/docker_remote_api.rst @@ -27,14 +27,36 @@ Docker Remote API 2. Versions =========== -The current version of the API is 1.4 +The current version of the API is 1.5 Calling /images//insert is the same as calling -/v1.4/images//insert +/v1.5/images//insert You can still call an old version of the api using /v1.0/images//insert +:doc:`docker_remote_api_v1.5` +***************************** + +What's new +---------- + +.. http:post:: /images/create + + **New!** You can now pass registry credentials (via an AuthConfig object) + through the `X-Registry-Auth` header + +.. http:post:: /images/(name)/push + + **New!** The AuthConfig object now needs to be passed through + the `X-Registry-Auth` header + +.. http:get:: /containers/json + + **New!** The format of the `Ports` entry has been changed to a list of + dicts each containing `PublicPort`, `PrivatePort` and `Type` describing a + port mapping. + :doc:`docker_remote_api_v1.4` ***************************** diff --git a/docs/sources/api/docker_remote_api_v1.5.rst b/docs/sources/api/docker_remote_api_v1.5.rst new file mode 100644 index 0000000000..4f994f5bf0 --- /dev/null +++ b/docs/sources/api/docker_remote_api_v1.5.rst @@ -0,0 +1,1175 @@ +:title: Remote API v1.5 +:description: API Documentation for Docker +:keywords: API, Docker, rcli, REST, documentation + +:orphan: + +====================== +Docker Remote API v1.5 +====================== + +.. contents:: Table of Contents + +1. Brief introduction +===================== + +- The Remote API is replacing rcli +- Default port in the docker daemon is 4243 +- The API tends to be REST, but for some complex commands, like attach or pull, the HTTP connection is hijacked to transport stdout stdin and stderr + +2. Endpoints +============ + +2.1 Containers +-------------- + +List containers +*************** + +.. http:get:: /containers/json + + List containers + + **Example request**: + + .. sourcecode:: http + + GET /containers/json?all=1&before=8dfafdbc3a40&size=1 HTTP/1.1 + + **Example response**: + + .. sourcecode:: http + + HTTP/1.1 200 OK + Content-Type: application/json + + [ + { + "Id": "8dfafdbc3a40", + "Image": "base:latest", + "Command": "echo 1", + "Created": 1367854155, + "Status": "Exit 0", + "Ports":[{"PrivatePort": 2222, "PublicPort": 3333, "Type": "tcp"}], + "SizeRw":12288, + "SizeRootFs":0 + }, + { + "Id": "9cd87474be90", + "Image": "base:latest", + "Command": "echo 222222", + "Created": 1367854155, + "Status": "Exit 0", + "Ports":[], + "SizeRw":12288, + "SizeRootFs":0 + }, + { + "Id": "3176a2479c92", + "Image": "base:latest", + "Command": "echo 3333333333333333", + "Created": 1367854154, + "Status": "Exit 0", + "Ports":[], + "SizeRw":12288, + "SizeRootFs":0 + }, + { + "Id": "4cb07b47f9fb", + "Image": "base:latest", + "Command": "echo 444444444444444444444444444444444", + "Created": 1367854152, + "Status": "Exit 0", + "Ports":[], + "SizeRw":12288, + "SizeRootFs":0 + } + ] + + :query all: 1/True/true or 0/False/false, Show all containers. Only running containers are shown by default + :query limit: Show ``limit`` last created containers, include non-running ones. + :query since: Show only containers created since Id, include non-running ones. + :query before: Show only containers created before Id, include non-running ones. + :query size: 1/True/true or 0/False/false, Show the containers sizes + :statuscode 200: no error + :statuscode 400: bad parameter + :statuscode 500: server error + + +Create a container +****************** + +.. http:post:: /containers/create + + Create a container + + **Example request**: + + .. sourcecode:: http + + POST /containers/create HTTP/1.1 + Content-Type: application/json + + { + "Hostname":"", + "User":"", + "Memory":0, + "MemorySwap":0, + "AttachStdin":false, + "AttachStdout":true, + "AttachStderr":true, + "PortSpecs":null, + "Privileged": false, + "Tty":false, + "OpenStdin":false, + "StdinOnce":false, + "Env":null, + "Cmd":[ + "date" + ], + "Dns":null, + "Image":"base", + "Volumes":{}, + "VolumesFrom":"", + "WorkingDir":"" + + } + + **Example response**: + + .. sourcecode:: http + + HTTP/1.1 201 OK + Content-Type: application/json + + { + "Id":"e90e34656806" + "Warnings":[] + } + + :jsonparam config: the container's configuration + :statuscode 201: no error + :statuscode 404: no such container + :statuscode 406: impossible to attach (container not running) + :statuscode 500: server error + + +Inspect a container +******************* + +.. http:get:: /containers/(id)/json + + Return low-level information on the container ``id`` + + **Example request**: + + .. sourcecode:: http + + GET /containers/4fa6e0f0c678/json HTTP/1.1 + + **Example response**: + + .. sourcecode:: http + + HTTP/1.1 200 OK + Content-Type: application/json + + { + "Id": "4fa6e0f0c6786287e131c3852c58a2e01cc697a68231826813597e4994f1d6e2", + "Created": "2013-05-07T14:51:42.041847+02:00", + "Path": "date", + "Args": [], + "Config": { + "Hostname": "4fa6e0f0c678", + "User": "", + "Memory": 0, + "MemorySwap": 0, + "AttachStdin": false, + "AttachStdout": true, + "AttachStderr": true, + "PortSpecs": null, + "Tty": false, + "OpenStdin": false, + "StdinOnce": false, + "Env": null, + "Cmd": [ + "date" + ], + "Dns": null, + "Image": "base", + "Volumes": {}, + "VolumesFrom": "", + "WorkingDir":"" + + }, + "State": { + "Running": false, + "Pid": 0, + "ExitCode": 0, + "StartedAt": "2013-05-07T14:51:42.087658+02:01360", + "Ghost": false + }, + "Image": "b750fe79269d2ec9a3c593ef05b4332b1d1a02a62b4accb2c21d589ff2f5f2dc", + "NetworkSettings": { + "IpAddress": "", + "IpPrefixLen": 0, + "Gateway": "", + "Bridge": "", + "PortMapping": null + }, + "SysInitPath": "/home/kitty/go/src/github.com/dotcloud/docker/bin/docker", + "ResolvConfPath": "/etc/resolv.conf", + "Volumes": {} + } + + :statuscode 200: no error + :statuscode 404: no such container + :statuscode 500: server error + + +List processes running inside a container +***************************************** + +.. http:get:: /containers/(id)/top + + List processes running inside the container ``id`` + + **Example request**: + + .. sourcecode:: http + + GET /containers/4fa6e0f0c678/top HTTP/1.1 + + **Example response**: + + .. sourcecode:: http + + HTTP/1.1 200 OK + Content-Type: application/json + + { + "Titles":[ + "USER", + "PID", + "%CPU", + "%MEM", + "VSZ", + "RSS", + "TTY", + "STAT", + "START", + "TIME", + "COMMAND" + ], + "Processes":[ + ["root","20147","0.0","0.1","18060","1864","pts/4","S","10:06","0:00","bash"], + ["root","20271","0.0","0.0","4312","352","pts/4","S+","10:07","0:00","sleep","10"] + ] + } + + :query ps_args: ps arguments to use (eg. aux) + :statuscode 200: no error + :statuscode 404: no such container + :statuscode 500: server error + + +Inspect changes on a container's filesystem +******************************************* + +.. http:get:: /containers/(id)/changes + + Inspect changes on container ``id`` 's filesystem + + **Example request**: + + .. sourcecode:: http + + GET /containers/4fa6e0f0c678/changes HTTP/1.1 + + + **Example response**: + + .. sourcecode:: http + + HTTP/1.1 200 OK + Content-Type: application/json + + [ + { + "Path":"/dev", + "Kind":0 + }, + { + "Path":"/dev/kmsg", + "Kind":1 + }, + { + "Path":"/test", + "Kind":1 + } + ] + + :statuscode 200: no error + :statuscode 404: no such container + :statuscode 500: server error + + +Export a container +****************** + +.. http:get:: /containers/(id)/export + + Export the contents of container ``id`` + + **Example request**: + + .. sourcecode:: http + + GET /containers/4fa6e0f0c678/export HTTP/1.1 + + + **Example response**: + + .. sourcecode:: http + + HTTP/1.1 200 OK + Content-Type: application/octet-stream + + {{ STREAM }} + + :statuscode 200: no error + :statuscode 404: no such container + :statuscode 500: server error + + +Start a container +***************** + +.. http:post:: /containers/(id)/start + + Start the container ``id`` + + **Example request**: + + .. sourcecode:: http + + POST /containers/(id)/start HTTP/1.1 + Content-Type: application/json + + { + "Binds":["/tmp:/tmp"], + "LxcConf":{"lxc.utsname":"docker"} + } + + **Example response**: + + .. sourcecode:: http + + HTTP/1.1 204 No Content + Content-Type: text/plain + + :jsonparam hostConfig: the container's host configuration (optional) + :statuscode 204: no error + :statuscode 404: no such container + :statuscode 500: server error + + +Stop a container +**************** + +.. http:post:: /containers/(id)/stop + + Stop the container ``id`` + + **Example request**: + + .. sourcecode:: http + + POST /containers/e90e34656806/stop?t=5 HTTP/1.1 + + **Example response**: + + .. sourcecode:: http + + HTTP/1.1 204 OK + + :query t: number of seconds to wait before killing the container + :statuscode 204: no error + :statuscode 404: no such container + :statuscode 500: server error + + +Restart a container +******************* + +.. http:post:: /containers/(id)/restart + + Restart the container ``id`` + + **Example request**: + + .. sourcecode:: http + + POST /containers/e90e34656806/restart?t=5 HTTP/1.1 + + **Example response**: + + .. sourcecode:: http + + HTTP/1.1 204 OK + + :query t: number of seconds to wait before killing the container + :statuscode 204: no error + :statuscode 404: no such container + :statuscode 500: server error + + +Kill a container +**************** + +.. http:post:: /containers/(id)/kill + + Kill the container ``id`` + + **Example request**: + + .. sourcecode:: http + + POST /containers/e90e34656806/kill HTTP/1.1 + + **Example response**: + + .. sourcecode:: http + + HTTP/1.1 204 OK + + :statuscode 204: no error + :statuscode 404: no such container + :statuscode 500: server error + + +Attach to a container +********************* + +.. http:post:: /containers/(id)/attach + + Attach to the container ``id`` + + **Example request**: + + .. sourcecode:: http + + POST /containers/16253994b7c4/attach?logs=1&stream=0&stdout=1 HTTP/1.1 + + **Example response**: + + .. sourcecode:: http + + HTTP/1.1 200 OK + Content-Type: application/vnd.docker.raw-stream + + {{ STREAM }} + + :query logs: 1/True/true or 0/False/false, return logs. Default false + :query stream: 1/True/true or 0/False/false, return stream. Default false + :query stdin: 1/True/true or 0/False/false, if stream=true, attach to stdin. Default false + :query stdout: 1/True/true or 0/False/false, if logs=true, return stdout log, if stream=true, attach to stdout. Default false + :query stderr: 1/True/true or 0/False/false, if logs=true, return stderr log, if stream=true, attach to stderr. Default false + :statuscode 200: no error + :statuscode 400: bad parameter + :statuscode 404: no such container + :statuscode 500: server error + + +Wait a container +**************** + +.. http:post:: /containers/(id)/wait + + Block until container ``id`` stops, then returns the exit code + + **Example request**: + + .. sourcecode:: http + + POST /containers/16253994b7c4/wait HTTP/1.1 + + **Example response**: + + .. sourcecode:: http + + HTTP/1.1 200 OK + Content-Type: application/json + + {"StatusCode":0} + + :statuscode 200: no error + :statuscode 404: no such container + :statuscode 500: server error + + +Remove a container +******************* + +.. http:delete:: /containers/(id) + + Remove the container ``id`` from the filesystem + + **Example request**: + + .. sourcecode:: http + + DELETE /containers/16253994b7c4?v=1 HTTP/1.1 + + **Example response**: + + .. sourcecode:: http + + HTTP/1.1 204 OK + + :query v: 1/True/true or 0/False/false, Remove the volumes associated to the container. Default false + :statuscode 204: no error + :statuscode 400: bad parameter + :statuscode 404: no such container + :statuscode 500: server error + + +Copy files or folders from a container +************************************** + +.. http:post:: /containers/(id)/copy + + Copy files or folders of container ``id`` + + **Example request**: + + .. sourcecode:: http + + POST /containers/4fa6e0f0c678/copy HTTP/1.1 + Content-Type: application/json + + { + "Resource":"test.txt" + } + + **Example response**: + + .. sourcecode:: http + + HTTP/1.1 200 OK + Content-Type: application/octet-stream + + {{ STREAM }} + + :statuscode 200: no error + :statuscode 404: no such container + :statuscode 500: server error + + +2.2 Images +---------- + +List Images +*********** + +.. http:get:: /images/(format) + + List images ``format`` could be json or viz (json default) + + **Example request**: + + .. sourcecode:: http + + GET /images/json?all=0 HTTP/1.1 + + **Example response**: + + .. sourcecode:: http + + HTTP/1.1 200 OK + Content-Type: application/json + + [ + { + "Repository":"base", + "Tag":"ubuntu-12.10", + "Id":"b750fe79269d", + "Created":1364102658, + "Size":24653, + "VirtualSize":180116135 + }, + { + "Repository":"base", + "Tag":"ubuntu-quantal", + "Id":"b750fe79269d", + "Created":1364102658, + "Size":24653, + "VirtualSize":180116135 + } + ] + + + **Example request**: + + .. sourcecode:: http + + GET /images/viz HTTP/1.1 + + **Example response**: + + .. sourcecode:: http + + HTTP/1.1 200 OK + Content-Type: text/plain + + digraph docker { + "d82cbacda43a" -> "074be284591f" + "1496068ca813" -> "08306dc45919" + "08306dc45919" -> "0e7893146ac2" + "b750fe79269d" -> "1496068ca813" + base -> "27cf78414709" [style=invis] + "f71189fff3de" -> "9a33b36209ed" + "27cf78414709" -> "b750fe79269d" + "0e7893146ac2" -> "d6434d954665" + "d6434d954665" -> "d82cbacda43a" + base -> "e9aa60c60128" [style=invis] + "074be284591f" -> "f71189fff3de" + "b750fe79269d" [label="b750fe79269d\nbase",shape=box,fillcolor="paleturquoise",style="filled,rounded"]; + "e9aa60c60128" [label="e9aa60c60128\nbase2",shape=box,fillcolor="paleturquoise",style="filled,rounded"]; + "9a33b36209ed" [label="9a33b36209ed\ntest",shape=box,fillcolor="paleturquoise",style="filled,rounded"]; + base [style=invisible] + } + + :query all: 1/True/true or 0/False/false, Show all containers. Only running containers are shown by default + :statuscode 200: no error + :statuscode 400: bad parameter + :statuscode 500: server error + + +Create an image +*************** + +.. http:post:: /images/create + + Create an image, either by pull it from the registry or by importing it + + **Example request**: + + .. sourcecode:: http + + POST /images/create?fromImage=base HTTP/1.1 + + **Example response**: + + .. sourcecode:: http + + HTTP/1.1 200 OK + Content-Type: application/json + + {"status":"Pulling..."} + {"status":"Pulling", "progress":"1/? (n/a)"} + {"error":"Invalid..."} + ... + + When using this endpoint to pull an image from the registry, + the ``X-Registry-Auth`` header can be used to include a + base64-encoded AuthConfig object. + + :query fromImage: name of the image to pull + :query fromSrc: source to import, - means stdin + :query repo: repository + :query tag: tag + :query registry: the registry to pull from + :statuscode 200: no error + :statuscode 500: server error + + +Insert a file in an image +************************* + +.. http:post:: /images/(name)/insert + + Insert a file from ``url`` in the image ``name`` at ``path`` + + **Example request**: + + .. sourcecode:: http + + POST /images/test/insert?path=/usr&url=myurl HTTP/1.1 + + **Example response**: + + .. sourcecode:: http + + HTTP/1.1 200 OK + Content-Type: application/json + + {"status":"Inserting..."} + {"status":"Inserting", "progress":"1/? (n/a)"} + {"error":"Invalid..."} + ... + + :statuscode 200: no error + :statuscode 500: server error + + +Inspect an image +**************** + +.. http:get:: /images/(name)/json + + Return low-level information on the image ``name`` + + **Example request**: + + .. sourcecode:: http + + GET /images/base/json HTTP/1.1 + + **Example response**: + + .. sourcecode:: http + + HTTP/1.1 200 OK + Content-Type: application/json + + { + "id":"b750fe79269d2ec9a3c593ef05b4332b1d1a02a62b4accb2c21d589ff2f5f2dc", + "parent":"27cf784147099545", + "created":"2013-03-23T22:24:18.818426-07:00", + "container":"3d67245a8d72ecf13f33dffac9f79dcdf70f75acb84d308770391510e0c23ad0", + "container_config": + { + "Hostname":"", + "User":"", + "Memory":0, + "MemorySwap":0, + "AttachStdin":false, + "AttachStdout":false, + "AttachStderr":false, + "PortSpecs":null, + "Tty":true, + "OpenStdin":true, + "StdinOnce":false, + "Env":null, + "Cmd": ["/bin/bash"] + ,"Dns":null, + "Image":"base", + "Volumes":null, + "VolumesFrom":"", + "WorkingDir":"" + }, + "Size": 6824592 + } + + :statuscode 200: no error + :statuscode 404: no such image + :statuscode 500: server error + + +Get the history of an image +*************************** + +.. http:get:: /images/(name)/history + + Return the history of the image ``name`` + + **Example request**: + + .. sourcecode:: http + + GET /images/base/history HTTP/1.1 + + **Example response**: + + .. sourcecode:: http + + HTTP/1.1 200 OK + Content-Type: application/json + + [ + { + "Id":"b750fe79269d", + "Created":1364102658, + "CreatedBy":"/bin/bash" + }, + { + "Id":"27cf78414709", + "Created":1364068391, + "CreatedBy":"" + } + ] + + :statuscode 200: no error + :statuscode 404: no such image + :statuscode 500: server error + + +Push an image on the registry +***************************** + +.. http:post:: /images/(name)/push + + Push the image ``name`` on the registry + + **Example request**: + + .. sourcecode:: http + + POST /images/test/push HTTP/1.1 + + **Example response**: + + .. sourcecode:: http + + HTTP/1.1 200 OK + Content-Type: application/json + + {"status":"Pushing..."} + {"status":"Pushing", "progress":"1/? (n/a)"} + {"error":"Invalid..."} + ... + + The ``X-Registry-Auth`` header can be used to include a + base64-encoded AuthConfig object. + + :query registry: the registry you wan to push, optional + :statuscode 200: no error + :statuscode 404: no such image + :statuscode 500: server error + + +Tag an image into a repository +****************************** + +.. http:post:: /images/(name)/tag + + Tag the image ``name`` into a repository + + **Example request**: + + .. sourcecode:: http + + POST /images/test/tag?repo=myrepo&force=0 HTTP/1.1 + + **Example response**: + + .. sourcecode:: http + + HTTP/1.1 200 OK + + :query repo: The repository to tag in + :query force: 1/True/true or 0/False/false, default false + :statuscode 200: no error + :statuscode 400: bad parameter + :statuscode 404: no such image + :statuscode 409: conflict + :statuscode 500: server error + + +Remove an image +*************** + +.. http:delete:: /images/(name) + + Remove the image ``name`` from the filesystem + + **Example request**: + + .. sourcecode:: http + + DELETE /images/test HTTP/1.1 + + **Example response**: + + .. sourcecode:: http + + HTTP/1.1 200 OK + Content-type: application/json + + [ + {"Untagged":"3e2f21a89f"}, + {"Deleted":"3e2f21a89f"}, + {"Deleted":"53b4f83ac9"} + ] + + :statuscode 200: no error + :statuscode 404: no such image + :statuscode 409: conflict + :statuscode 500: server error + + +Search images +************* + +.. http:get:: /images/search + + Search for an image in the docker index + + **Example request**: + + .. sourcecode:: http + + GET /images/search?term=sshd HTTP/1.1 + + **Example response**: + + .. sourcecode:: http + + HTTP/1.1 200 OK + Content-Type: application/json + + [ + { + "Name":"cespare/sshd", + "Description":"" + }, + { + "Name":"johnfuller/sshd", + "Description":"" + }, + { + "Name":"dhrp/mongodb-sshd", + "Description":"" + } + ] + + :query term: term to search + :statuscode 200: no error + :statuscode 500: server error + + +2.3 Misc +-------- + +Build an image from Dockerfile via stdin +**************************************** + +.. http:post:: /build + + Build an image from Dockerfile via stdin + + **Example request**: + + .. sourcecode:: http + + POST /build HTTP/1.1 + + {{ STREAM }} + + **Example response**: + + .. sourcecode:: http + + HTTP/1.1 200 OK + + {{ STREAM }} + + + The stream must be a tar archive compressed with one of the following algorithms: + identity (no compression), gzip, bzip2, xz. The archive must include a file called + `Dockerfile` at its root. It may include any number of other files, which will be + accessible in the build context (See the ADD build command). + + The Content-type header should be set to "application/tar". + + :query t: repository name (and optionally a tag) to be applied to the resulting image in case of success + :query q: suppress verbose build output + :query nocache: do not use the cache when building the image + :statuscode 200: no error + :statuscode 500: server error + + +Check auth configuration +************************ + +.. http:post:: /auth + + Get the default username and email + + **Example request**: + + .. sourcecode:: http + + POST /auth HTTP/1.1 + Content-Type: application/json + + { + "username":"hannibal", + "password:"xxxx", + "email":"hannibal@a-team.com", + "serveraddress":"https://index.docker.io/v1/" + } + + **Example response**: + + .. sourcecode:: http + + HTTP/1.1 200 OK + + :statuscode 200: no error + :statuscode 204: no error + :statuscode 500: server error + + +Display system-wide information +******************************* + +.. http:get:: /info + + Display system-wide information + + **Example request**: + + .. sourcecode:: http + + GET /info HTTP/1.1 + + **Example response**: + + .. sourcecode:: http + + HTTP/1.1 200 OK + Content-Type: application/json + + { + "Containers":11, + "Images":16, + "Debug":false, + "NFd": 11, + "NGoroutines":21, + "MemoryLimit":true, + "SwapLimit":false, + "IPv4Forwarding":true + } + + :statuscode 200: no error + :statuscode 500: server error + + +Show the docker version information +*********************************** + +.. http:get:: /version + + Show the docker version information + + **Example request**: + + .. sourcecode:: http + + GET /version HTTP/1.1 + + **Example response**: + + .. sourcecode:: http + + HTTP/1.1 200 OK + Content-Type: application/json + + { + "Version":"0.2.2", + "GitCommit":"5a2a5cc+CHANGES", + "GoVersion":"go1.0.3" + } + + :statuscode 200: no error + :statuscode 500: server error + + +Create a new image from a container's changes +********************************************* + +.. http:post:: /commit + + Create a new image from a container's changes + + **Example request**: + + .. sourcecode:: http + + POST /commit?container=44c004db4b17&m=message&repo=myrepo HTTP/1.1 + + **Example response**: + + .. sourcecode:: http + + HTTP/1.1 201 OK + Content-Type: application/vnd.docker.raw-stream + + {"Id":"596069db4bf5"} + + :query container: source container + :query repo: repository + :query tag: tag + :query m: commit message + :query author: author (eg. "John Hannibal Smith ") + :query run: config automatically applied when the image is run. (ex: {"Cmd": ["cat", "/world"], "PortSpecs":["22"]}) + :statuscode 201: no error + :statuscode 404: no such container + :statuscode 500: server error + + +Monitor Docker's events +*********************** + +.. http:get:: /events + + Get events from docker, either in real time via streaming, or via polling (using `since`) + + **Example request**: + + .. sourcecode:: http + + POST /events?since=1374067924 + + **Example response**: + + .. sourcecode:: http + + HTTP/1.1 200 OK + Content-Type: application/json + + {"status":"create","id":"dfdf82bd3881","from":"base:latest","time":1374067924} + {"status":"start","id":"dfdf82bd3881","from":"base:latest","time":1374067924} + {"status":"stop","id":"dfdf82bd3881","from":"base:latest","time":1374067966} + {"status":"destroy","id":"dfdf82bd3881","from":"base:latest","time":1374067970} + + :query since: timestamp used for polling + :statuscode 200: no error + :statuscode 500: server error + + +3. Going further +================ + +3.1 Inside 'docker run' +----------------------- + +Here are the steps of 'docker run' : + +* Create the container +* If the status code is 404, it means the image doesn't exists: + * Try to pull it + * Then retry to create the container +* Start the container +* If you are not in detached mode: + * Attach to the container, using logs=1 (to have stdout and stderr from the container's start) and stream=1 +* If in detached mode or only stdin is attached: + * Display the container's id + + +3.2 Hijacking +------------- + +In this version of the API, /attach, uses hijacking to transport stdin, stdout and stderr on the same socket. This might change in the future. + +3.3 CORS Requests +----------------- + +To enable cross origin requests to the remote api add the flag "-api-enable-cors" when running docker in daemon mode. + +.. code-block:: bash + + docker -d -H="192.168.1.9:4243" -api-enable-cors + From 8878943ac9ab3b3344d398b45e68ebb7cea879f0 Mon Sep 17 00:00:00 2001 From: Daniel Mizyrycki Date: Wed, 4 Sep 2013 14:38:03 -0700 Subject: [PATCH 122/215] deployment, issue #1578: Avoid pinning kernel headers. Add Vagrantfile assumptions --- Vagrantfile | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Vagrantfile b/Vagrantfile index 4609f9fa2d..85af1280a2 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -13,7 +13,8 @@ Vagrant::Config.run do |config| config.vm.box = BOX_NAME config.vm.box_url = BOX_URI - # Provision docker and new kernel if deployment was not done + # Provision docker and new kernel if deployment was not done. + # It is assumed Vagrant can successfully launch the provider instance. if Dir.glob("#{File.dirname(__FILE__)}/.vagrant/machines/default/*/id").empty? # Add lxc-docker package pkg_cmd = "wget -q -O - https://get.docker.io/gpg | apt-key add -;" \ @@ -21,9 +22,10 @@ Vagrant::Config.run do |config| "apt-get update -qq; apt-get install -q -y --force-yes lxc-docker; " # Add Ubuntu raring backported kernel pkg_cmd << "apt-get update -qq; apt-get install -q -y linux-image-generic-lts-raring; " - # Add guest additions if local vbox VM + # Add guest additions if local vbox VM. As virtualbox is the default provider, + # it is assumed it won't be explicitly stated. if ENV["VAGRANT_DEFAULT_PROVIDER"].nil? && ARGV.none? { |arg| arg.downcase.start_with?("--provider") } - pkg_cmd << "apt-get install -q -y linux-headers-3.8.0-19-generic dkms; " \ + pkg_cmd << "apt-get install -q -y linux-headers-generic-lts-raring dkms; " \ "echo 'Downloading VBox Guest Additions...'; " \ "wget -q http://dlc.sun.com.edgesuite.net/virtualbox/4.2.12/VBoxGuestAdditions_4.2.12.iso; " # Prepare the VM to add guest additions after reboot From 9ae5054c3477c6eb9afc64ad44ff41bb3f10a8ab Mon Sep 17 00:00:00 2001 From: shin- Date: Wed, 4 Sep 2013 23:41:44 +0200 Subject: [PATCH 123/215] Bumped API version in api.go ; added <1.5 behavior to getContainersJSON --- api.go | 14 ++++++++++++-- api_params.go | 24 ++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/api.go b/api.go index 39d242099d..fa6057945f 100644 --- a/api.go +++ b/api.go @@ -21,7 +21,7 @@ import ( "strings" ) -const APIVERSION = 1.4 +const APIVERSION = 1.5 const DEFAULTHTTPHOST = "127.0.0.1" const DEFAULTHTTPPORT = 4243 const DEFAULTUNIXSOCKET = "/var/run/docker.sock" @@ -327,8 +327,18 @@ func getContainersJSON(srv *Server, version float64, w http.ResponseWriter, r *h n = -1 } + var b []byte outs := srv.Containers(all, size, n, since, before) - b, err := json.Marshal(outs) + if version < 1.5 { + outs2 := []APIContainersOld{} + for _, ctnr := range outs { + outs2 = append(outs2, ctnr.ToLegacy()) + } + b, err = json.Marshal(outs2) + } else { + b, err = json.Marshal(outs) + } + if err != nil { return err } diff --git a/api_params.go b/api_params.go index 43a536d601..6403bc6a26 100644 --- a/api_params.go +++ b/api_params.go @@ -54,6 +54,30 @@ type APIContainers struct { SizeRootFs int64 } +func (self *APIContainers) ToLegacy() APIContainersOld { + return APIContainersOld{ + ID: self.ID, + Image: self.Image, + Command: self.Command, + Created: self.Created, + Status: self.Status, + Ports: displayablePorts(self.Ports), + SizeRw: self.SizeRw, + SizeRootFs: self.SizeRootFs, + } +} + +type APIContainersOld struct { + ID string `json:"Id"` + Image string + Command string + Created int64 + Status string + Ports string + SizeRw int64 + SizeRootFs int64 +} + type APISearch struct { Name string Description string From 62823cfb97ec35e59833fd4723c392685d55827c Mon Sep 17 00:00:00 2001 From: Deni Bertovic Date: Thu, 5 Sep 2013 00:06:41 +0200 Subject: [PATCH 124/215] fixed docs for installing binary --- docs/sources/installation/binaries.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/sources/installation/binaries.rst b/docs/sources/installation/binaries.rst index fea48bd7a9..28663fb779 100644 --- a/docs/sources/installation/binaries.rst +++ b/docs/sources/installation/binaries.rst @@ -34,8 +34,8 @@ Get the docker binary: .. code-block:: bash - wget http://get.docker.io/builds/Linux/x86_64/docker-latest.tgz - tar -xf docker-latest.tgz + wget --output-document=docker https://get.docker.io/builds/Linux/x86_64/docker-latest + chmod +x docker Run the docker daemon From ad04cacd28da1557324b8ad6fb53b7284e8bf866 Mon Sep 17 00:00:00 2001 From: Victor Coisne Date: Wed, 4 Sep 2013 17:47:18 -0700 Subject: [PATCH 125/215] Add step to docker installation using vagrant (Mac, Linux) --- docs/sources/installation/vagrant.rst | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/docs/sources/installation/vagrant.rst b/docs/sources/installation/vagrant.rst index 14f5bf5cdd..05fb579d5e 100644 --- a/docs/sources/installation/vagrant.rst +++ b/docs/sources/installation/vagrant.rst @@ -37,7 +37,13 @@ Spin it up git clone https://github.com/dotcloud/docker.git -2. Run vagrant from the sources directory +2. Change directory to docker + + .. code-block:: bash + + cd docker + +3. Run vagrant from the sources directory .. code-block:: bash From bf6e241d977f36db57c66a5b8dd056b36c0d8695 Mon Sep 17 00:00:00 2001 From: Daniel Mizyrycki Date: Wed, 4 Sep 2013 18:20:42 -0700 Subject: [PATCH 126/215] testing, issue #1802: Temporarily skip TestGetContainersTop --- api_test.go | 1 + 1 file changed, 1 insertion(+) diff --git a/api_test.go b/api_test.go index fc7eeed713..1e8ed20b98 100644 --- a/api_test.go +++ b/api_test.go @@ -449,6 +449,7 @@ func TestGetContainersChanges(t *testing.T) { } func TestGetContainersTop(t *testing.T) { + t.Skip("Fixme. Skipping test for now. Reported error when testing using dind: 'api_test.go:527: Expected 2 processes, found 0.'") runtime, err := newTestRuntime() if err != nil { t.Fatal(err) From fdf1fccd3eec7b534b8423fe3ea5b6e116b233fa Mon Sep 17 00:00:00 2001 From: Bouke Haarsma Date: Thu, 5 Sep 2013 10:40:11 +0200 Subject: [PATCH 127/215] Fix memory recommendations (Byte, not bit) --- docs/sources/installation/vagrant.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/sources/installation/vagrant.rst b/docs/sources/installation/vagrant.rst index 05fb579d5e..3d7faf515e 100644 --- a/docs/sources/installation/vagrant.rst +++ b/docs/sources/installation/vagrant.rst @@ -10,7 +10,7 @@ Using Vagrant (Mac, Linux) This guide will setup a new virtualbox virtual machine with docker installed on your computer. This works on most operating systems, including MacOX, Windows, Linux, FreeBSD and others. If you can -install these and have at least 400Mb RAM to spare you should be good. +install these and have at least 400MB RAM to spare you should be good. Install Vagrant and Virtualbox ------------------------------ From 82dd417ef6966b0f3d812122c18420feb64f49a7 Mon Sep 17 00:00:00 2001 From: Tianon Gravi Date: Thu, 5 Sep 2013 13:36:16 -0600 Subject: [PATCH 128/215] Reformat Gentoo install instructions to 80 columns --- docs/sources/installation/gentoolinux.rst | 47 ++++++++++++++++++----- 1 file changed, 37 insertions(+), 10 deletions(-) diff --git a/docs/sources/installation/gentoolinux.rst b/docs/sources/installation/gentoolinux.rst index aa809768ee..5749b6dc0b 100644 --- a/docs/sources/installation/gentoolinux.rst +++ b/docs/sources/installation/gentoolinux.rst @@ -11,7 +11,10 @@ Gentoo Linux .. include:: install_unofficial.inc -Installing Docker on Gentoo Linux can be accomplished by using the overlay provided at https://github.com/tianon/docker-overlay. The most up-to-date documentation for properly installing the overlay can be found in the overlay README. The information here is provided for reference, and may be out of date. +Installing Docker on Gentoo Linux can be accomplished by using the overlay +provided at https://github.com/tianon/docker-overlay. The most up-to-date +documentation for properly installing the overlay can be found in the overlay +README. The information here is provided for reference, and may be out of date. Installation ^^^^^^^^^^^^ @@ -22,30 +25,49 @@ Ensure that layman is installed: sudo emerge -av app-portage/layman -Using your favorite editor, add ``https://raw.github.com/tianon/docker-overlay/master/repositories.xml`` to the ``overlays`` section in ``/etc/layman/layman.cfg`` (as per instructions on the `Gentoo Wiki `_), then invoke the following: +Using your favorite editor, add +``https://raw.github.com/tianon/docker-overlay/master/repositories.xml`` to the +``overlays`` section in ``/etc/layman/layman.cfg`` (as per instructions on the +`Gentoo Wiki `_), +then invoke the following: .. code-block:: bash sudo layman -f -a docker -Once that completes, the ``app-emulation/lxc-docker`` package will be available for emerge: +Once that completes, the ``app-emulation/lxc-docker`` package will be available +for emerge: .. code-block:: bash sudo emerge -av app-emulation/lxc-docker -If you prefer to use the official binaries, or just do not wish to compile docker, emerge ``app-emulation/lxc-docker-bin`` instead. It is important to remember that Gentoo is still an unsupported platform, even when using the official binaries. +If you prefer to use the official binaries, or just do not wish to compile +docker, emerge ``app-emulation/lxc-docker-bin`` instead. It is important to +remember that Gentoo is still an unsupported platform, even when using the +official binaries. -The package should already include all the necessary dependencies. For the simplest installation experience, use ``sys-kernel/aufs-sources`` directly as your kernel sources. If you prefer not to use ``sys-kernel/aufs-sources``, the portage tree also contains ``sys-fs/aufs3``, which contains the patches necessary for adding AUFS support to other kernel source packages (and a ``kernel-patch`` use flag to perform the patching automatically). +The package should already include all the necessary dependencies. For the +simplest installation experience, use ``sys-kernel/aufs-sources`` directly as +your kernel sources. If you prefer not to use ``sys-kernel/aufs-sources``, the +portage tree also contains ``sys-fs/aufs3``, which contains the patches +necessary for adding AUFS support to other kernel source packages (and a +``kernel-patch`` use flag to perform the patching automatically). -Between ``app-emulation/lxc`` and ``app-emulation/lxc-docker``, all the necessary kernel configuration flags should be checked for and warned about in the standard manner. +Between ``app-emulation/lxc`` and ``app-emulation/lxc-docker``, all the +necessary kernel configuration flags should be checked for and warned about in +the standard manner. -If any issues arise from this ebuild or the resulting binary, including and especially missing kernel configuration flags and/or dependencies, `open an issue `_ on the docker-overlay repository or ping tianon in the #docker IRC channel. +If any issues arise from this ebuild or the resulting binary, including and +especially missing kernel configuration flags and/or dependencies, `open an +issue `_ on the docker-overlay +repository or ping tianon in the #docker IRC channel. Starting Docker ^^^^^^^^^^^^^^^ -Ensure that you are running a kernel that includes the necessary AUFS support and includes all the necessary modules and/or configuration for LXC. +Ensure that you are running a kernel that includes the necessary AUFS support +and includes all the necessary modules and/or configuration for LXC. OpenRC ------ @@ -80,7 +102,8 @@ To start on system boot: Network Configuration ^^^^^^^^^^^^^^^^^^^^^ -IPv4 packet forwarding is disabled by default, so internet access from inside the container will not work unless ``net.ipv4.ip_forward`` is enabled: +IPv4 packet forwarding is disabled by default, so internet access from inside +the container will not work unless ``net.ipv4.ip_forward`` is enabled: .. code-block:: bash @@ -95,4 +118,8 @@ Or, to enable it more permanently: fork/exec /usr/sbin/lxc-start: operation not permitted ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Unfortunately, Gentoo suffers from `issue #1422 `_, meaning that after every fresh start of docker, the first docker run fails due to some tricky terminal issues, so be sure to run something trivial (such as ``docker run -i -t busybox echo hi``) before attempting to run anything important. +Unfortunately, Gentoo suffers from `issue #1422 +`_, meaning that after every +fresh start of docker, the first docker run fails due to some tricky terminal +issues, so be sure to run something trivial (such as ``docker run -i -t busybox +echo hi``) before attempting to run anything important. From d368c2dee99b35830392938a783137f344e5b89a Mon Sep 17 00:00:00 2001 From: Tianon Gravi Date: Thu, 5 Sep 2013 13:36:56 -0600 Subject: [PATCH 129/215] Update Gentoo docs to reflect the package name change from app-emulation/lxc-docker to app-emulation/docker as discussed in today's #docker-meeting --- docs/sources/installation/gentoolinux.rst | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/sources/installation/gentoolinux.rst b/docs/sources/installation/gentoolinux.rst index 5749b6dc0b..6e41e049d1 100644 --- a/docs/sources/installation/gentoolinux.rst +++ b/docs/sources/installation/gentoolinux.rst @@ -35,15 +35,15 @@ then invoke the following: sudo layman -f -a docker -Once that completes, the ``app-emulation/lxc-docker`` package will be available +Once that completes, the ``app-emulation/docker`` package will be available for emerge: .. code-block:: bash - sudo emerge -av app-emulation/lxc-docker + sudo emerge -av app-emulation/docker If you prefer to use the official binaries, or just do not wish to compile -docker, emerge ``app-emulation/lxc-docker-bin`` instead. It is important to +docker, emerge ``app-emulation/docker-bin`` instead. It is important to remember that Gentoo is still an unsupported platform, even when using the official binaries. @@ -54,7 +54,7 @@ portage tree also contains ``sys-fs/aufs3``, which contains the patches necessary for adding AUFS support to other kernel source packages (and a ``kernel-patch`` use flag to perform the patching automatically). -Between ``app-emulation/lxc`` and ``app-emulation/lxc-docker``, all the +Between ``app-emulation/lxc`` and ``app-emulation/docker``, all the necessary kernel configuration flags should be checked for and warned about in the standard manner. From 5ec2fea6dd3360de326717ed01909b8fe9c39d0f Mon Sep 17 00:00:00 2001 From: Victor Vieux Date: Thu, 5 Sep 2013 22:28:51 +0000 Subject: [PATCH 130/215] Detect images/containers conflicts in docker inspect --- api.go | 10 ++++++++++ commands.go | 2 +- docs/sources/api/docker_remote_api_v1.4.rst | 2 ++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/api.go b/api.go index 9e094231b5..83f43cc741 100644 --- a/api.go +++ b/api.go @@ -819,6 +819,11 @@ func getContainersByName(srv *Server, version float64, w http.ResponseWriter, r if err != nil { return err } + + _, err = srv.ImageInspect(name) + if err == nil { + return fmt.Errorf("Conflict between containers and images") + } b, err := json.Marshal(container) if err != nil { return err @@ -837,6 +842,11 @@ func getImagesByName(srv *Server, version float64, w http.ResponseWriter, r *htt if err != nil { return err } + + _, err = srv.ContainerInspect(name) + if err == nil { + return fmt.Errorf("Conflict between containers and images") + } b, err := json.Marshal(image) if err != nil { return err diff --git a/commands.go b/commands.go index b2a4d3db13..656790624e 100644 --- a/commands.go +++ b/commands.go @@ -577,7 +577,7 @@ func (cli *DockerCli) CmdInspect(args ...string) error { if err != nil { obj, _, err = cli.call("GET", "/images/"+name+"/json", nil) if err != nil { - fmt.Fprintf(cli.err, "%s\n", err) + fmt.Fprintf(cli.err, "No such image or container: %s\n", name) continue } } diff --git a/docs/sources/api/docker_remote_api_v1.4.rst b/docs/sources/api/docker_remote_api_v1.4.rst index 3ab5cdee0a..6f71fe953f 100644 --- a/docs/sources/api/docker_remote_api_v1.4.rst +++ b/docs/sources/api/docker_remote_api_v1.4.rst @@ -224,6 +224,7 @@ Inspect a container :statuscode 200: no error :statuscode 404: no such container + :statuscode 409: conflict between containers and images :statuscode 500: server error @@ -760,6 +761,7 @@ Inspect an image :statuscode 200: no error :statuscode 404: no such image + :statuscode 409: conflict between containers and images :statuscode 500: server error From 20a763e51934f3b52e48b5a6ba37d63852fd9a0b Mon Sep 17 00:00:00 2001 From: Victor Vieux Date: Thu, 5 Sep 2013 22:33:04 +0000 Subject: [PATCH 131/215] fix indent in doc --- docs/sources/api/docker_remote_api_v1.4.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/sources/api/docker_remote_api_v1.4.rst b/docs/sources/api/docker_remote_api_v1.4.rst index 6f71fe953f..4f946e1e25 100644 --- a/docs/sources/api/docker_remote_api_v1.4.rst +++ b/docs/sources/api/docker_remote_api_v1.4.rst @@ -762,7 +762,7 @@ Inspect an image :statuscode 200: no error :statuscode 404: no such image :statuscode 409: conflict between containers and images - :statuscode 500: server error + :statuscode 500: server error Get the history of an image From 0d7044955a4b63c4df2a611095b87ae417a3cf9b Mon Sep 17 00:00:00 2001 From: Victor Vieux Date: Thu, 5 Sep 2013 23:00:52 +0000 Subject: [PATCH 132/215] remove unused getCache endpoint --- api.go | 24 ------------------------ 1 file changed, 24 deletions(-) diff --git a/api.go b/api.go index 9e094231b5..4c568d4bc7 100644 --- a/api.go +++ b/api.go @@ -845,29 +845,6 @@ func getImagesByName(srv *Server, version float64, w http.ResponseWriter, r *htt return nil } -func postImagesGetCache(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error { - apiConfig := &APIImageConfig{} - if err := json.NewDecoder(r.Body).Decode(apiConfig); err != nil { - return err - } - - image, err := srv.ImageGetCached(apiConfig.ID, apiConfig.Config) - if err != nil { - return err - } - if image == nil { - w.WriteHeader(http.StatusNotFound) - return nil - } - apiID := &APIID{ID: image.ID} - b, err := json.Marshal(apiID) - if err != nil { - return err - } - writeJSON(w, b) - return nil -} - func postBuild(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error { if version < 1.3 { return fmt.Errorf("Multipart upload for build is no longer supported. Please upgrade your docker client.") @@ -1043,7 +1020,6 @@ func createRouter(srv *Server, logging bool) (*mux.Router, error) { "/images/{name:.*}/insert": postImagesInsert, "/images/{name:.*}/push": postImagesPush, "/images/{name:.*}/tag": postImagesTag, - "/images/getCache": postImagesGetCache, "/containers/create": postContainersCreate, "/containers/{name:.*}/kill": postContainersKill, "/containers/{name:.*}/restart": postContainersRestart, From 3bc73fa21e4428cd7040df6c5a384bd0e4772236 Mon Sep 17 00:00:00 2001 From: Michael Crosby Date: Thu, 5 Sep 2013 23:54:03 +0000 Subject: [PATCH 133/215] Return the process exit code for run commands --- commands.go | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/commands.go b/commands.go index b2a4d3db13..7512577a2c 100644 --- a/commands.go +++ b/commands.go @@ -367,16 +367,11 @@ func (cli *DockerCli) CmdWait(args ...string) error { return nil } for _, name := range cmd.Args() { - body, _, err := cli.call("POST", "/containers/"+name+"/wait", nil) + status, err := waitForExit(cli, name) if err != nil { fmt.Fprintf(cli.err, "%s", err) } else { - var out APIWait - err = json.Unmarshal(body, &out) - if err != nil { - return err - } - fmt.Fprintf(cli.out, "%d\n", out.StatusCode) + fmt.Fprintf(cli.out, "%d\n", status) } } return nil @@ -1477,8 +1472,16 @@ func (cli *DockerCli) CmdRun(args ...string) error { } if !config.AttachStdout && !config.AttachStderr { + // Detached mode <-wait + } else { + status, err := waitForExit(cli, runResult.ID) + if err != nil { + return err + } + os.Exit(status) } + return nil } @@ -1759,6 +1762,19 @@ func (cli *DockerCli) LoadConfigFile() (err error) { return err } +func waitForExit(cli *DockerCli, containerId string) (int, error) { + body, _, err := cli.call("POST", "/containers/"+containerId+"/wait", nil) + if err != nil { + return -1, err + } + + var out APIWait + if err := json.Unmarshal(body, &out); err != nil { + return -1, err + } + return out.StatusCode, nil +} + func NewDockerCli(in io.ReadCloser, out, err io.Writer, proto, addr string) *DockerCli { var ( isTerminal = false From 8374dac02141c1409b93bb3838f6dabbba4d5b14 Mon Sep 17 00:00:00 2001 From: Martin Redmond Date: Thu, 5 Sep 2013 08:28:02 -0400 Subject: [PATCH 134/215] From FIXME: local path for ADD --- buildfile.go | 2 +- buildfile_test.go | 48 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+), 1 deletion(-) diff --git a/buildfile.go b/buildfile.go index 4c8db2c60e..579699f067 100644 --- a/buildfile.go +++ b/buildfile.go @@ -293,7 +293,7 @@ func (b *buildFile) addContext(container *Container, orig, dest string) error { } fi, err := os.Stat(origPath) if err != nil { - return err + return fmt.Errorf("%s: no such file or directory", orig) } if fi.IsDir() { if err := CopyWithTar(origPath, destPath); err != nil { diff --git a/buildfile_test.go b/buildfile_test.go index 14986161d8..a204240d3a 100644 --- a/buildfile_test.go +++ b/buildfile_test.go @@ -483,3 +483,51 @@ func TestForbiddenContextPath(t *testing.T) { t.Fail() } } + +func TestBuildADDFileNotFound(t *testing.T) { + runtime, err := newTestRuntime() + if err != nil { + t.Fatal(err) + } + defer nuke(runtime) + + srv := &Server{ + runtime: runtime, + pullingPool: make(map[string]struct{}), + pushingPool: make(map[string]struct{}), + } + + context := testContextTemplate{` + from {IMAGE} + add foo /usr/local/bar + `, + nil, nil} + + httpServer, err := mkTestingFileServer(context.remoteFiles) + if err != nil { + t.Fatal(err) + } + defer httpServer.Close() + + idx := strings.LastIndex(httpServer.URL, ":") + if idx < 0 { + t.Fatalf("could not get port from test http server address %s", httpServer.URL) + } + port := httpServer.URL[idx+1:] + + ip := srv.runtime.networkManager.bridgeNetwork.IP + dockerfile := constructDockerfile(context.dockerfile, ip, port) + + buildfile := NewBuildFile(srv, ioutil.Discard, false, true) + _, err = buildfile.Build(mkTestContext(dockerfile, context.files, t)) + + if err == nil { + t.Log("Error should not be nil") + t.Fail() + } + + if err.Error() != "foo: no such file or directory" { + t.Logf("Error message is not expected: %s", err.Error()) + t.Fail() + } +} From 35bcba80116668864380319d9b6fe0249cefd114 Mon Sep 17 00:00:00 2001 From: Martin Redmond Date: Fri, 6 Sep 2013 15:51:49 -0400 Subject: [PATCH 135/215] improve image listing --- server.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/server.go b/server.go index 69edabf07a..6db1c63928 100644 --- a/server.go +++ b/server.go @@ -210,8 +210,10 @@ func (srv *Server) Images(all bool, filter string) ([]APIImages, error) { } outs := []APIImages{} //produce [] when empty instead of 'null' for name, repository := range srv.runtime.repositories.Repositories { - if filter != "" && name != filter { - continue + if filter != "" { + if match, _ := path.Match ( filter, name ); !match { + continue + } } for tag, id := range repository { var out APIImages From b44d11312054d1d7bc0f0bbc8eeaddc2d30c26cc Mon Sep 17 00:00:00 2001 From: Martin Redmond Date: Fri, 6 Sep 2013 16:16:10 -0400 Subject: [PATCH 136/215] filter image listing using path.Match --- server.go | 4 ++-- server_test.go | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+), 2 deletions(-) diff --git a/server.go b/server.go index 6db1c63928..a48d590653 100644 --- a/server.go +++ b/server.go @@ -211,7 +211,7 @@ func (srv *Server) Images(all bool, filter string) ([]APIImages, error) { outs := []APIImages{} //produce [] when empty instead of 'null' for name, repository := range srv.runtime.repositories.Repositories { if filter != "" { - if match, _ := path.Match ( filter, name ); !match { + if match, _ := path.Match(filter, name); !match { continue } } @@ -681,7 +681,7 @@ func (srv *Server) getImageList(localRepo map[string]string) ([][]*registry.ImgD depGraph.NewNode(img.ID) img.WalkHistory(func(current *Image) error { imgList[current.ID] = ®istry.ImgData{ - ID: current.ID, + ID: current.ID, Tag: tag, } parent, err := current.GetParent() diff --git a/server_test.go b/server_test.go index 95ebcf2459..ad87b4d0a3 100644 --- a/server_test.go +++ b/server_test.go @@ -431,3 +431,57 @@ func TestRmi(t *testing.T) { } } } + +func TestImagesFilter(t *testing.T) { + runtime := mkRuntime(t) + defer nuke(runtime) + + srv := &Server{runtime: runtime} + + if err := srv.runtime.repositories.Set("utest", "tag1", unitTestImageName, false); err != nil { + t.Fatal(err) + } + + if err := srv.runtime.repositories.Set("utest/docker", "tag2", unitTestImageName, false); err != nil { + t.Fatal(err) + } + if err := srv.runtime.repositories.Set("utest:5000/docker", "tag3", unitTestImageName, false); err != nil { + t.Fatal(err) + } + + images, err := srv.Images(false, "utest*/*") + if err != nil { + t.Fatal(err) + } + + if len(images) != 2 { + t.Fatal("incorrect number of matches returned") + } + + images, err = srv.Images(false, "utest") + if err != nil { + t.Fatal(err) + } + + if len(images) != 1 { + t.Fatal("incorrect number of matches returned") + } + + images, err = srv.Images(false, "utest*") + if err != nil { + t.Fatal(err) + } + + if len(images) != 1 { + t.Fatal("incorrect number of matches returned") + } + + images, err = srv.Images(false, "*5000*/*") + if err != nil { + t.Fatal(err) + } + + if len(images) != 1 { + t.Fatal("incorrect number of matches returned") + } +} From 03a28da5f78bd0f20eca3390a2dddca4ccb6ca81 Mon Sep 17 00:00:00 2001 From: Andy Rothfusz Date: Fri, 6 Sep 2013 13:34:24 -0700 Subject: [PATCH 137/215] Add Swiftype search to docs --- docs/theme/docker/layout.html | 27 +++++++++++++++++++++++++++ docs/theme/docker/static/css/main.css | 18 ++++++++++++++++++ 2 files changed, 45 insertions(+) diff --git a/docs/theme/docker/layout.html b/docs/theme/docker/layout.html index 9b3f565637..91c561235c 100755 --- a/docs/theme/docker/layout.html +++ b/docs/theme/docker/layout.html @@ -110,6 +110,13 @@

@@ -121,6 +128,26 @@ {% block body %}{% endblock %} + +
+ + diff --git a/docs/theme/docker/static/css/main.css b/docs/theme/docker/static/css/main.css index fc1fd4886d..43ec37cfcd 100755 --- a/docs/theme/docker/static/css/main.css +++ b/docs/theme/docker/static/css/main.css @@ -391,3 +391,21 @@ dt:hover > a.headerlink { float: right; visibility: hidden; } + +/* Swiftype style */ + +#st-search-input { + margin-right: 14px; + margin-left: 9px; + height: 19px; + width: 120px; + +} +#swiftype-img { + border: none; + width: 145px; + height: auto; + margin: 0px auto; + margin-left: 13px; + margin-top: -30px; +} \ No newline at end of file From b9ca311008a14910877c6283b1dc7fb4a14bef4c Mon Sep 17 00:00:00 2001 From: Solomon Hykes Date: Fri, 6 Sep 2013 14:48:06 -0700 Subject: [PATCH 138/215] Update roadmap --- hack/ROADMAP.md | 96 ++++++++++--------------------------------------- 1 file changed, 18 insertions(+), 78 deletions(-) diff --git a/hack/ROADMAP.md b/hack/ROADMAP.md index f335db6953..e7dbf80a8a 100644 --- a/hack/ROADMAP.md +++ b/hack/ROADMAP.md @@ -7,99 +7,39 @@ For a more complete view of planned and requested improvements, see [the Github Tu suggest changes to the roadmap, including additions, please write the change as if it were already in effect, and make a pull request. -Broader kernel support ----------------------- -Our goal is to make Docker run everywhere, but currently Docker requires [Linux version 3.8 or higher with lxc and aufs support](http://docs.docker.io/en/latest/installation/kernel.html). If you're deploying new machines for the purpose of running Docker, this is a fairly easy requirement to meet. -However, if you're adding Docker to an existing deployment, you may not have the flexibility to update and patch the kernel. +## Container wiring and service discovery -Expanding Docker's kernel support is a priority. This includes running on older kernel versions, -but also on kernels with no AUFS support, or with incomplete lxc capabilities. +In its current version, docker doesn’t make it very easy to manipulate multiple containers as a cohesive group (ie. orchestration), and it doesn’t make it seamless for containers to connect to each other as network services (ie. wiring). + +To achieve wiring and orchestration with docker today, you need to write glue scripts yourself, or use one several companion tools available, like Orchestra, Shipper, Deis, Pipeworks, etc. + +We want the Docker API to support orchestration and wiring natively, so that these tools can cleanly and seamlessly integrate into the Docker user experience, and remain interoperable with each other. -Cross-architecture support --------------------------- +## Better integration with process supervisors -Our goal is to make Docker run everywhere. However currently Docker only runs on x86_64 systems. -We plan on expanding architecture support, so that Docker containers can be created and used on more architectures. +For docker to be fully usable in production, it needs to cleanly integrate with the host machine’s process supervisor of choice. Whether it’s sysV-init, upstart, systemd, runit or supervisord, we want to make sure docker plays nice with your existing system. This will be a major focus of the 0.7 release. -Even more integrations ----------------------- +## Plugin API -We want Docker to be the secret ingredient that makes your existing tools more awesome. -Thanks to this philosophy, Docker has already been integrated with -[Puppet](http://forge.puppetlabs.com/garethr/docker), [Chef](http://www.opscode.com/chef), -[Openstack Nova](https://github.com/dotcloud/openstack-docker), [Jenkins](https://github.com/georgebashi/jenkins-docker-plugin), -[DotCloud sandbox](http://github.com/dotcloud/sandbox), [Pallet](https://github.com/pallet/pallet-docker), -[Strider CI](http://blog.frozenridge.co/next-generation-continuous-integration-deployment-with-dotclouds-docker-and-strider/) -and even [Heroku buildpacks](https://github.com/progrium/buildstep). +We want Docker to run everywhere, and to integrate with every devops tool. Those are ambitious goals, and the only way to reach them is with the Docker community. For the community to participate fully, we need an API which allows Docker to be deeply and easily customized. -Expect Docker to integrate with even more of your favorite tools going forward, including: - -* Alternative storage backends such as ZFS, LVM or [BTRFS](github.com/dotcloud/docker/issues/443) -* Alternative containerization backends such as [OpenVZ](http://openvz.org), Solaris Zones, BSD Jails and even plain Chroot. -* Process managers like [Supervisord](http://supervisord.org/), [Runit](http://smarden.org/runit/), [Gaffer](https://gaffer.readthedocs.org/en/latest/#gaffer) and [Systemd](http://www.freedesktop.org/wiki/Software/systemd/) -* Build and integration tools like Make, Maven, Scons, Jenkins, Buildbot and Cruise Control. -* Configuration management tools like [Puppet](http://puppetlabs.com), [Chef](http://www.opscode.com/chef/) and [Salt](http://saltstack.org) -* Personal development environments like [Vagrant](http://vagrantup.com), [Boxen](http://boxen.github.com/), [Koding](http://koding.com) and [Cloud9](http://c9.io). -* Orchestration tools like [Zookeeper](http://zookeeper.apache.org/), [Mesos](http://incubator.apache.org/mesos/) and [Galaxy](https://github.com/ning/galaxy) -* Infrastructure deployment tools like [Openstack](http://openstack.org), [Apache Cloudstack](http://apache.cloudstack.org), [Ganeti](https://code.google.com/p/ganeti/) +We are working on a plugin API which will make Docker very, very customization-friendly. We believe it will facilitate the integrations listed above – and many more we didn’t even think about. -Plugin API ----------- +## Broader kernel support -We want Docker to run everywhere, and to integrate with every devops tool. -Those are ambitious goals, and the only way to reach them is with the Docker community. -For the community to participate fully, we need an API which allows Docker to be deeply and easily customized. +Our goal is to make Docker run everywhere, but currently Docker requires Linux version 3.8 or higher with lxc and aufs support. If you’re deploying new machines for the purpose of running Docker, this is a fairly easy requirement to meet. However, if you’re adding Docker to an existing deployment, you may not have the flexibility to update and patch the kernel. -We are working on a plugin API which will make Docker very, very customization-friendly. -We believe it will facilitate the integrations listed above - and many more we didn't even think about. - -Let us know if you want to start playing with the API before it's generally available. +Expanding Docker’s kernel support is a priority. This includes running on older kernel versions, but also on kernels with no AUFS support, or with incomplete lxc capabilities. -Externally mounted volumes --------------------------- +## Cross-architecture support -In 0.3 we [introduced data volumes](https://github.com/dotcloud/docker/wiki/Docker-0.3.0-release-note%2C-May-6-2013#data-volumes), -a great mechanism for manipulating persistent data such as database files, log files, etc. +Our goal is to make Docker run everywhere. However currently Docker only runs on x86_64 systems. We plan on expanding architecture support, so that Docker containers can be created and used on more architectures. -Data volumes can be shared between containers, a powerful capability [which allows many advanced use cases](http://docs.docker.io/en/latest/examples/couchdb_data_volumes.html). In the future it will also be possible to share volumes between a container and the underlying host. This will make certain scenarios much easier, such as using a high-performance storage backend for your production database, -making live development changes available to a container, etc. +## Production-ready - -Better documentation --------------------- - -We believe that great documentation is worth 10 features. We are often told that "Docker's documentation is great for a 2-month old project". -Our goal is to make it great, period. - -If you have feedback on how to improve our documentation, please get in touch by replying to this email, -or by [filing an issue](https://github.com/dotcloud/docker/issues). We always appreciate it! - - -Production-ready ----------------- - -Docker is still alpha software, and not suited for production. -We are working hard to get there, and we are confident that it will be possible within a few months. - - -Advanced port redirections --------------------------- - -Docker currently supports 2 flavors of port redirection: STATIC->STATIC (eg. "redirect public port 80 to private port 80") -and RANDOM->STATIC (eg. "redirect any public port to private port 80"). - -With these 2 flavors, docker can support the majority of backend programs out there. But some applications have more exotic -requirements, generally to implement custom clustering techniques. These applications include Hadoop, MongoDB, Riak, RabbitMQ, -Disco, and all programs relying on Erlang's OTP. - -To support these applications, Docker needs to support more advanced redirection flavors, including: - -* RANDOM->RANDOM -* STATIC1->STATIC2 - -These flavors should be implemented without breaking existing semantics, if at all possible. +Docker is still beta software, and not suited for production. We are working hard to get there, and we are confident that it will be possible within a few months. Stay tuned for a more detailed roadmap soon. From bcb8d3fd86ac620dc4f35c805b4e0f8e8fcb7663 Mon Sep 17 00:00:00 2001 From: Solomon Hykes Date: Fri, 6 Sep 2013 14:52:14 -0700 Subject: [PATCH 139/215] README: refer to the docs for install instructions to remove duplication. --- README.md | 20 +++----------------- 1 file changed, 3 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index 336dd94302..cbe5dfee2a 100644 --- a/README.md +++ b/README.md @@ -143,25 +143,11 @@ as they can be built by running a Unix command in a container. Install instructions ================== -Quick install on Ubuntu 12.04 and 12.10 ---------------------------------------- +Docker can be installed on your local machine as well as servers - both bare metal and virtualized. +It is available as a binary on most modern Linux systems, or as a VM on Windows, Mac and other systems. -```bash -curl https://get.docker.io | sudo sh -x -``` +For the most up-to-date install instructions, see the [install page on the documentation](http://docs.docker.io/en/latest/installation/). -Binary installs ----------------- - -Docker supports the following binary installation methods. Note that -some methods are community contributions and not yet officially -supported. - -* [Ubuntu 12.04 and 12.10 (officially supported)](http://docs.docker.io/en/latest/installation/ubuntulinux/) -* [Arch Linux](http://docs.docker.io/en/latest/installation/archlinux/) -* [Mac OS X (with Vagrant)](http://docs.docker.io/en/latest/installation/vagrant/) -* [Windows (with Vagrant)](http://docs.docker.io/en/latest/installation/windows/) -* [Amazon EC2 (with Vagrant)](http://docs.docker.io/en/latest/installation/amazon/) Usage examples ============== From 70ab25a5dbc8f54dbe15e9375687b4669ed919df Mon Sep 17 00:00:00 2001 From: Solomon Hykes Date: Fri, 6 Sep 2013 15:08:01 -0700 Subject: [PATCH 140/215] README: harmonize intro with website --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index cbe5dfee2a..7b19f95ee9 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ Docker: the Linux container engine ================================== -Docker is an open-source engine which automates the deployment of -applications as highly portable, self-sufficient containers. +Docker is an open source project to pack, ship and run any application +as a lightweight container Docker containers are both *hardware-agnostic* and *platform-agnostic*. This means that they can run anywhere, from your From 6679f3b053344e6e99d5e490720c9ccb924a7d4c Mon Sep 17 00:00:00 2001 From: Solomon Hykes Date: Fri, 6 Sep 2013 15:09:04 -0700 Subject: [PATCH 141/215] README: replace 'install instructions' and 'usage examples' with references to the website and docs --- README.md | 104 +++++------------------------------------------------- 1 file changed, 9 insertions(+), 95 deletions(-) diff --git a/README.md b/README.md index 7b19f95ee9..19e7013441 100644 --- a/README.md +++ b/README.md @@ -140,111 +140,25 @@ Note that Docker doesn't care *how* dependencies are built - as long as they can be built by running a Unix command in a container. -Install instructions -================== +Getting started +=============== Docker can be installed on your local machine as well as servers - both bare metal and virtualized. It is available as a binary on most modern Linux systems, or as a VM on Windows, Mac and other systems. -For the most up-to-date install instructions, see the [install page on the documentation](http://docs.docker.io/en/latest/installation/). +We also offer an interactive tutorial for quickly learning the basics of using Docker. + + +For up-to-date install instructions and online tutorials, see the [Getting Started page](http://www.docker.io/gettingstarted/). Usage examples ============== -First run the ``docker`` daemon -------------------------------- +Docker can be used to run short-lived commands, long-running daemons (app servers, databases etc.), +interactive shell sessions, etc. -All the examples assume your machine is running the ``docker`` -daemon. To run the ``docker`` daemon in the background, simply type: - -```bash -# On a production system you want this running in an init script -sudo docker -d & -``` - -Now you can run ``docker`` in client mode: all commands will be -forwarded to the ``docker`` daemon, so the client can run from any -account. - -```bash -# Now you can run docker commands from any account. -docker help -``` - - -Throwaway shell in a base Ubuntu image --------------------------------------- - -```bash -docker pull ubuntu:12.10 - -# Run an interactive shell, allocate a tty, attach stdin and stdout -# To detach the tty without exiting the shell, use the escape sequence Ctrl-p + Ctrl-q -docker run -i -t ubuntu:12.10 /bin/bash -``` - -Starting a long-running worker process --------------------------------------- - -```bash -# Start a very useful long-running process -JOB=$(docker run -d ubuntu /bin/sh -c "while true; do echo Hello world; sleep 1; done") - -# Collect the output of the job so far -docker logs $JOB - -# Kill the job -docker kill $JOB -``` - -Running an irc bouncer ----------------------- - -```bash -BOUNCER_ID=$(docker run -d -p 6667 -u irc shykes/znc zncrun $USER $PASSWORD) -echo "Configure your irc client to connect to port $(docker port $BOUNCER_ID 6667) of this machine" -``` - -Running Redis -------------- - -```bash -REDIS_ID=$(docker run -d -p 6379 shykes/redis redis-server) -echo "Configure your redis client to connect to port $(docker port $REDIS_ID 6379) of this machine" -``` - -Share your own image! ---------------------- - -```bash -CONTAINER=$(docker run -d ubuntu:12.10 apt-get install -y curl) -docker commit -m "Installed curl" $CONTAINER $USER/betterbase -docker push $USER/betterbase -``` - -A list of publicly available images is [available -here](https://github.com/dotcloud/docker/wiki/Public-docker-images). - -Expose a service on a TCP port ------------------------------- - -```bash -# Expose port 4444 of this container, and tell netcat to listen on it -JOB=$(docker run -d -p 4444 base /bin/nc -l -p 4444) - -# Which public port is NATed to my container? -PORT=$(docker port $JOB 4444) - -# Connect to the public port via the host's public address -# Please note that because of how routing works connecting to localhost or 127.0.0.1 $PORT will not work. -# Replace *eth0* according to your local interface name. -IP=$(ip -o -4 addr list eth0 | perl -n -e 'if (m{inet\s([\d\.]+)\/\d+\s}xms) { print $1 }') -echo hello world | nc $IP $PORT - -# Verify that the network connection worked -echo "Daemon received: $(docker logs $JOB)" -``` +You can find a [list of real-world examples](http://docs.docker.io/en/latest/examples/) in the documentation. Under the hood -------------- From eed00a4afd1e8e8e35f8ca640c94d9c9e9babaf7 Mon Sep 17 00:00:00 2001 From: Solomon Hykes Date: Fri, 6 Sep 2013 15:09:40 -0700 Subject: [PATCH 142/215] README: remove original shipping containers 'manifesto'. It's a little long to stay here. --- README.md | 136 ------------------------------------------------------ 1 file changed, 136 deletions(-) diff --git a/README.md b/README.md index 19e7013441..a36bfba73f 100644 --- a/README.md +++ b/README.md @@ -188,142 +188,6 @@ They are probably not perfect, please let us know if anything feels wrong or incomplete. -Note ----- - -We also keep the documentation in this repository. The website -documentation is generated using Sphinx using these sources. Please -find it under docs/sources/ and read more about it -https://github.com/dotcloud/docker/tree/master/docs/README.md - -Please feel free to fix / update the documentation and send us pull -requests. More tutorials are also welcome. - - -Setting up a dev environment ----------------------------- - -Instructions that have been verified to work on Ubuntu 12.10, - -```bash -sudo apt-get -y install lxc curl xz-utils golang git mercurial - -export GOPATH=~/go/ -export PATH=$GOPATH/bin:$PATH - -mkdir -p $GOPATH/src/github.com/dotcloud -cd $GOPATH/src/github.com/dotcloud -git clone https://github.com/dotcloud/docker.git -cd docker - -go get -v github.com/dotcloud/docker/... -go install -v github.com/dotcloud/docker/... -``` - -Then run the docker daemon, - -```bash -sudo $GOPATH/bin/docker -d -``` - -Run the `go install` command (above) to recompile docker. - - -What is a Standard Container? -============================= - -Docker defines a unit of software delivery called a Standard -Container. The goal of a Standard Container is to encapsulate a -software component and all its dependencies in a format that is -self-describing and portable, so that any compliant runtime can run it -without extra dependencies, regardless of the underlying machine and -the contents of the container. - -The spec for Standard Containers is currently a work in progress, but -it is very straightforward. It mostly defines 1) an image format, 2) a -set of standard operations, and 3) an execution environment. - -A great analogy for this is the shipping container. Just like how -Standard Containers are a fundamental unit of software delivery, -shipping containers are a fundamental unit of physical delivery. - -### 1. STANDARD OPERATIONS - -Just like shipping containers, Standard Containers define a set of -STANDARD OPERATIONS. Shipping containers can be lifted, stacked, -locked, loaded, unloaded and labelled. Similarly, Standard Containers -can be started, stopped, copied, snapshotted, downloaded, uploaded and -tagged. - - -### 2. CONTENT-AGNOSTIC - -Just like shipping containers, Standard Containers are -CONTENT-AGNOSTIC: all standard operations have the same effect -regardless of the contents. A shipping container will be stacked in -exactly the same way whether it contains Vietnamese powder coffee or -spare Maserati parts. Similarly, Standard Containers are started or -uploaded in the same way whether they contain a postgres database, a -php application with its dependencies and application server, or Java -build artifacts. - - -### 3. INFRASTRUCTURE-AGNOSTIC - -Both types of containers are INFRASTRUCTURE-AGNOSTIC: they can be -transported to thousands of facilities around the world, and -manipulated by a wide variety of equipment. A shipping container can -be packed in a factory in Ukraine, transported by truck to the nearest -routing center, stacked onto a train, loaded into a German boat by an -Australian-built crane, stored in a warehouse at a US facility, -etc. Similarly, a standard container can be bundled on my laptop, -uploaded to S3, downloaded, run and snapshotted by a build server at -Equinix in Virginia, uploaded to 10 staging servers in a home-made -Openstack cluster, then sent to 30 production instances across 3 EC2 -regions. - - -### 4. DESIGNED FOR AUTOMATION - -Because they offer the same standard operations regardless of content -and infrastructure, Standard Containers, just like their physical -counterparts, are extremely well-suited for automation. In fact, you -could say automation is their secret weapon. - -Many things that once required time-consuming and error-prone human -effort can now be programmed. Before shipping containers, a bag of -powder coffee was hauled, dragged, dropped, rolled and stacked by 10 -different people in 10 different locations by the time it reached its -destination. 1 out of 50 disappeared. 1 out of 20 was damaged. The -process was slow, inefficient and cost a fortune - and was entirely -different depending on the facility and the type of goods. - -Similarly, before Standard Containers, by the time a software -component ran in production, it had been individually built, -configured, bundled, documented, patched, vendored, templated, tweaked -and instrumented by 10 different people on 10 different -computers. Builds failed, libraries conflicted, mirrors crashed, -post-it notes were lost, logs were misplaced, cluster updates were -half-broken. The process was slow, inefficient and cost a fortune - -and was entirely different depending on the language and -infrastructure provider. - - -### 5. INDUSTRIAL-GRADE DELIVERY - -There are 17 million shipping containers in existence, packed with -every physical good imaginable. Every single one of them can be loaded -onto the same boats, by the same cranes, in the same facilities, and -sent anywhere in the World with incredible efficiency. It is -embarrassing to think that a 30 ton shipment of coffee can safely -travel half-way across the World in *less time* than it takes a -software team to deliver its code from one datacenter to another -sitting 10 miles away. - -With Standard Containers we can put an end to that embarrassment, by -making INDUSTRIAL-GRADE DELIVERY of software a reality. - - ### Legal Transfers of Docker shall be in accordance with applicable export From b07314e2e066a1308040e1eb45a96a0e1056f28a Mon Sep 17 00:00:00 2001 From: "Guillaume J. Charmes" Date: Fri, 6 Sep 2013 23:00:21 +0000 Subject: [PATCH 143/215] Remove import os/user --- utils/utils.go | 31 +++++++++++++++++++------------ 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/utils/utils.go b/utils/utils.go index b761da0fbd..aa34abdddc 100644 --- a/utils/utils.go +++ b/utils/utils.go @@ -14,7 +14,6 @@ import ( "net/http" "os" "os/exec" - "os/user" "path/filepath" "runtime" "strconv" @@ -802,7 +801,7 @@ func StripComments(input []byte, commentMarker []byte) []byte { var output []byte for _, currentLine := range lines { var commentIndex = bytes.Index(currentLine, commentMarker) - if ( commentIndex == -1 ) { + if commentIndex == -1 { output = append(output, currentLine...) } else { output = append(output, currentLine[:commentIndex]...) @@ -867,10 +866,18 @@ func ParseRepositoryTag(repos string) (string, string) { return repos, "" } +type User struct { + Uid string // user id + Gid string // primary group id + Username string + Name string + HomeDir string +} + // UserLookup check if the given username or uid is present in /etc/passwd // and returns the user struct. // If the username is not found, an error is returned. -func UserLookup(uid string) (*user.User, error) { +func UserLookup(uid string) (*User, error) { file, err := ioutil.ReadFile("/etc/passwd") if err != nil { return nil, err @@ -878,7 +885,7 @@ func UserLookup(uid string) (*user.User, error) { for _, line := range strings.Split(string(file), "\n") { data := strings.Split(line, ":") if len(data) > 5 && (data[0] == uid || data[2] == uid) { - return &user.User{ + return &User{ Uid: data[2], Gid: data[3], Username: data[0], @@ -890,13 +897,13 @@ func UserLookup(uid string) (*user.User, error) { return nil, fmt.Errorf("User not found in /etc/passwd") } -type DependencyGraph struct{ +type DependencyGraph struct { nodes map[string]*DependencyNode } -type DependencyNode struct{ - id string - deps map[*DependencyNode]bool +type DependencyNode struct { + id string + deps map[*DependencyNode]bool } func NewDependencyGraph() DependencyGraph { @@ -917,7 +924,7 @@ func (graph *DependencyGraph) NewNode(id string) string { return id } nd := &DependencyNode{ - id: id, + id: id, deps: map[*DependencyNode]bool{}, } graph.addNode(nd) @@ -979,7 +986,7 @@ func (graph *DependencyGraph) GenerateTraversalMap() ([][]string, error) { // If at least one dep hasn't been processed yet, we can't // add it. ok := true - for dep, _ := range node.deps { + for dep := range node.deps { if !processed[dep] { ok = false break @@ -991,7 +998,7 @@ func (graph *DependencyGraph) GenerateTraversalMap() ([][]string, error) { } } Debugf("Round %d: found %d available nodes", len(result), len(tmp_processed)) - // If no progress has been made this round, + // If no progress has been made this round, // that means we have circular dependencies. if len(tmp_processed) == 0 { return nil, fmt.Errorf("Could not find a solution to this dependency graph") @@ -1004,4 +1011,4 @@ func (graph *DependencyGraph) GenerateTraversalMap() ([][]string, error) { result = append(result, round) } return result, nil -} \ No newline at end of file +} From 24e02043a2672320abebc3bd5fa6a592e2ebd082 Mon Sep 17 00:00:00 2001 From: Solomon Hykes Date: Fri, 6 Sep 2013 17:33:05 -0700 Subject: [PATCH 144/215] Merge builder.go into runtime.go --- api_test.go | 39 +++++------- builder.go | 154 ---------------------------------------------- buildfile.go | 10 ++- container_test.go | 70 ++++++++++----------- runtime.go | 131 +++++++++++++++++++++++++++++++++++++++ runtime_test.go | 12 ++-- server.go | 10 ++- utils_test.go | 2 +- 8 files changed, 191 insertions(+), 237 deletions(-) delete mode 100644 builder.go diff --git a/api_test.go b/api_test.go index 1e8ed20b98..837a20c244 100644 --- a/api_test.go +++ b/api_test.go @@ -321,7 +321,7 @@ func TestGetContainersJSON(t *testing.T) { srv := &Server{runtime: runtime} - container, err := NewBuilder(runtime).Create(&Config{ + container, err := runtime.Create(&Config{ Image: GetTestImage(runtime).ID, Cmd: []string{"echo", "test"}, }) @@ -357,10 +357,8 @@ func TestGetContainersExport(t *testing.T) { srv := &Server{runtime: runtime} - builder := NewBuilder(runtime) - // Create a container and remove a file - container, err := builder.Create( + container, err := runtime.Create( &Config{ Image: GetTestImage(runtime).ID, Cmd: []string{"touch", "/test"}, @@ -409,10 +407,8 @@ func TestGetContainersChanges(t *testing.T) { srv := &Server{runtime: runtime} - builder := NewBuilder(runtime) - // Create a container and remove a file - container, err := builder.Create( + container, err := runtime.Create( &Config{ Image: GetTestImage(runtime).ID, Cmd: []string{"/bin/rm", "/etc/passwd"}, @@ -458,9 +454,7 @@ func TestGetContainersTop(t *testing.T) { srv := &Server{runtime: runtime} - builder := NewBuilder(runtime) - - container, err := builder.Create( + container, err := runtime.Create( &Config{ Image: GetTestImage(runtime).ID, Cmd: []string{"/bin/sh", "-c", "cat"}, @@ -541,10 +535,8 @@ func TestGetContainersByName(t *testing.T) { srv := &Server{runtime: runtime} - builder := NewBuilder(runtime) - // Create a container and remove a file - container, err := builder.Create( + container, err := runtime.Create( &Config{ Image: GetTestImage(runtime).ID, Cmd: []string{"echo", "test"}, @@ -574,10 +566,9 @@ func TestPostCommit(t *testing.T) { srv := &Server{runtime: runtime} - builder := NewBuilder(runtime) // Create a container and remove a file - container, err := builder.Create( + container, err := runtime.Create( &Config{ Image: GetTestImage(runtime).ID, Cmd: []string{"touch", "/test"}, @@ -671,7 +662,7 @@ func TestPostContainersKill(t *testing.T) { srv := &Server{runtime: runtime} - container, err := NewBuilder(runtime).Create( + container, err := runtime.Create( &Config{ Image: GetTestImage(runtime).ID, Cmd: []string{"/bin/cat"}, @@ -713,7 +704,7 @@ func TestPostContainersRestart(t *testing.T) { srv := &Server{runtime: runtime} - container, err := NewBuilder(runtime).Create( + container, err := runtime.Create( &Config{ Image: GetTestImage(runtime).ID, Cmd: []string{"/bin/cat"}, @@ -767,7 +758,7 @@ func TestPostContainersStart(t *testing.T) { srv := &Server{runtime: runtime} - container, err := NewBuilder(runtime).Create( + container, err := runtime.Create( &Config{ Image: GetTestImage(runtime).ID, Cmd: []string{"/bin/cat"}, @@ -817,7 +808,7 @@ func TestPostContainersStop(t *testing.T) { srv := &Server{runtime: runtime} - container, err := NewBuilder(runtime).Create( + container, err := runtime.Create( &Config{ Image: GetTestImage(runtime).ID, Cmd: []string{"/bin/cat"}, @@ -864,7 +855,7 @@ func TestPostContainersWait(t *testing.T) { srv := &Server{runtime: runtime} - container, err := NewBuilder(runtime).Create( + container, err := runtime.Create( &Config{ Image: GetTestImage(runtime).ID, Cmd: []string{"/bin/sleep", "1"}, @@ -906,7 +897,7 @@ func TestPostContainersAttach(t *testing.T) { srv := &Server{runtime: runtime} - container, err := NewBuilder(runtime).Create( + container, err := runtime.Create( &Config{ Image: GetTestImage(runtime).ID, Cmd: []string{"/bin/cat"}, @@ -998,7 +989,7 @@ func TestDeleteContainers(t *testing.T) { srv := &Server{runtime: runtime} - container, err := NewBuilder(runtime).Create(&Config{ + container, err := runtime.Create(&Config{ Image: GetTestImage(runtime).ID, Cmd: []string{"touch", "/test"}, }) @@ -1185,10 +1176,8 @@ func TestPostContainersCopy(t *testing.T) { srv := &Server{runtime: runtime} - builder := NewBuilder(runtime) - // Create a container and remove a file - container, err := builder.Create( + container, err := runtime.Create( &Config{ Image: GetTestImage(runtime).ID, Cmd: []string{"touch", "/test.txt"}, diff --git a/builder.go b/builder.go deleted file mode 100644 index 9124f76ac1..0000000000 --- a/builder.go +++ /dev/null @@ -1,154 +0,0 @@ -package docker - -import ( - "fmt" - "github.com/dotcloud/docker/utils" - "os" - "path" - "time" -) - -var defaultDns = []string{"8.8.8.8", "8.8.4.4"} - -type Builder struct { - runtime *Runtime - repositories *TagStore - graph *Graph - - config *Config - image *Image -} - -func NewBuilder(runtime *Runtime) *Builder { - return &Builder{ - runtime: runtime, - graph: runtime.graph, - repositories: runtime.repositories, - } -} - -func (builder *Builder) Create(config *Config) (*Container, error) { - // Lookup image - img, err := builder.repositories.LookupImage(config.Image) - if err != nil { - return nil, err - } - - if img.Config != nil { - MergeConfig(config, img.Config) - } - - if len(config.Entrypoint) != 0 && config.Cmd == nil { - config.Cmd = []string{} - } else if config.Cmd == nil || len(config.Cmd) == 0 { - return nil, fmt.Errorf("No command specified") - } - - // Generate id - id := GenerateID() - // Generate default hostname - // FIXME: the lxc template no longer needs to set a default hostname - if config.Hostname == "" { - config.Hostname = id[:12] - } - - var args []string - var entrypoint string - - if len(config.Entrypoint) != 0 { - entrypoint = config.Entrypoint[0] - args = append(config.Entrypoint[1:], config.Cmd...) - } else { - entrypoint = config.Cmd[0] - args = config.Cmd[1:] - } - - container := &Container{ - // FIXME: we should generate the ID here instead of receiving it as an argument - ID: id, - Created: time.Now(), - Path: entrypoint, - Args: args, //FIXME: de-duplicate from config - Config: config, - Image: img.ID, // Always use the resolved image id - NetworkSettings: &NetworkSettings{}, - // FIXME: do we need to store this in the container? - SysInitPath: sysInitPath, - } - container.root = builder.runtime.containerRoot(container.ID) - // Step 1: create the container directory. - // This doubles as a barrier to avoid race conditions. - if err := os.Mkdir(container.root, 0700); err != nil { - return nil, err - } - - resolvConf, err := utils.GetResolvConf() - if err != nil { - return nil, err - } - - if len(config.Dns) == 0 && len(builder.runtime.Dns) == 0 && utils.CheckLocalDns(resolvConf) { - //"WARNING: Docker detected local DNS server on resolv.conf. Using default external servers: %v", defaultDns - builder.runtime.Dns = defaultDns - } - - // If custom dns exists, then create a resolv.conf for the container - if len(config.Dns) > 0 || len(builder.runtime.Dns) > 0 { - var dns []string - if len(config.Dns) > 0 { - dns = config.Dns - } else { - dns = builder.runtime.Dns - } - container.ResolvConfPath = path.Join(container.root, "resolv.conf") - f, err := os.Create(container.ResolvConfPath) - if err != nil { - return nil, err - } - defer f.Close() - for _, dns := range dns { - if _, err := f.Write([]byte("nameserver " + dns + "\n")); err != nil { - return nil, err - } - } - } else { - container.ResolvConfPath = "/etc/resolv.conf" - } - - // Step 2: save the container json - if err := container.ToDisk(); err != nil { - return nil, err - } - // Step 3: register the container - if err := builder.runtime.Register(container); err != nil { - return nil, err - } - return container, nil -} - -// Commit creates a new filesystem image from the current state of a container. -// The image can optionally be tagged into a repository -func (builder *Builder) Commit(container *Container, repository, tag, comment, author string, config *Config) (*Image, error) { - // FIXME: freeze the container before copying it to avoid data corruption? - // FIXME: this shouldn't be in commands. - if err := container.EnsureMounted(); err != nil { - return nil, err - } - - rwTar, err := container.ExportRw() - if err != nil { - return nil, err - } - // Create a new image from the container's base layers + a new layer from container changes - img, err := builder.graph.Create(rwTar, container, comment, author, config) - if err != nil { - return nil, err - } - // Register the image if needed - if repository != "" { - if err := builder.repositories.Set(repository, tag, img.ID, true); err != nil { - return img, err - } - } - return img, nil -} diff --git a/buildfile.go b/buildfile.go index 4c8db2c60e..c3c212c693 100644 --- a/buildfile.go +++ b/buildfile.go @@ -23,7 +23,6 @@ type BuildFile interface { type buildFile struct { runtime *Runtime - builder *Builder srv *Server image string @@ -337,7 +336,7 @@ func (b *buildFile) CmdAdd(args string) error { b.config.Image = b.image // Create the container and start it - container, err := b.builder.Create(b.config) + container, err := b.runtime.Create(b.config) if err != nil { return err } @@ -372,7 +371,7 @@ func (b *buildFile) run() (string, error) { b.config.Image = b.image // Create the container and start it - c, err := b.builder.Create(b.config) + c, err := b.runtime.Create(b.config) if err != nil { return "", err } @@ -428,7 +427,7 @@ func (b *buildFile) commit(id string, autoCmd []string, comment string) error { } } - container, err := b.builder.Create(b.config) + container, err := b.runtime.Create(b.config) if err != nil { return err } @@ -450,7 +449,7 @@ func (b *buildFile) commit(id string, autoCmd []string, comment string) error { autoConfig := *b.config autoConfig.Cmd = autoCmd // Commit the container - image, err := b.builder.Commit(container, "", "", "", b.maintainer, &autoConfig) + image, err := b.runtime.Commit(container, "", "", "", b.maintainer, &autoConfig) if err != nil { return err } @@ -524,7 +523,6 @@ func (b *buildFile) Build(context io.Reader) (string, error) { func NewBuildFile(srv *Server, out io.Writer, verbose, utilizeCache bool) BuildFile { return &buildFile{ - builder: NewBuilder(srv.runtime), runtime: srv.runtime, srv: srv, config: &Config{}, diff --git a/container_test.go b/container_test.go index b06d531cf7..b792af76d5 100644 --- a/container_test.go +++ b/container_test.go @@ -18,7 +18,7 @@ import ( func TestIDFormat(t *testing.T) { runtime := mkRuntime(t) defer nuke(runtime) - container1, err := NewBuilder(runtime).Create( + container1, err := runtime.Create( &Config{ Image: GetTestImage(runtime).ID, Cmd: []string{"/bin/sh", "-c", "echo hello world"}, @@ -388,7 +388,7 @@ func TestRun(t *testing.T) { func TestOutput(t *testing.T) { runtime := mkRuntime(t) defer nuke(runtime) - container, err := NewBuilder(runtime).Create( + container, err := runtime.Create( &Config{ Image: GetTestImage(runtime).ID, Cmd: []string{"echo", "-n", "foobar"}, @@ -411,7 +411,7 @@ func TestKillDifferentUser(t *testing.T) { runtime := mkRuntime(t) defer nuke(runtime) - container, err := NewBuilder(runtime).Create(&Config{ + container, err := runtime.Create(&Config{ Image: GetTestImage(runtime).ID, Cmd: []string{"cat"}, OpenStdin: true, @@ -471,7 +471,7 @@ func TestCreateVolume(t *testing.T) { if err != nil { t.Fatal(err) } - c, err := NewBuilder(runtime).Create(config) + c, err := runtime.Create(config) if err != nil { t.Fatal(err) } @@ -486,7 +486,7 @@ func TestCreateVolume(t *testing.T) { func TestKill(t *testing.T) { runtime := mkRuntime(t) defer nuke(runtime) - container, err := NewBuilder(runtime).Create(&Config{ + container, err := runtime.Create(&Config{ Image: GetTestImage(runtime).ID, Cmd: []string{"sleep", "2"}, }, @@ -530,9 +530,7 @@ func TestExitCode(t *testing.T) { runtime := mkRuntime(t) defer nuke(runtime) - builder := NewBuilder(runtime) - - trueContainer, err := builder.Create(&Config{ + trueContainer, err := runtime.Create(&Config{ Image: GetTestImage(runtime).ID, Cmd: []string{"/bin/true", ""}, }) @@ -547,7 +545,7 @@ func TestExitCode(t *testing.T) { t.Errorf("Unexpected exit code %d (expected 0)", trueContainer.State.ExitCode) } - falseContainer, err := builder.Create(&Config{ + falseContainer, err := runtime.Create(&Config{ Image: GetTestImage(runtime).ID, Cmd: []string{"/bin/false", ""}, }) @@ -566,7 +564,7 @@ func TestExitCode(t *testing.T) { func TestRestart(t *testing.T) { runtime := mkRuntime(t) defer nuke(runtime) - container, err := NewBuilder(runtime).Create(&Config{ + container, err := runtime.Create(&Config{ Image: GetTestImage(runtime).ID, Cmd: []string{"echo", "-n", "foobar"}, }, @@ -596,7 +594,7 @@ func TestRestart(t *testing.T) { func TestRestartStdin(t *testing.T) { runtime := mkRuntime(t) defer nuke(runtime) - container, err := NewBuilder(runtime).Create(&Config{ + container, err := runtime.Create(&Config{ Image: GetTestImage(runtime).ID, Cmd: []string{"cat"}, @@ -673,10 +671,8 @@ func TestUser(t *testing.T) { runtime := mkRuntime(t) defer nuke(runtime) - builder := NewBuilder(runtime) - // Default user must be root - container, err := builder.Create(&Config{ + container, err := runtime.Create(&Config{ Image: GetTestImage(runtime).ID, Cmd: []string{"id"}, }, @@ -694,7 +690,7 @@ func TestUser(t *testing.T) { } // Set a username - container, err = builder.Create(&Config{ + container, err = runtime.Create(&Config{ Image: GetTestImage(runtime).ID, Cmd: []string{"id"}, @@ -714,7 +710,7 @@ func TestUser(t *testing.T) { } // Set a UID - container, err = builder.Create(&Config{ + container, err = runtime.Create(&Config{ Image: GetTestImage(runtime).ID, Cmd: []string{"id"}, @@ -734,7 +730,7 @@ func TestUser(t *testing.T) { } // Set a different user by uid - container, err = builder.Create(&Config{ + container, err = runtime.Create(&Config{ Image: GetTestImage(runtime).ID, Cmd: []string{"id"}, @@ -756,7 +752,7 @@ func TestUser(t *testing.T) { } // Set a different user by username - container, err = builder.Create(&Config{ + container, err = runtime.Create(&Config{ Image: GetTestImage(runtime).ID, Cmd: []string{"id"}, @@ -776,7 +772,7 @@ func TestUser(t *testing.T) { } // Test an wrong username - container, err = builder.Create(&Config{ + container, err = runtime.Create(&Config{ Image: GetTestImage(runtime).ID, Cmd: []string{"id"}, @@ -797,9 +793,7 @@ func TestMultipleContainers(t *testing.T) { runtime := mkRuntime(t) defer nuke(runtime) - builder := NewBuilder(runtime) - - container1, err := builder.Create(&Config{ + container1, err := runtime.Create(&Config{ Image: GetTestImage(runtime).ID, Cmd: []string{"sleep", "2"}, }, @@ -809,7 +803,7 @@ func TestMultipleContainers(t *testing.T) { } defer runtime.Destroy(container1) - container2, err := builder.Create(&Config{ + container2, err := runtime.Create(&Config{ Image: GetTestImage(runtime).ID, Cmd: []string{"sleep", "2"}, }, @@ -853,7 +847,7 @@ func TestMultipleContainers(t *testing.T) { func TestStdin(t *testing.T) { runtime := mkRuntime(t) defer nuke(runtime) - container, err := NewBuilder(runtime).Create(&Config{ + container, err := runtime.Create(&Config{ Image: GetTestImage(runtime).ID, Cmd: []string{"cat"}, @@ -898,7 +892,7 @@ func TestStdin(t *testing.T) { func TestTty(t *testing.T) { runtime := mkRuntime(t) defer nuke(runtime) - container, err := NewBuilder(runtime).Create(&Config{ + container, err := runtime.Create(&Config{ Image: GetTestImage(runtime).ID, Cmd: []string{"cat"}, @@ -943,7 +937,7 @@ func TestTty(t *testing.T) { func TestEnv(t *testing.T) { runtime := mkRuntime(t) defer nuke(runtime) - container, err := NewBuilder(runtime).Create(&Config{ + container, err := runtime.Create(&Config{ Image: GetTestImage(runtime).ID, Cmd: []string{"env"}, }, @@ -992,7 +986,7 @@ func TestEnv(t *testing.T) { func TestEntrypoint(t *testing.T) { runtime := mkRuntime(t) defer nuke(runtime) - container, err := NewBuilder(runtime).Create( + container, err := runtime.Create( &Config{ Image: GetTestImage(runtime).ID, Entrypoint: []string{"/bin/echo"}, @@ -1015,7 +1009,7 @@ func TestEntrypoint(t *testing.T) { func TestEntrypointNoCmd(t *testing.T) { runtime := mkRuntime(t) defer nuke(runtime) - container, err := NewBuilder(runtime).Create( + container, err := runtime.Create( &Config{ Image: GetTestImage(runtime).ID, Entrypoint: []string{"/bin/echo", "foobar"}, @@ -1066,7 +1060,7 @@ func TestLXCConfig(t *testing.T) { cpuMin := 100 cpuMax := 10000 cpu := cpuMin + rand.Intn(cpuMax-cpuMin) - container, err := NewBuilder(runtime).Create(&Config{ + container, err := runtime.Create(&Config{ Image: GetTestImage(runtime).ID, Cmd: []string{"/bin/true"}, @@ -1090,7 +1084,7 @@ func TestLXCConfig(t *testing.T) { func TestCustomLxcConfig(t *testing.T) { runtime := mkRuntime(t) defer nuke(runtime) - container, err := NewBuilder(runtime).Create(&Config{ + container, err := runtime.Create(&Config{ Image: GetTestImage(runtime).ID, Cmd: []string{"/bin/true"}, @@ -1121,7 +1115,7 @@ func BenchmarkRunSequencial(b *testing.B) { runtime := mkRuntime(b) defer nuke(runtime) for i := 0; i < b.N; i++ { - container, err := NewBuilder(runtime).Create(&Config{ + container, err := runtime.Create(&Config{ Image: GetTestImage(runtime).ID, Cmd: []string{"echo", "-n", "foo"}, }, @@ -1153,7 +1147,7 @@ func BenchmarkRunParallel(b *testing.B) { complete := make(chan error) tasks = append(tasks, complete) go func(i int, complete chan error) { - container, err := NewBuilder(runtime).Create(&Config{ + container, err := runtime.Create(&Config{ Image: GetTestImage(runtime).ID, Cmd: []string{"echo", "-n", "foo"}, }, @@ -1229,7 +1223,7 @@ func TestBindMounts(t *testing.T) { func TestVolumesFromReadonlyMount(t *testing.T) { runtime := mkRuntime(t) defer nuke(runtime) - container, err := NewBuilder(runtime).Create( + container, err := runtime.Create( &Config{ Image: GetTestImage(runtime).ID, Cmd: []string{"/bin/echo", "-n", "foobar"}, @@ -1248,7 +1242,7 @@ func TestVolumesFromReadonlyMount(t *testing.T) { t.Fail() } - container2, err := NewBuilder(runtime).Create( + container2, err := runtime.Create( &Config{ Image: GetTestImage(runtime).ID, Cmd: []string{"/bin/echo", "-n", "foobar"}, @@ -1284,7 +1278,7 @@ func TestRestartWithVolumes(t *testing.T) { runtime := mkRuntime(t) defer nuke(runtime) - container, err := NewBuilder(runtime).Create(&Config{ + container, err := runtime.Create(&Config{ Image: GetTestImage(runtime).ID, Cmd: []string{"echo", "-n", "foobar"}, Volumes: map[string]struct{}{"/test": {}}, @@ -1327,7 +1321,7 @@ func TestVolumesFromWithVolumes(t *testing.T) { runtime := mkRuntime(t) defer nuke(runtime) - container, err := NewBuilder(runtime).Create(&Config{ + container, err := runtime.Create(&Config{ Image: GetTestImage(runtime).ID, Cmd: []string{"sh", "-c", "echo -n bar > /test/foo"}, Volumes: map[string]struct{}{"/test": {}}, @@ -1354,7 +1348,7 @@ func TestVolumesFromWithVolumes(t *testing.T) { t.Fail() } - container2, err := NewBuilder(runtime).Create( + container2, err := runtime.Create( &Config{ Image: GetTestImage(runtime).ID, Cmd: []string{"cat", "/test/foo"}, @@ -1395,7 +1389,7 @@ func TestOnlyLoopbackExistsWhenUsingDisableNetworkOption(t *testing.T) { if err != nil { t.Fatal(err) } - c, err := NewBuilder(runtime).Create(config) + c, err := runtime.Create(config) if err != nil { t.Fatal(err) } diff --git a/runtime.go b/runtime.go index 002c0fe10a..92141be1c9 100644 --- a/runtime.go +++ b/runtime.go @@ -14,6 +14,8 @@ import ( "strings" ) +var defaultDns = []string{"8.8.8.8", "8.8.4.4"} + type Capabilities struct { MemoryLimit bool SwapLimit bool @@ -233,6 +235,7 @@ func (runtime *Runtime) restore() error { return nil } +// FIXME: comment please func (runtime *Runtime) UpdateCapabilities(quiet bool) { if cgroupMemoryMountpoint, err := utils.FindCgroupMountpoint("memory"); err != nil { if !quiet { @@ -260,6 +263,133 @@ func (runtime *Runtime) UpdateCapabilities(quiet bool) { } } +// Create creates a new container from the given configuration. +func (runtime *Runtime) Create(config *Config) (*Container, error) { + // Lookup image + img, err := runtime.repositories.LookupImage(config.Image) + if err != nil { + return nil, err + } + + if img.Config != nil { + MergeConfig(config, img.Config) + } + + if len(config.Entrypoint) != 0 && config.Cmd == nil { + config.Cmd = []string{} + } else if config.Cmd == nil || len(config.Cmd) == 0 { + return nil, fmt.Errorf("No command specified") + } + + // Generate id + id := GenerateID() + // Generate default hostname + // FIXME: the lxc template no longer needs to set a default hostname + if config.Hostname == "" { + config.Hostname = id[:12] + } + + var args []string + var entrypoint string + + if len(config.Entrypoint) != 0 { + entrypoint = config.Entrypoint[0] + args = append(config.Entrypoint[1:], config.Cmd...) + } else { + entrypoint = config.Cmd[0] + args = config.Cmd[1:] + } + + container := &Container{ + // FIXME: we should generate the ID here instead of receiving it as an argument + ID: id, + Created: time.Now(), + Path: entrypoint, + Args: args, //FIXME: de-duplicate from config + Config: config, + Image: img.ID, // Always use the resolved image id + NetworkSettings: &NetworkSettings{}, + // FIXME: do we need to store this in the container? + SysInitPath: sysInitPath, + } + container.root = runtime.containerRoot(container.ID) + // Step 1: create the container directory. + // This doubles as a barrier to avoid race conditions. + if err := os.Mkdir(container.root, 0700); err != nil { + return nil, err + } + + resolvConf, err := utils.GetResolvConf() + if err != nil { + return nil, err + } + + if len(config.Dns) == 0 && len(runtime.Dns) == 0 && utils.CheckLocalDns(resolvConf) { + //"WARNING: Docker detected local DNS server on resolv.conf. Using default external servers: %v", defaultDns + runtime.Dns = defaultDns + } + + // If custom dns exists, then create a resolv.conf for the container + if len(config.Dns) > 0 || len(runtime.Dns) > 0 { + var dns []string + if len(config.Dns) > 0 { + dns = config.Dns + } else { + dns = runtime.Dns + } + container.ResolvConfPath = path.Join(container.root, "resolv.conf") + f, err := os.Create(container.ResolvConfPath) + if err != nil { + return nil, err + } + defer f.Close() + for _, dns := range dns { + if _, err := f.Write([]byte("nameserver " + dns + "\n")); err != nil { + return nil, err + } + } + } else { + container.ResolvConfPath = "/etc/resolv.conf" + } + + // Step 2: save the container json + if err := container.ToDisk(); err != nil { + return nil, err + } + // Step 3: register the container + if err := runtime.Register(container); err != nil { + return nil, err + } + return container, nil +} + +// Commit creates a new filesystem image from the current state of a container. +// The image can optionally be tagged into a repository +func (runtime *Runtime) Commit(container *Container, repository, tag, comment, author string, config *Config) (*Image, error) { + // FIXME: freeze the container before copying it to avoid data corruption? + // FIXME: this shouldn't be in commands. + if err := container.EnsureMounted(); err != nil { + return nil, err + } + + rwTar, err := container.ExportRw() + if err != nil { + return nil, err + } + // Create a new image from the container's base layers + a new layer from container changes + img, err := runtime.graph.Create(rwTar, container, comment, author, config) + if err != nil { + return nil, err + } + // Register the image if needed + if repository != "" { + if err := runtime.repositories.Set(repository, tag, img.ID, true); err != nil { + return img, err + } + } + return img, nil +} + // FIXME: harmonize with NewGraph() func NewRuntime(flGraphPath string, autoRestart bool, dns []string) (*Runtime, error) { runtime, err := NewRuntimeFromDirectory(flGraphPath, autoRestart) @@ -347,3 +477,4 @@ func (history *History) Add(container *Container) { *history = append(*history, container) sort.Sort(history) } + diff --git a/runtime_test.go b/runtime_test.go index a65d962fa6..188e9c9076 100644 --- a/runtime_test.go +++ b/runtime_test.go @@ -144,9 +144,7 @@ func TestRuntimeCreate(t *testing.T) { t.Errorf("Expected 0 containers, %v found", len(runtime.List())) } - builder := NewBuilder(runtime) - - container, err := builder.Create(&Config{ + container, err := runtime.Create(&Config{ Image: GetTestImage(runtime).ID, Cmd: []string{"ls", "-al"}, }, @@ -187,7 +185,7 @@ func TestRuntimeCreate(t *testing.T) { } // Make sure crete with bad parameters returns an error - _, err = builder.Create( + _, err = runtime.Create( &Config{ Image: GetTestImage(runtime).ID, }, @@ -196,7 +194,7 @@ func TestRuntimeCreate(t *testing.T) { t.Fatal("Builder.Create should throw an error when Cmd is missing") } - _, err = builder.Create( + _, err = runtime.Create( &Config{ Image: GetTestImage(runtime).ID, Cmd: []string{}, @@ -210,7 +208,7 @@ func TestRuntimeCreate(t *testing.T) { func TestDestroy(t *testing.T) { runtime := mkRuntime(t) defer nuke(runtime) - container, err := NewBuilder(runtime).Create(&Config{ + container, err := runtime.Create(&Config{ Image: GetTestImage(runtime).ID, Cmd: []string{"ls", "-al"}, }, @@ -296,7 +294,7 @@ func startEchoServerContainer(t *testing.T, proto string) (*Runtime, *Container, t.Fatal(fmt.Errorf("Unknown protocol %v", proto)) } t.Log("Trying port", strPort) - container, err = NewBuilder(runtime).Create(&Config{ + container, err = runtime.Create(&Config{ Image: GetTestImage(runtime).ID, Cmd: []string{"sh", "-c", cmd}, PortSpecs: []string{fmt.Sprintf("%s/%s", strPort, proto)}, diff --git a/server.go b/server.go index 69edabf07a..8350ce597f 100644 --- a/server.go +++ b/server.go @@ -139,8 +139,7 @@ func (srv *Server) ImageInsert(name, url, path string, out io.Writer, sf *utils. return "", err } - b := NewBuilder(srv.runtime) - c, err := b.Create(config) + c, err := srv.runtime.Create(config) if err != nil { return "", err } @@ -149,7 +148,7 @@ func (srv *Server) ImageInsert(name, url, path string, out io.Writer, sf *utils. return "", err } // FIXME: Handle custom repo, tag comment, author - img, err = b.Commit(c, "", "", img.Comment, img.Author, nil) + img, err = srv.runtime.Commit(c, "", "", img.Comment, img.Author, nil) if err != nil { return "", err } @@ -400,7 +399,7 @@ func (srv *Server) ContainerCommit(name, repo, tag, author, comment string, conf if container == nil { return "", fmt.Errorf("No such container: %s", name) } - img, err := NewBuilder(srv.runtime).Commit(container, repo, tag, comment, author, config) + img, err := srv.runtime.Commit(container, repo, tag, comment, author, config) if err != nil { return "", err } @@ -904,8 +903,7 @@ func (srv *Server) ContainerCreate(config *Config) (string, error) { if config.Memory > 0 && !srv.runtime.capabilities.SwapLimit { config.MemorySwap = -1 } - b := NewBuilder(srv.runtime) - container, err := b.Create(config) + container, err := srv.runtime.Create(config) if err != nil { if srv.runtime.graph.IsNotExist(err) { diff --git a/utils_test.go b/utils_test.go index e8aae17186..740a5fc1bc 100644 --- a/utils_test.go +++ b/utils_test.go @@ -101,7 +101,7 @@ func mkContainer(r *Runtime, args []string, t *testing.T) (*Container, *HostConf if config.Image == "_" { config.Image = GetTestImage(r).ID } - c, err := NewBuilder(r).Create(config) + c, err := r.Create(config) if err != nil { return nil, nil, err } From 6a9f4ecf9bc4263baef8e9a1d86f1474f9c66d31 Mon Sep 17 00:00:00 2001 From: Solomon Hykes Date: Fri, 6 Sep 2013 17:43:34 -0700 Subject: [PATCH 145/215] Add missing comments to runtime.go --- runtime.go | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/runtime.go b/runtime.go index 92141be1c9..ab514c40d7 100644 --- a/runtime.go +++ b/runtime.go @@ -44,6 +44,7 @@ func init() { sysInitPath = utils.SelfPath() } +// List returns an array of all containers registered in the runtime. func (runtime *Runtime) List() []*Container { containers := new(History) for e := runtime.containers.Front(); e != nil; e = e.Next() { @@ -62,6 +63,8 @@ func (runtime *Runtime) getContainerElement(id string) *list.Element { return nil } +// Get looks for a container by the specified ID or name, and returns it. +// If the container is not found, or if an error occurs, nil is returned. func (runtime *Runtime) Get(name string) *Container { id, err := runtime.idIndex.Get(name) if err != nil { @@ -74,6 +77,8 @@ func (runtime *Runtime) Get(name string) *Container { return e.Value.(*Container) } +// Exists returns a true if a container of the specified ID or name exists, +// false otherwise. func (runtime *Runtime) Exists(id string) bool { return runtime.Get(id) != nil } @@ -82,6 +87,9 @@ func (runtime *Runtime) containerRoot(id string) string { return path.Join(runtime.repository, id) } +// Load reads the contents of a container from disk and registers +// it with Register. +// This is typically done at startup. func (runtime *Runtime) Load(id string) (*Container, error) { container := &Container{root: runtime.containerRoot(id)} if err := container.FromDisk(); err != nil { @@ -179,6 +187,7 @@ func (runtime *Runtime) LogToDisk(src *utils.WriteBroadcaster, dst, stream strin return nil } +// Destroy unregisters a container from the runtime and cleanly removes its contents from the filesystem. func (runtime *Runtime) Destroy(container *Container) error { if container == nil { return fmt.Errorf("The given container is ") @@ -235,7 +244,7 @@ func (runtime *Runtime) restore() error { return nil } -// FIXME: comment please +// FIXME: comment please! func (runtime *Runtime) UpdateCapabilities(quiet bool) { if cgroupMemoryMountpoint, err := utils.FindCgroupMountpoint("memory"); err != nil { if !quiet { @@ -455,6 +464,8 @@ func NewRuntimeFromDirectory(root string, autoRestart bool) (*Runtime, error) { return runtime, nil } +// History is a convenience type for storing a list of containers, +// ordered by creation date. type History []*Container func (history *History) Len() int { From c983023661deac0713eaa218c6bdfd20ec5eee45 Mon Sep 17 00:00:00 2001 From: Solomon Hykes Date: Fri, 6 Sep 2013 19:02:59 -0700 Subject: [PATCH 146/215] Copy dind wrapper script from github.com/jpetazzo/dind --- hack/dind | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 hack/dind diff --git a/hack/dind b/hack/dind new file mode 100644 index 0000000000..5d606ed42f --- /dev/null +++ b/hack/dind @@ -0,0 +1,56 @@ +#!/bin/bash + +# First, make sure that cgroups are mounted correctly. +CGROUP=/sys/fs/cgroup + +[ -d $CGROUP ] || + mkdir $CGROUP + +mountpoint -q $CGROUP || + mount -n -t tmpfs -o uid=0,gid=0,mode=0755 cgroup $CGROUP || { + echo "Could not make a tmpfs mount. Did you use -privileged?" + exit 1 + } + +# Mount the cgroup hierarchies exactly as they are in the parent system. +for SUBSYS in $(cut -d: -f2 /proc/1/cgroup) +do + [ -d $CGROUP/$SUBSYS ] || mkdir $CGROUP/$SUBSYS + mountpoint -q $CGROUP/$SUBSYS || + mount -n -t cgroup -o $SUBSYS cgroup $CGROUP/$SUBSYS +done + +# Note: as I write those lines, the LXC userland tools cannot setup +# a "sub-container" properly if the "devices" cgroup is not in its +# own hierarchy. Let's detect this and issue a warning. +grep -q :devices: /proc/1/cgroup || + echo "WARNING: the 'devices' cgroup should be in its own hierarchy." +grep -qw devices /proc/1/cgroup || + echo "WARNING: it looks like the 'devices' cgroup is not mounted." + +# Now, close extraneous file descriptors. +pushd /proc/self/fd +for FD in * +do + case "$FD" in + # Keep stdin/stdout/stderr + [012]) + ;; + # Nuke everything else + *) + eval exec "$FD>&-" + ;; + esac +done +popd + +# If we were given a PORT environment variable, start as a simple daemon; +# otherwise, spawn a shell as well +if [ "$PORT" ] +then + exec docker -d -H 0.0.0.0:$PORT +else + + docker -d & + exec bash +fi From 3c80bd76cf6aa8f6918439f8082b0a8c34fd2c0e Mon Sep 17 00:00:00 2001 From: Solomon Hykes Date: Fri, 6 Sep 2013 19:03:29 -0700 Subject: [PATCH 147/215] Adapt the original dind script and add a description --- hack/dind | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/hack/dind b/hack/dind index 5d606ed42f..f9a654670b 100644 --- a/hack/dind +++ b/hack/dind @@ -1,5 +1,14 @@ #!/bin/bash +# DinD: a wrapper script which allows docker to be run inside a docker container. +# Original version by Jerome Petazzoni +# See the blog post: http://blog.docker.io/2013/09/docker-can-now-run-within-docker/ +# +# This script should be executed inside a docker container in privilieged mode +# ('docker run -privileged', introduced in docker 0.6). + +# Usage: dind CMD [ARG...] + # First, make sure that cgroups are mounted correctly. CGROUP=/sys/fs/cgroup @@ -44,13 +53,4 @@ do done popd -# If we were given a PORT environment variable, start as a simple daemon; -# otherwise, spawn a shell as well -if [ "$PORT" ] -then - exec docker -d -H 0.0.0.0:$PORT -else - - docker -d & - exec bash -fi +exec $* From 34eab428330ce4a56c22b03f3067dd8eeee7ed41 Mon Sep 17 00:00:00 2001 From: Solomon Hykes Date: Fri, 6 Sep 2013 19:19:03 -0700 Subject: [PATCH 148/215] Adapt Dockerfile to run docker tests inside docker --- Dockerfile | 9 ++++++++- hack/dind | 3 +++ 2 files changed, 11 insertions(+), 1 deletion(-) mode change 100644 => 100755 hack/dind diff --git a/Dockerfile b/Dockerfile index 43f493d3ff..a0ef713c81 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ # This file describes the standard way to build Docker, using docker -docker-version 0.4.2 +docker-version 0.6.1 from ubuntu:12.04 maintainer Solomon Hykes # Build dependencies @@ -23,6 +23,9 @@ run apt-get install -y -q python-pip run pip install s3cmd run pip install python-magic run /bin/echo -e '[default]\naccess_key=$AWS_ACCESS_KEY\nsecret_key=$AWS_SECRET_KEY\n' > /.s3cfg +# Runtime dependencies +run apt-get install -y -q iptables +run apt-get install -y -q lxc # Download dependencies run PKG=github.com/kr/pty REV=27435c699; git clone http://$PKG /go/src/$PKG && cd /go/src/$PKG && git checkout -f $REV run PKG=github.com/gorilla/context/ REV=708054d61e5; git clone http://$PKG /go/src/$PKG && cd /go/src/$PKG && git checkout -f $REV @@ -32,6 +35,10 @@ run PKG=code.google.com/p/go.net/ REV=84a4013f96e0; hg clone http://$PKG /go/s # Upload docker source add . /go/src/github.com/dotcloud/docker run ln -s /go/src/github.com/dotcloud/docker /src +volume /var/lib/docker # Build the binary run cd /go/src/github.com/dotcloud/docker && hack/release/make.sh +workdir /go/src/github.com/dotcloud/docker +# Wrap all commands in the "docker-in-docker" script to allow nested containers +entrypoint ["hack/dind"] cmd cd /go/src/github.com/dotcloud/docker && hack/release/release.sh diff --git a/hack/dind b/hack/dind old mode 100644 new mode 100755 index f9a654670b..7810715675 --- a/hack/dind +++ b/hack/dind @@ -53,4 +53,7 @@ do done popd +# Mount /tmp +mount -t tmpfs none /tmp + exec $* From fa806f26aff927eb0d98b41e79786ae98987da5b Mon Sep 17 00:00:00 2001 From: Solomon Hykes Date: Fri, 6 Sep 2013 19:58:05 -0700 Subject: [PATCH 149/215] Add usage instructions to the Dockerfile. Build, test and release docker using docker. --- Dockerfile | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/Dockerfile b/Dockerfile index a0ef713c81..1f3ae7e712 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,24 @@ # This file describes the standard way to build Docker, using docker +# +# Usage: +# +# # Assemble the full dev environment. This is slow the first time. +# docker build -t docker . +# # Apparmor messes with privileged mode: disable it +# /etc/init.d/apparmor stop ; /etc/init.d/apparmor teardown +# +# # Run the test suite: +# docker run -privileged -lxc-conf=lxc.aa_profile=unconfined docker go test -v +# +# # Publish a release: +# docker run -privileged -lxc-conf=lxc.aa_profile=unconfined \ +# -e AWS_S3_BUCKET=baz \ +# -e AWS_ACCESS_KEY=foo \ +# -e AWS_SECRET_KEY=bar \ +# -e GPG_PASSPHRASE=gloubiboulga \ +# -lxc-conf=lxc.aa_profile=unconfined -privileged docker hack/release/release.sh +# + docker-version 0.6.1 from ubuntu:12.04 maintainer Solomon Hykes From 47838051be695a4e74c80690ceef811dcd3ef62c Mon Sep 17 00:00:00 2001 From: Solomon Hykes Date: Fri, 6 Sep 2013 20:14:03 -0700 Subject: [PATCH 150/215] Hack: improve the Dockerfile for an easier development workflow. Build dev container once, run a shell with source mount-binded, run tests as you edit. LIKE A BOSS. --- Dockerfile | 10 +++------- hack/{release/README.md => RELEASE-CHECKLIST.md} | 0 hack/{release => }/make.sh | 0 hack/{release => }/release.sh | 0 4 files changed, 3 insertions(+), 7 deletions(-) rename hack/{release/README.md => RELEASE-CHECKLIST.md} (100%) rename hack/{release => }/make.sh (100%) rename hack/{release => }/release.sh (100%) diff --git a/Dockerfile b/Dockerfile index 1f3ae7e712..0f04035ec4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -16,7 +16,7 @@ # -e AWS_ACCESS_KEY=foo \ # -e AWS_SECRET_KEY=bar \ # -e GPG_PASSPHRASE=gloubiboulga \ -# -lxc-conf=lxc.aa_profile=unconfined -privileged docker hack/release/release.sh +# -lxc-conf=lxc.aa_profile=unconfined -privileged docker hack/release.sh # docker-version 0.6.1 @@ -52,13 +52,9 @@ run PKG=github.com/gorilla/context/ REV=708054d61e5; git clone http://$PKG /go/s run PKG=github.com/gorilla/mux/ REV=9b36453141c; git clone http://$PKG /go/src/$PKG && cd /go/src/$PKG && git checkout -f $REV run PKG=github.com/dotcloud/tar/ REV=e5ea6bb21a3294; git clone http://$PKG /go/src/$PKG && cd /go/src/$PKG && git checkout -f $REV run PKG=code.google.com/p/go.net/ REV=84a4013f96e0; hg clone http://$PKG /go/src/$PKG && cd /go/src/$PKG && hg checkout $REV -# Upload docker source -add . /go/src/github.com/dotcloud/docker -run ln -s /go/src/github.com/dotcloud/docker /src volume /var/lib/docker -# Build the binary -run cd /go/src/github.com/dotcloud/docker && hack/release/make.sh workdir /go/src/github.com/dotcloud/docker # Wrap all commands in the "docker-in-docker" script to allow nested containers entrypoint ["hack/dind"] -cmd cd /go/src/github.com/dotcloud/docker && hack/release/release.sh +# Upload docker source +add . /go/src/github.com/dotcloud/docker diff --git a/hack/release/README.md b/hack/RELEASE-CHECKLIST.md similarity index 100% rename from hack/release/README.md rename to hack/RELEASE-CHECKLIST.md diff --git a/hack/release/make.sh b/hack/make.sh similarity index 100% rename from hack/release/make.sh rename to hack/make.sh diff --git a/hack/release/release.sh b/hack/release.sh similarity index 100% rename from hack/release/release.sh rename to hack/release.sh From d757bd0904b71346b6c83622ae5685bc0c0d4349 Mon Sep 17 00:00:00 2001 From: Solomon Hykes Date: Fri, 6 Sep 2013 20:16:13 -0700 Subject: [PATCH 151/215] Document using the Dockerfile for interactive dev/test cycles --- Dockerfile | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Dockerfile b/Dockerfile index 0f04035ec4..122346c0dd 100644 --- a/Dockerfile +++ b/Dockerfile @@ -7,6 +7,10 @@ # # Apparmor messes with privileged mode: disable it # /etc/init.d/apparmor stop ; /etc/init.d/apparmor teardown # +# # Mount your source in an interactive container for quick testing: +# docker run -v `pwd`:/go/src/github.com/dotcloud/docker -privileged -lxc-conf=lxc.aa_profile=unconfined -i -t docker bash +# +# # # Run the test suite: # docker run -privileged -lxc-conf=lxc.aa_profile=unconfined docker go test -v # From eca861a99d1a5abe91704b55d044eb8280adb8d1 Mon Sep 17 00:00:00 2001 From: Solomon Hykes Date: Sat, 7 Sep 2013 17:03:40 -0700 Subject: [PATCH 152/215] Add missing package import --- runtime.go | 1 + 1 file changed, 1 insertion(+) diff --git a/runtime.go b/runtime.go index ab514c40d7..1ee7aa26f9 100644 --- a/runtime.go +++ b/runtime.go @@ -12,6 +12,7 @@ import ( "path" "sort" "strings" + "time" ) var defaultDns = []string{"8.8.8.8", "8.8.4.4"} From 20d24a450cbf22b6d5268bc1fe76022fa554d6be Mon Sep 17 00:00:00 2001 From: Wes Morgan Date: Mon, 26 Aug 2013 15:51:22 -0700 Subject: [PATCH 153/215] move deps installation to vendor.sh script --- .gitignore | 1 + Dockerfile | 9 ++------- vendor.sh | 29 +++++++++++++++++++++++++++++ 3 files changed, 32 insertions(+), 7 deletions(-) create mode 100755 vendor.sh diff --git a/.gitignore b/.gitignore index ea62e34d19..034b2e6490 100644 --- a/.gitignore +++ b/.gitignore @@ -14,3 +14,4 @@ docs/_templates .gopath/ .dotcloud *.test +vendor/ diff --git a/Dockerfile b/Dockerfile index 122346c0dd..6c8cb4cd6d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -35,7 +35,7 @@ run apt-get install -y -q mercurial # Install Go run curl -s https://go.googlecode.com/files/go1.1.2.linux-amd64.tar.gz | tar -v -C /usr/local -xz env PATH /usr/local/go/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin -env GOPATH /go +env GOPATH /go:/vendor env CGO_ENABLED 0 run cd /tmp && echo 'package main' > t.go && go test -a -i -v # Ubuntu stuff @@ -50,15 +50,10 @@ run /bin/echo -e '[default]\naccess_key=$AWS_ACCESS_KEY\nsecret_key=$AWS_SECRET_ # Runtime dependencies run apt-get install -y -q iptables run apt-get install -y -q lxc -# Download dependencies -run PKG=github.com/kr/pty REV=27435c699; git clone http://$PKG /go/src/$PKG && cd /go/src/$PKG && git checkout -f $REV -run PKG=github.com/gorilla/context/ REV=708054d61e5; git clone http://$PKG /go/src/$PKG && cd /go/src/$PKG && git checkout -f $REV -run PKG=github.com/gorilla/mux/ REV=9b36453141c; git clone http://$PKG /go/src/$PKG && cd /go/src/$PKG && git checkout -f $REV -run PKG=github.com/dotcloud/tar/ REV=e5ea6bb21a3294; git clone http://$PKG /go/src/$PKG && cd /go/src/$PKG && git checkout -f $REV -run PKG=code.google.com/p/go.net/ REV=84a4013f96e0; hg clone http://$PKG /go/src/$PKG && cd /go/src/$PKG && hg checkout $REV volume /var/lib/docker workdir /go/src/github.com/dotcloud/docker # Wrap all commands in the "docker-in-docker" script to allow nested containers entrypoint ["hack/dind"] # Upload docker source +add vendor /vendor add . /go/src/github.com/dotcloud/docker diff --git a/vendor.sh b/vendor.sh new file mode 100755 index 0000000000..5dd9453cad --- /dev/null +++ b/vendor.sh @@ -0,0 +1,29 @@ +#!/bin/bash + +# Downloads dependencies into vendor/ directory +if [[ ! -d vendor ]]; then + mkdir vendor +fi +vendor_dir=${PWD}/vendor + +git_clone () { + PKG=$1 + REV=$2 + if [[ ! -d src/$PKG ]]; then + cd $vendor_dir && git clone http://$PKG src/$PKG && cd src/$PKG && git checkout -f $REV + fi +} + +git_clone github.com/kr/pty 27435c699 + +git_clone github.com/gorilla/context/ 708054d61e5 + +git_clone github.com/gorilla/mux/ 9b36453141c + +git_clone github.com/dotcloud/tar/ d06045a6d9 + +# Docker requires code.google.com/p/go.net/websocket +PKG=code.google.com/p/go.net REV=84a4013f96e0 +if [[ ! -d src/$PKG ]]; then + cd $vendor_dir && hg clone https://$PKG src/$PKG && cd src/$PKG && hg checkout -r $REV +fi From 19dc3b0792272c2f0fbcfb654349fe5e86bc8046 Mon Sep 17 00:00:00 2001 From: Brandon Philips Date: Mon, 26 Aug 2013 17:59:58 -0700 Subject: [PATCH 154/215] gitignore: ignore bundles directory --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 034b2e6490..ca58f735cb 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,4 @@ docs/_templates .dotcloud *.test vendor/ +bundles/ From 055bbb79c10a829e054d6741d1937f0304dbb7fd Mon Sep 17 00:00:00 2001 From: Solomon Hykes Date: Sat, 7 Sep 2013 17:48:52 -0700 Subject: [PATCH 155/215] vendor.sh can cleanly update vendored dependencies --- vendor.sh => hack/vendor.sh | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) rename vendor.sh => hack/vendor.sh (63%) diff --git a/vendor.sh b/hack/vendor.sh similarity index 63% rename from vendor.sh rename to hack/vendor.sh index 5dd9453cad..d327911047 100755 --- a/vendor.sh +++ b/hack/vendor.sh @@ -9,9 +9,14 @@ vendor_dir=${PWD}/vendor git_clone () { PKG=$1 REV=$2 - if [[ ! -d src/$PKG ]]; then - cd $vendor_dir && git clone http://$PKG src/$PKG && cd src/$PKG && git checkout -f $REV - fi + ( + set -e + cd $vendor_dir + if [[ ! -d src/$PKG ]]; then + cd $vendor_dir && git clone http://$PKG src/$PKG + fi + cd src/$PKG && git checkout -f $REV + ) } git_clone github.com/kr/pty 27435c699 @@ -24,6 +29,11 @@ git_clone github.com/dotcloud/tar/ d06045a6d9 # Docker requires code.google.com/p/go.net/websocket PKG=code.google.com/p/go.net REV=84a4013f96e0 -if [[ ! -d src/$PKG ]]; then - cd $vendor_dir && hg clone https://$PKG src/$PKG && cd src/$PKG && hg checkout -r $REV -fi +( + set -e + cd $vendor_dir + if [[ ! -d src/$PKG ]]; then + hg clone https://$PKG src/$PKG + fi + cd src/$PKG && hg checkout -r $REV +) From 4cd59b96ed93d8a4c35099a0a1171e17170071ab Mon Sep 17 00:00:00 2001 From: Solomon Hykes Date: Sun, 8 Sep 2013 18:45:23 -0700 Subject: [PATCH 156/215] Hack: we no longer need to generate test binaries. --- hack/make.sh | 26 -------------------------- 1 file changed, 26 deletions(-) diff --git a/hack/make.sh b/hack/make.sh index d68e4c0487..c618384b8f 100755 --- a/hack/make.sh +++ b/hack/make.sh @@ -73,21 +73,6 @@ bundle_binary() { ./docker } - -# Build Docker's test suite as a collection of binary files (one per -# sub-package to test) -bundle_test() { - mkdir -p bundles/$VERSION/test - for test_dir in $(find_test_dirs); do - test_binary=$( - cd $test_dir - go test -c -v -ldflags "-X main.GITCOMMIT $GITCOMMIT -X main.VERSION $VERSION -d -w" >&2 - find . -maxdepth 1 -type f -name '*.test' -executable - ) - cp $test_dir/$test_binary bundles/$VERSION/test/ - done -} - # Build docker as an ubuntu package using FPM and REPREPRO (sue me). # bundle_binary must be called first. bundle_ubuntu() { @@ -148,20 +133,9 @@ EOF } -# This helper function walks the current directory looking for directories -# holding Go test files, and prints their paths on standard output, one per -# line. -find_test_dirs() { - find . -name '*_test.go' | - { while read f; do dirname $f; done; } | - sort -u -} - - main() { bundle_binary bundle_ubuntu - #bundle_test cat < Date: Mon, 9 Sep 2013 11:01:15 +0100 Subject: [PATCH 157/215] Please add go-dockerclient to docker API clients doc --- docs/sources/api/docker_remote_api.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/sources/api/docker_remote_api.rst b/docs/sources/api/docker_remote_api.rst index be15c3494e..5d8657c469 100644 --- a/docs/sources/api/docker_remote_api.rst +++ b/docs/sources/api/docker_remote_api.rst @@ -193,3 +193,5 @@ and we will add the libraries here. +----------------------+----------------+--------------------------------------------+ | Erlang | erldocker | https://github.com/proger/erldocker | +----------------------+----------------+--------------------------------------------+ +| Go | go-dockerclient| https://github.com/fsouza/go-dockerclient | ++----------------------+----------------+--------------------------------------------+ From 630ae43e7d11fa34421a253c765edb6cef5a3371 Mon Sep 17 00:00:00 2001 From: Brian Shumate Date: Mon, 9 Sep 2013 10:19:45 -0400 Subject: [PATCH 158/215] improve sentence readabilty --- docs/sources/examples/hello_world_daemon.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/sources/examples/hello_world_daemon.rst b/docs/sources/examples/hello_world_daemon.rst index 1d9c4ebe7c..d208c774d8 100644 --- a/docs/sources/examples/hello_world_daemon.rst +++ b/docs/sources/examples/hello_world_daemon.rst @@ -11,8 +11,8 @@ Hello World Daemon The most boring daemon ever written. -This example assumes you have Docker installed and with the Ubuntu -image already imported ``docker pull ubuntu``. We will use the Ubuntu +This example assumes you have Docker installed and the Ubuntu +image already imported with ``docker pull ubuntu``. We will use the Ubuntu image to run a simple hello world daemon that will just print hello world to standard out every second. It will continue to do this until we stop it. From 9749d94fb0f3034247dbd969f6dad390f2605e1a Mon Sep 17 00:00:00 2001 From: Brian Shumate Date: Mon, 9 Sep 2013 10:30:06 -0400 Subject: [PATCH 159/215] note about exiting from attachment prior to running --- docs/sources/examples/hello_world_daemon.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/sources/examples/hello_world_daemon.rst b/docs/sources/examples/hello_world_daemon.rst index d208c774d8..6fc4e94ebd 100644 --- a/docs/sources/examples/hello_world_daemon.rst +++ b/docs/sources/examples/hello_world_daemon.rst @@ -56,6 +56,8 @@ Attach to the container to see the results in realtime. process to see what is going on. - **$CONTAINER_ID** The Id of the container we want to attach too. +Exit from the container attachment by pressing Control-C. + .. code-block:: bash sudo docker ps From 64bc08f1c4bee42ff5a17b2d6ababb288fd8f209 Mon Sep 17 00:00:00 2001 From: shin- Date: Mon, 9 Sep 2013 21:02:37 +0200 Subject: [PATCH 160/215] Push tags to registry even if images are already uploaded --- server.go | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/server.go b/server.go index 69edabf07a..d2c4e5fa59 100644 --- a/server.go +++ b/server.go @@ -741,10 +741,24 @@ func (srv *Server) pushRepository(r *registry.Registry, out io.Writer, localName for _, round := range imgList { // FIXME: This section can be parallelized for _, elem := range round { + var pushTags func() error + pushTags = func() error { + out.Write(sf.FormatStatus("", "Pushing tags for rev [%s] on {%s}", elem.ID, ep+"repositories/"+remoteName+"/tags/"+elem.Tag)) + if err := r.PushRegistryTag(remoteName, elem.ID, elem.Tag, ep, repoData.Tokens); err != nil { + return err + } + return nil + } if _, exists := repoData.ImgList[elem.ID]; exists { + if err := pushTags(); err != nil { + return err + } out.Write(sf.FormatStatus("", "Image %s already pushed, skipping", elem.ID)) continue } else if r.LookupRemoteImage(elem.ID, ep, repoData.Tokens) { + if err := pushTags(); err != nil { + return err + } out.Write(sf.FormatStatus("", "Image %s already pushed, skipping", elem.ID)) continue } @@ -754,10 +768,7 @@ func (srv *Server) pushRepository(r *registry.Registry, out io.Writer, localName } else { elem.Checksum = checksum } - out.Write(sf.FormatStatus("", "Pushing tags for rev [%s] on {%s}", elem.ID, ep+"repositories/"+remoteName+"/tags/"+elem.Tag)) - if err := r.PushRegistryTag(remoteName, elem.ID, elem.Tag, ep, repoData.Tokens); err != nil { - return err - } + return pushTags() } } } From fe99e51634f7068ce997e9866516f2b14a93bda9 Mon Sep 17 00:00:00 2001 From: Andy Rothfusz Date: Mon, 9 Sep 2013 13:19:07 -0700 Subject: [PATCH 161/215] Created a little landing page for the examples, combined first two. --- docs/sources/examples/hello_world.rst | 128 ++++++++++++++++++- docs/sources/examples/hello_world_daemon.rst | 95 -------------- docs/sources/examples/index.rst | 8 +- docs/sources/examples/running_examples.rst | 23 ---- docs/theme/docker/layout.html | 4 - 5 files changed, 131 insertions(+), 127 deletions(-) delete mode 100644 docs/sources/examples/hello_world_daemon.rst delete mode 100644 docs/sources/examples/running_examples.rst diff --git a/docs/sources/examples/hello_world.rst b/docs/sources/examples/hello_world.rst index 26e6f4c8a5..0591a99449 100644 --- a/docs/sources/examples/hello_world.rst +++ b/docs/sources/examples/hello_world.rst @@ -2,6 +2,28 @@ :description: A simple hello world example with Docker :keywords: docker, example, hello world +.. _running_examples: + +Running the Examples +==================== + +All the examples assume your machine is running the docker daemon. To +run the docker daemon in the background, simply type: + +.. code-block:: bash + + sudo docker -d & + +Now you can run docker in client mode: by defalt all commands will be +forwarded to the ``docker`` daemon via a protected Unix socket, so you +must run as root. + +.. code-block:: bash + + sudo docker help + +---- + .. _hello_world: Hello World @@ -49,4 +71,108 @@ See the example in action -Continue to the :ref:`hello_world_daemon` example. +---- + +.. _hello_world_daemon: + +Hello World Daemon +================== + +.. include:: example_header.inc + +And now for the most boring daemon ever written! + +This example assumes you have Docker installed and the Ubuntu +image already imported with ``docker pull ubuntu``. We will use the Ubuntu +image to run a simple hello world daemon that will just print hello +world to standard out every second. It will continue to do this until +we stop it. + +**Steps:** + +.. code-block:: bash + + CONTAINER_ID=$(sudo docker run -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done") + +We are going to run a simple hello world daemon in a new container +made from the *ubuntu* image. + +- **"docker run -d "** run a command in a new container. We pass "-d" + so it runs as a daemon. +- **"ubuntu"** is the image we want to run the command inside of. +- **"/bin/sh -c"** is the command we want to run in the container +- **"while true; do echo hello world; sleep 1; done"** is the mini + script we want to run, that will just print hello world once a + second until we stop it. +- **$CONTAINER_ID** the output of the run command will return a + container id, we can use in future commands to see what is going on + with this process. + +.. code-block:: bash + + sudo docker logs $CONTAINER_ID + +Check the logs make sure it is working correctly. + +- **"docker logs**" This will return the logs for a container +- **$CONTAINER_ID** The Id of the container we want the logs for. + +.. code-block:: bash + + sudo docker attach $CONTAINER_ID + +Attach to the container to see the results in realtime. + +- **"docker attach**" This will allow us to attach to a background + process to see what is going on. +- **$CONTAINER_ID** The Id of the container we want to attach too. + +Exit from the container attachment by pressing Control-C. + +.. code-block:: bash + + sudo docker ps + +Check the process list to make sure it is running. + +- **"docker ps"** this shows all running process managed by docker + +.. code-block:: bash + + sudo docker stop $CONTAINER_ID + +Stop the container, since we don't need it anymore. + +- **"docker stop"** This stops a container +- **$CONTAINER_ID** The Id of the container we want to stop. + +.. code-block:: bash + + sudo docker ps + +Make sure it is really stopped. + + +**Video:** + +See the example in action + +.. raw:: html + +
+ +
+ +The next example in the series is a :ref:`python_web_app` example, or +you could skip to any of the other examples: + +.. toctree:: + :maxdepth: 1 + + python_web_app + nodejs_web_app + running_redis_service + running_ssh_service + couchdb_data_volumes + postgresql_service + mongodb diff --git a/docs/sources/examples/hello_world_daemon.rst b/docs/sources/examples/hello_world_daemon.rst deleted file mode 100644 index 6fc4e94ebd..0000000000 --- a/docs/sources/examples/hello_world_daemon.rst +++ /dev/null @@ -1,95 +0,0 @@ -:title: Hello world daemon example -:description: A simple hello world daemon example with Docker -:keywords: docker, example, hello world, daemon - -.. _hello_world_daemon: - -Hello World Daemon -================== - -.. include:: example_header.inc - -The most boring daemon ever written. - -This example assumes you have Docker installed and the Ubuntu -image already imported with ``docker pull ubuntu``. We will use the Ubuntu -image to run a simple hello world daemon that will just print hello -world to standard out every second. It will continue to do this until -we stop it. - -**Steps:** - -.. code-block:: bash - - CONTAINER_ID=$(sudo docker run -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done") - -We are going to run a simple hello world daemon in a new container -made from the *ubuntu* image. - -- **"docker run -d "** run a command in a new container. We pass "-d" - so it runs as a daemon. -- **"ubuntu"** is the image we want to run the command inside of. -- **"/bin/sh -c"** is the command we want to run in the container -- **"while true; do echo hello world; sleep 1; done"** is the mini - script we want to run, that will just print hello world once a - second until we stop it. -- **$CONTAINER_ID** the output of the run command will return a - container id, we can use in future commands to see what is going on - with this process. - -.. code-block:: bash - - sudo docker logs $CONTAINER_ID - -Check the logs make sure it is working correctly. - -- **"docker logs**" This will return the logs for a container -- **$CONTAINER_ID** The Id of the container we want the logs for. - -.. code-block:: bash - - sudo docker attach $CONTAINER_ID - -Attach to the container to see the results in realtime. - -- **"docker attach**" This will allow us to attach to a background - process to see what is going on. -- **$CONTAINER_ID** The Id of the container we want to attach too. - -Exit from the container attachment by pressing Control-C. - -.. code-block:: bash - - sudo docker ps - -Check the process list to make sure it is running. - -- **"docker ps"** this shows all running process managed by docker - -.. code-block:: bash - - sudo docker stop $CONTAINER_ID - -Stop the container, since we don't need it anymore. - -- **"docker stop"** This stops a container -- **$CONTAINER_ID** The Id of the container we want to stop. - -.. code-block:: bash - - sudo docker ps - -Make sure it is really stopped. - - -**Video:** - -See the example in action - -.. raw:: html - -
- -
- -Continue to the :ref:`python_web_app` example. diff --git a/docs/sources/examples/index.rst b/docs/sources/examples/index.rst index 2664b95e54..0b091f88d8 100644 --- a/docs/sources/examples/index.rst +++ b/docs/sources/examples/index.rst @@ -5,16 +5,16 @@ Examples -============ +======== -Contents: +Here are some examples of how to use Docker to create running +processes, starting from a very simple *Hello World* and progressing +to more substantial services like you might find in production. .. toctree:: :maxdepth: 1 - running_examples hello_world - hello_world_daemon python_web_app nodejs_web_app running_redis_service diff --git a/docs/sources/examples/running_examples.rst b/docs/sources/examples/running_examples.rst deleted file mode 100644 index 6097f29fec..0000000000 --- a/docs/sources/examples/running_examples.rst +++ /dev/null @@ -1,23 +0,0 @@ -:title: Running the Examples -:description: An overview on how to run the docker examples -:keywords: docker, examples, how to - -.. _running_examples: - -Running the Examples --------------------- - -All the examples assume your machine is running the docker daemon. To -run the docker daemon in the background, simply type: - - .. code-block:: bash - - sudo docker -d & - -Now you can run docker in client mode: by defalt all commands will be -forwarded to the ``docker`` daemon via a protected Unix socket, so you -must run as root. - - .. code-block:: bash - - sudo docker help diff --git a/docs/theme/docker/layout.html b/docs/theme/docker/layout.html index 91c561235c..b3c76aa489 100755 --- a/docs/theme/docker/layout.html +++ b/docs/theme/docker/layout.html @@ -113,10 +113,6 @@
- - Search by Swiftype - From 0a436e03b8289510ad191a89fcbd5ec06fb8865d Mon Sep 17 00:00:00 2001 From: Victor Vieux Date: Thu, 29 Aug 2013 22:21:32 +0000 Subject: [PATCH 162/215] add domainname support --- container.go | 25 +++++++++++++++++++------ sysinit.go | 5 ++++- 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/container.go b/container.go index 39c19c53d4..488cba3229 100644 --- a/container.go +++ b/container.go @@ -11,6 +11,7 @@ import ( "io" "io/ioutil" "log" + "net" "os" "os/exec" "path" @@ -20,7 +21,6 @@ import ( "strings" "syscall" "time" - "net" ) type Container struct { @@ -61,6 +61,7 @@ type Container struct { type Config struct { Hostname string + Domainname string User string Memory int64 // Memory limit (in bytes) MemorySwap int64 // Total memory usage (memory + swap); set `-1' to disable swap @@ -203,8 +204,17 @@ func ParseRun(args []string, capabilities *Capabilities) (*Config, *HostConfig, return nil, nil, cmd, err } + hostname := *flHostname + domainname := "" + + parts := strings.SplitN(hostname, ".", 2) + if len(parts) > 1 { + hostname = parts[0] + domainname = parts[1] + } config := &Config{ - Hostname: *flHostname, + Hostname: hostname, + Domainname: domainname, PortSpecs: flPorts, User: *flUser, Tty: *flTty, @@ -692,6 +702,9 @@ func (container *Container) Start(hostConfig *HostConfig) error { params = append(params, "-e", "TERM=xterm") } + params = append(params, "-h", container.Config.Hostname) + params = append(params, "-d", container.Config.Domainname) + // Setup environment params = append(params, "-e", "HOME=/", @@ -813,10 +826,10 @@ func (container *Container) allocateNetwork() error { iface = &NetworkInterface{disabled: true} } else { iface = &NetworkInterface{ - IPNet: net.IPNet{IP: net.ParseIP(container.NetworkSettings.IPAddress), Mask: manager.bridgeNetwork.Mask}, + IPNet: net.IPNet{IP: net.ParseIP(container.NetworkSettings.IPAddress), Mask: manager.bridgeNetwork.Mask}, Gateway: manager.bridgeNetwork.IP, manager: manager, - } + } ipNum := ipToInt(iface.IPNet.IP) manager.ipAllocator.inUse[ipNum] = struct{}{} } @@ -827,10 +840,10 @@ func (container *Container) allocateNetwork() error { portSpecs = container.Config.PortSpecs } else { for backend, frontend := range container.NetworkSettings.PortMapping["Tcp"] { - portSpecs = append(portSpecs, fmt.Sprintf("%s:%s/tcp",frontend, backend)) + portSpecs = append(portSpecs, fmt.Sprintf("%s:%s/tcp", frontend, backend)) } for backend, frontend := range container.NetworkSettings.PortMapping["Udp"] { - portSpecs = append(portSpecs, fmt.Sprintf("%s:%s/udp",frontend, backend)) + portSpecs = append(portSpecs, fmt.Sprintf("%s:%s/udp", frontend, backend)) } } diff --git a/sysinit.go b/sysinit.go index 34f1cbdac6..fe741382c3 100644 --- a/sysinit.go +++ b/sysinit.go @@ -4,6 +4,7 @@ import ( "flag" "fmt" "github.com/dotcloud/docker/utils" + "io/ioutil" "log" "os" "os/exec" @@ -92,7 +93,8 @@ func SysInit() { var u = flag.String("u", "", "username or uid") var gw = flag.String("g", "", "gateway address") var workdir = flag.String("w", "", "workdir") - + var hostname = flag.String("h", "", "hostname") + var domainname = flag.String("d", "", "domainname") var flEnv ListOpts flag.Var(&flEnv, "e", "Set environment variables") @@ -101,6 +103,7 @@ func SysInit() { cleanupEnv(flEnv) setupNetworking(*gw) setupWorkingDirectory(*workdir) + setupHostname(*hostname, *domainname) changeUser(*u) executeProgram(flag.Arg(0), flag.Args()) } From 4f2e59f94a771c4b60947726815d065ef0ea253a Mon Sep 17 00:00:00 2001 From: Victor Vieux Date: Mon, 9 Sep 2013 18:57:25 +0000 Subject: [PATCH 163/215] bind mount /etc/hosts and /etc/hostname --- builder.go | 27 ++++++++++++++++++++++++++- container.go | 5 ++--- lxc_template.go | 4 ++++ sysinit.go | 5 +---- 4 files changed, 33 insertions(+), 8 deletions(-) diff --git a/builder.go b/builder.go index 9124f76ac1..5ccce8293e 100644 --- a/builder.go +++ b/builder.go @@ -3,6 +3,7 @@ package docker import ( "fmt" "github.com/dotcloud/docker/utils" + "io/ioutil" "os" "path" "time" @@ -119,7 +120,31 @@ func (builder *Builder) Create(config *Config) (*Container, error) { if err := container.ToDisk(); err != nil { return nil, err } - // Step 3: register the container + + // Step 3: if hostname, build hostname and hosts files + container.HostnamePath = path.Join(container.root, "hostname") + ioutil.WriteFile(container.HostnamePath, []byte(container.Config.Hostname+"\n"), 0644) + + hostsContent := []byte("127.0.0.1\tlocalhost\n" + + "::1\t\tlocalhost ip6-localhost ip6-loopback\n" + + "fe00::0\t\tip6-localnet\n" + + "ff00::0\t\tip6-mcastprefix\n" + + "ff02::1\t\tip6-allnodes\n" + + "ff02::2\t\tip6-allrouters\n") + + container.HostsPath = path.Join(container.root, "hosts") + + if container.Config.Domainname != "" { + hostsContent = append([]byte("127.0.0.1\t"+container.Config.Hostname+"."+container.Config.Domainname+" "+container.Config.Hostname+"\n"+ + "::1\t\t"+container.Config.Hostname+"."+container.Config.Domainname+" "+container.Config.Hostname+"\n"), hostsContent...) + } else { + hostsContent = append([]byte("127.0.0.1\t"+container.Config.Hostname+"\n"+ + "::1\t\t"+container.Config.Hostname+"\n"), hostsContent...) + } + + ioutil.WriteFile(container.HostsPath, hostsContent, 0644) + + // Step 4: register the container if err := builder.runtime.Register(container); err != nil { return nil, err } diff --git a/container.go b/container.go index 488cba3229..ecbf8e561f 100644 --- a/container.go +++ b/container.go @@ -42,6 +42,8 @@ type Container struct { SysInitPath string ResolvConfPath string + HostnamePath string + HostsPath string cmd *exec.Cmd stdout *utils.WriteBroadcaster @@ -702,9 +704,6 @@ func (container *Container) Start(hostConfig *HostConfig) error { params = append(params, "-e", "TERM=xterm") } - params = append(params, "-h", container.Config.Hostname) - params = append(params, "-d", container.Config.Domainname) - // Setup environment params = append(params, "-e", "HOME=/", diff --git a/lxc_template.go b/lxc_template.go index d357c02b43..7013581232 100644 --- a/lxc_template.go +++ b/lxc_template.go @@ -30,6 +30,10 @@ lxc.network.ipv4 = {{.NetworkSettings.IPAddress}}/{{.NetworkSettings.IPPrefixLen {{$ROOTFS := .RootfsPath}} lxc.rootfs = {{$ROOTFS}} +# enable domain name support +lxc.mount.entry = {{.HostnamePath}} {{$ROOTFS}}/etc/hostname none bind,ro 0 0 +lxc.mount.entry = {{.HostsPath}} {{$ROOTFS}}/etc/hosts none bind,ro 0 0 + # use a dedicated pts for the container (and limit the number of pseudo terminal # available) lxc.pts = 1024 diff --git a/sysinit.go b/sysinit.go index fe741382c3..34f1cbdac6 100644 --- a/sysinit.go +++ b/sysinit.go @@ -4,7 +4,6 @@ import ( "flag" "fmt" "github.com/dotcloud/docker/utils" - "io/ioutil" "log" "os" "os/exec" @@ -93,8 +92,7 @@ func SysInit() { var u = flag.String("u", "", "username or uid") var gw = flag.String("g", "", "gateway address") var workdir = flag.String("w", "", "workdir") - var hostname = flag.String("h", "", "hostname") - var domainname = flag.String("d", "", "domainname") + var flEnv ListOpts flag.Var(&flEnv, "e", "Set environment variables") @@ -103,7 +101,6 @@ func SysInit() { cleanupEnv(flEnv) setupNetworking(*gw) setupWorkingDirectory(*workdir) - setupHostname(*hostname, *domainname) changeUser(*u) executeProgram(flag.Arg(0), flag.Args()) } From 446ca4b57b228a2d030f0c816e08948ff7da1d79 Mon Sep 17 00:00:00 2001 From: Victor Vieux Date: Mon, 9 Sep 2013 19:40:25 +0000 Subject: [PATCH 164/215] fix init layer --- builder.go | 22 ++++++++++++---------- graph.go | 2 ++ 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/builder.go b/builder.go index 5ccce8293e..6e04c8de8d 100644 --- a/builder.go +++ b/builder.go @@ -125,21 +125,23 @@ func (builder *Builder) Create(config *Config) (*Container, error) { container.HostnamePath = path.Join(container.root, "hostname") ioutil.WriteFile(container.HostnamePath, []byte(container.Config.Hostname+"\n"), 0644) - hostsContent := []byte("127.0.0.1\tlocalhost\n" + - "::1\t\tlocalhost ip6-localhost ip6-loopback\n" + - "fe00::0\t\tip6-localnet\n" + - "ff00::0\t\tip6-mcastprefix\n" + - "ff02::1\t\tip6-allnodes\n" + - "ff02::2\t\tip6-allrouters\n") + hostsContent := []byte(` +127.0.0.1 localhost +::1 localhost ip6-localhost ip6-loopback +fe00::0 ip6-localnet +ff00::0 ip6-mcastprefix +ff02::1 ip6-allnodes +ff02::2 ip6-allrouters +`) container.HostsPath = path.Join(container.root, "hosts") if container.Config.Domainname != "" { - hostsContent = append([]byte("127.0.0.1\t"+container.Config.Hostname+"."+container.Config.Domainname+" "+container.Config.Hostname+"\n"+ - "::1\t\t"+container.Config.Hostname+"."+container.Config.Domainname+" "+container.Config.Hostname+"\n"), hostsContent...) + hostsContent = append([]byte(fmt.Sprintf("::1\t\t%s.%s %s\n", container.Config.Hostname, container.Config.Domainname, container.Config.Hostname)), hostsContent...) + hostsContent = append([]byte(fmt.Sprintf("127.0.0.1\t%s.%s %s\n", container.Config.Hostname, container.Config.Domainname, container.Config.Hostname)), hostsContent...) } else { - hostsContent = append([]byte("127.0.0.1\t"+container.Config.Hostname+"\n"+ - "::1\t\t"+container.Config.Hostname+"\n"), hostsContent...) + hostsContent = append([]byte(fmt.Sprintf("::1\t\t%s\n", container.Config.Hostname)), hostsContent...) + hostsContent = append([]byte(fmt.Sprintf("127.0.0.1\t%s\n", container.Config.Hostname)), hostsContent...) } ioutil.WriteFile(container.HostsPath, hostsContent, 0644) diff --git a/graph.go b/graph.go index c54725fdb4..ffbb3f6a6a 100644 --- a/graph.go +++ b/graph.go @@ -202,6 +202,8 @@ func (graph *Graph) getDockerInitLayer() (string, error) { "/sys": "dir", "/.dockerinit": "file", "/etc/resolv.conf": "file", + "/etc/hosts": "file", + "/etc/hostname": "file", // "var/run": "dir", // "var/lock": "dir", } { From 46a1cd69a99a9adc7bc366f1eb2c03b62f464d39 Mon Sep 17 00:00:00 2001 From: Victor Vieux Date: Mon, 9 Sep 2013 21:26:35 +0000 Subject: [PATCH 165/215] only os.Exits on error --- commands.go | 4 +++- docker/docker.go | 3 +++ utils/utils.go | 9 +++++++++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/commands.go b/commands.go index b5eed0888f..df6feac93b 100644 --- a/commands.go +++ b/commands.go @@ -1479,7 +1479,9 @@ func (cli *DockerCli) CmdRun(args ...string) error { if err != nil { return err } - os.Exit(status) + if status != 0 { + return &utils.StatusError{status} + } } return nil diff --git a/docker/docker.go b/docker/docker.go index 9bbd40b696..a0021f3a87 100644 --- a/docker/docker.go +++ b/docker/docker.go @@ -75,6 +75,9 @@ func main() { } protoAddrParts := strings.SplitN(flHosts[0], "://", 2) if err := docker.ParseCommands(protoAddrParts[0], protoAddrParts[1], flag.Args()...); err != nil { + if sterr, ok := err.(*utils.StatusError); ok { + os.Exit(sterr.Status) + } log.Fatal(err) os.Exit(-1) } diff --git a/utils/utils.go b/utils/utils.go index aa34abdddc..d417690c0c 100644 --- a/utils/utils.go +++ b/utils/utils.go @@ -1012,3 +1012,12 @@ func (graph *DependencyGraph) GenerateTraversalMap() ([][]string, error) { } return result, nil } + +// An StatusError reports an unsuccessful exit by a command. +type StatusError struct { + Status int +} + +func (e *StatusError) Error() string { + return fmt.Sprintf("Status: %d", e.Status) +} From 3c90e96b6d9e16b3983cd7e387b06e81130f1e7c Mon Sep 17 00:00:00 2001 From: Sridhar Ratnakumar Date: Mon, 9 Sep 2013 14:42:45 -0700 Subject: [PATCH 166/215] remove docker-ruby from docs we don't maintain it anymore as we now recommend proper HTTP api based clients instead. --- docs/sources/api/docker_remote_api.rst | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/sources/api/docker_remote_api.rst b/docs/sources/api/docker_remote_api.rst index be15c3494e..f76d50a62f 100644 --- a/docs/sources/api/docker_remote_api.rst +++ b/docs/sources/api/docker_remote_api.rst @@ -175,8 +175,6 @@ and we will add the libraries here. +======================+================+============================================+ | Python | docker-py | https://github.com/dotcloud/docker-py | +----------------------+----------------+--------------------------------------------+ -| Ruby | docker-ruby | https://github.com/ActiveState/docker-ruby | -+----------------------+----------------+--------------------------------------------+ | Ruby | docker-client | https://github.com/geku/docker-client | +----------------------+----------------+--------------------------------------------+ | Ruby | docker-api | https://github.com/swipely/docker-api | From e37dcd726fe415193eaed18729251d293a018909 Mon Sep 17 00:00:00 2001 From: Solomon Hykes Date: Mon, 9 Sep 2013 15:05:25 -0700 Subject: [PATCH 167/215] Hack: use vendored dependencies in-place, for less moving parts when developing --- Dockerfile | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 6c8cb4cd6d..36054d29b3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -35,7 +35,7 @@ run apt-get install -y -q mercurial # Install Go run curl -s https://go.googlecode.com/files/go1.1.2.linux-amd64.tar.gz | tar -v -C /usr/local -xz env PATH /usr/local/go/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin -env GOPATH /go:/vendor +env GOPATH /go:/go/src/github.com/dotcloud/docker/vendor env CGO_ENABLED 0 run cd /tmp && echo 'package main' > t.go && go test -a -i -v # Ubuntu stuff @@ -55,5 +55,4 @@ workdir /go/src/github.com/dotcloud/docker # Wrap all commands in the "docker-in-docker" script to allow nested containers entrypoint ["hack/dind"] # Upload docker source -add vendor /vendor add . /go/src/github.com/dotcloud/docker From 6678a26d1c94e7838c055a3da3b91ae3de8c3e3c Mon Sep 17 00:00:00 2001 From: Jason McVetta Date: Mon, 9 Sep 2013 15:11:30 -0700 Subject: [PATCH 168/215] gofmt --- api_test.go | 2 +- container.go | 10 +++++----- network.go | 2 +- server.go | 2 +- utils/utils_test.go | 3 +-- 5 files changed, 9 insertions(+), 10 deletions(-) diff --git a/api_test.go b/api_test.go index 1e8ed20b98..0a627f2e85 100644 --- a/api_test.go +++ b/api_test.go @@ -449,7 +449,7 @@ func TestGetContainersChanges(t *testing.T) { } func TestGetContainersTop(t *testing.T) { - t.Skip("Fixme. Skipping test for now. Reported error when testing using dind: 'api_test.go:527: Expected 2 processes, found 0.'") + t.Skip("Fixme. Skipping test for now. Reported error when testing using dind: 'api_test.go:527: Expected 2 processes, found 0.'") runtime, err := newTestRuntime() if err != nil { t.Fatal(err) diff --git a/container.go b/container.go index 39c19c53d4..5799fa4e12 100644 --- a/container.go +++ b/container.go @@ -11,6 +11,7 @@ import ( "io" "io/ioutil" "log" + "net" "os" "os/exec" "path" @@ -20,7 +21,6 @@ import ( "strings" "syscall" "time" - "net" ) type Container struct { @@ -813,10 +813,10 @@ func (container *Container) allocateNetwork() error { iface = &NetworkInterface{disabled: true} } else { iface = &NetworkInterface{ - IPNet: net.IPNet{IP: net.ParseIP(container.NetworkSettings.IPAddress), Mask: manager.bridgeNetwork.Mask}, + IPNet: net.IPNet{IP: net.ParseIP(container.NetworkSettings.IPAddress), Mask: manager.bridgeNetwork.Mask}, Gateway: manager.bridgeNetwork.IP, manager: manager, - } + } ipNum := ipToInt(iface.IPNet.IP) manager.ipAllocator.inUse[ipNum] = struct{}{} } @@ -827,10 +827,10 @@ func (container *Container) allocateNetwork() error { portSpecs = container.Config.PortSpecs } else { for backend, frontend := range container.NetworkSettings.PortMapping["Tcp"] { - portSpecs = append(portSpecs, fmt.Sprintf("%s:%s/tcp",frontend, backend)) + portSpecs = append(portSpecs, fmt.Sprintf("%s:%s/tcp", frontend, backend)) } for backend, frontend := range container.NetworkSettings.PortMapping["Udp"] { - portSpecs = append(portSpecs, fmt.Sprintf("%s:%s/udp",frontend, backend)) + portSpecs = append(portSpecs, fmt.Sprintf("%s:%s/udp", frontend, backend)) } } diff --git a/network.go b/network.go index c2673bd803..b552919253 100644 --- a/network.go +++ b/network.go @@ -642,7 +642,7 @@ func (manager *NetworkManager) Allocate() (*NetworkInterface, error) { if err != nil { return nil, err } - // avoid duplicate IP + // avoid duplicate IP ipNum := ipToInt(ip) firstIP := manager.ipAllocator.network.IP.To4().Mask(manager.ipAllocator.network.Mask) firstIPNum := ipToInt(firstIP) + 1 diff --git a/server.go b/server.go index d2c4e5fa59..129cace8ab 100644 --- a/server.go +++ b/server.go @@ -679,7 +679,7 @@ func (srv *Server) getImageList(localRepo map[string]string) ([][]*registry.ImgD depGraph.NewNode(img.ID) img.WalkHistory(func(current *Image) error { imgList[current.ID] = ®istry.ImgData{ - ID: current.ID, + ID: current.ID, Tag: tag, } parent, err := current.GetParent() diff --git a/utils/utils_test.go b/utils/utils_test.go index be796b2381..9a55e7f62d 100644 --- a/utils/utils_test.go +++ b/utils/utils_test.go @@ -366,7 +366,6 @@ func TestParseRelease(t *testing.T) { assertParseRelease(t, "3.8.0-19-generic", &KernelVersionInfo{Kernel: 3, Major: 8, Minor: 0, Flavor: "19-generic"}, 0) } - func TestDependencyGraphCircular(t *testing.T) { g1 := NewDependencyGraph() a := g1.NewNode("a") @@ -421,4 +420,4 @@ func TestDependencyGraph(t *testing.T) { if len(res[2]) != 1 || res[2][0] != "d" { t.Fatalf("Expected [d], found %v instead", res[2]) } -} \ No newline at end of file +} From dd806b4ecd2c94356342da720e580ab13288df33 Mon Sep 17 00:00:00 2001 From: Victor Vieux Date: Mon, 9 Sep 2013 22:19:28 +0000 Subject: [PATCH 169/215] add Martin Redmond to AUTHORS --- AUTHORS | 1 + 1 file changed, 1 insertion(+) diff --git a/AUTHORS b/AUTHORS index 791d966cef..d4964eb917 100644 --- a/AUTHORS +++ b/AUTHORS @@ -74,6 +74,7 @@ Louis Opter Marco Hennings Marcus Farkas Mark McGranaghan +Martin Redmond Maxim Treskin meejah Michael Crosby From 672f1e068392e95966cd57b4bc49bd8d1b8859dd Mon Sep 17 00:00:00 2001 From: Jason McVetta Date: Mon, 9 Sep 2013 15:21:04 -0700 Subject: [PATCH 170/215] failing test case for multiline command in dockerfile --- buildfile_test.go | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/buildfile_test.go b/buildfile_test.go index 14986161d8..aa2cfa4fdf 100644 --- a/buildfile_test.go +++ b/buildfile_test.go @@ -45,6 +45,21 @@ run [ "$(ls -d /var/run/sshd)" = "/var/run/sshd" ] nil, }, + // Exactly the same as above, except uses a line split with a \ to test + // multiline support. + { + ` +from {IMAGE} +run sh -c 'echo root:testpass \ + > /tmp/passwd' +run mkdir -p /var/run/sshd +run [ "$(cat /tmp/passwd)" = "root:testpass" ] +run [ "$(ls -d /var/run/sshd)" = "/var/run/sshd" ] +`, + nil, + nil, + }, + { ` from {IMAGE} From b187cc40cda36fb1b4890d80fc7367b2df4fbd6e Mon Sep 17 00:00:00 2001 From: Solomon Hykes Date: Mon, 9 Sep 2013 16:20:30 -0700 Subject: [PATCH 171/215] Integrate unit tests into hack/make.sh --- hack/make.sh | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/hack/make.sh b/hack/make.sh index c618384b8f..1d79ed7396 100755 --- a/hack/make.sh +++ b/hack/make.sh @@ -18,6 +18,10 @@ # your checkout of the Docker repository. # +# FIXME: break down bundles into sub-scripts +# FIXME: create all bundles in a single run for consistency. +# If the bundles directory already exists, fail or erase it. + set -e # We're a nice, sexy, little shell script, and people might try to run us; @@ -39,6 +43,9 @@ then PKGVERSION="$PKGVERSION-$(date +%Y%m%d%H%M%S)-$GITCOMMIT" fi +# Use these flags when compiling the tests and final binary +LDFLAGS="-X main.GITCOMMIT $GITCOMMIT -X main.VERSION $VERSION -d -w" + PACKAGE_ARCHITECTURE="$(dpkg-architecture -qDEB_HOST_ARCH)" PACKAGE_URL="http://www.docker.io/" PACKAGE_MAINTAINER="docker@dotcloud.com" @@ -65,11 +72,34 @@ end script # Each "bundle" is a different type of build artefact: static binary, Ubuntu # package, etc. +# Run Docker's test suite, including sub-packages, and store their output as a bundle +bundle_test() { + mkdir -p bundles/$VERSION/test + { + date + for test_dir in $(find_test_dirs); do ( + set -x + cd $test_dir + go test -v -ldflags "$LDFLAGS" + ) done + } 2>&1 | tee bundles/$VERSION/test/test.log +} + + +# This helper function walks the current directory looking for directories +# holding Go test files, and prints their paths on standard output, one per +# line. +find_test_dirs() { + find . -name '*_test.go' | grep -v '^./vendor' | + { while read f; do dirname $f; done; } | + sort -u +} + # Build Docker as a static binary file bundle_binary() { mkdir -p bundles/$VERSION/binary go build -o bundles/$VERSION/binary/docker-$VERSION \ - -ldflags "-X main.GITCOMMIT $GITCOMMIT -X main.VERSION $VERSION -d -w" \ + -ldflags "$LDFLAGS" \ ./docker } @@ -134,6 +164,7 @@ EOF main() { + bundle_test bundle_binary bundle_ubuntu cat < Date: Mon, 9 Sep 2013 16:30:24 -0700 Subject: [PATCH 172/215] Add the output of the tests to each release --- hack/release.sh | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/hack/release.sh b/hack/release.sh index 4d5bd00b22..237b5fb903 100755 --- a/hack/release.sh +++ b/hack/release.sh @@ -165,11 +165,18 @@ release_index() { ) | write_to_s3 s3://$BUCKET/index } +release_test() { + if [ -e "bundles/$VERSION/test" ]; then + s3cmd --acl-public sync bundles/$VERSION/test/ s3://$BUCKET/test/ + fi +} + main() { setup_s3 release_binary release_ubuntu release_index + release_test } main From 6921ca4813a583948d3871a53d0349b834f31036 Mon Sep 17 00:00:00 2001 From: Jason McVetta Date: Mon, 9 Sep 2013 16:42:04 -0700 Subject: [PATCH 173/215] read Dockerfile into memory before parsing, to facilitate regexp preprocessing --- buildfile.go | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/buildfile.go b/buildfile.go index 4c8db2c60e..5472b84982 100644 --- a/buildfile.go +++ b/buildfile.go @@ -1,7 +1,6 @@ package docker import ( - "bufio" "encoding/json" "fmt" "github.com/dotcloud/docker/utils" @@ -459,6 +458,8 @@ func (b *buildFile) commit(id string, autoCmd []string, comment string) error { return nil } +var multilineRegex = regexp.MustCompile("\\.*\n") + func (b *buildFile) Build(context io.Reader) (string, error) { // FIXME: @creack any reason for using /tmp instead of ""? // FIXME: @creack "name" is a terrible variable name @@ -471,22 +472,26 @@ func (b *buildFile) Build(context io.Reader) (string, error) { } defer os.RemoveAll(name) b.context = name - dockerfile, err := os.Open(path.Join(name, "Dockerfile")) - if err != nil { + filename := path.Join(name, "Dockerfile") + if _, err := os.Stat(filename); os.IsNotExist(err) { return "", fmt.Errorf("Can't build a directory with no Dockerfile") } - // FIXME: "file" is also a terrible variable name ;) - file := bufio.NewReader(dockerfile) + fileBytes, err := ioutil.ReadFile(filename) + if err != nil { + return "", err + } + dockerfile := string(fileBytes) + // dockerfile = multilineRegex.ReplaceAllString(dockerfile, " ") stepN := 0 - for { - line, err := file.ReadString('\n') - if err != nil { - if err == io.EOF && line == "" { - break - } else if err != io.EOF { - return "", err - } - } + for _, line := range strings.Split(dockerfile, "\n") { + /* line, err := dockerfile.ReadString('\n') + if err != nil { + if err == io.EOF && line == "" { + break + } else if err != io.EOF { + return "", err + } + }*/ line = strings.Trim(strings.Replace(line, "\t", " ", -1), " \t\r\n") // Skip comments and empty line if len(line) == 0 || line[0] == '#' { From ebb934c1b044f4bbffe312e9c88c00134c94ef7f Mon Sep 17 00:00:00 2001 From: Jason McVetta Date: Mon, 9 Sep 2013 17:02:45 -0700 Subject: [PATCH 174/215] line continuation regex --- buildfile.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/buildfile.go b/buildfile.go index 5472b84982..c40ee5f063 100644 --- a/buildfile.go +++ b/buildfile.go @@ -458,7 +458,8 @@ func (b *buildFile) commit(id string, autoCmd []string, comment string) error { return nil } -var multilineRegex = regexp.MustCompile("\\.*\n") +// Long lines can be split with a backslash +var lineContinuation = regexp.MustCompile(`\s*\\.*\n`) func (b *buildFile) Build(context io.Reader) (string, error) { // FIXME: @creack any reason for using /tmp instead of ""? @@ -481,7 +482,7 @@ func (b *buildFile) Build(context io.Reader) (string, error) { return "", err } dockerfile := string(fileBytes) - // dockerfile = multilineRegex.ReplaceAllString(dockerfile, " ") + dockerfile = lineContinuation.ReplaceAllString(dockerfile, " ") stepN := 0 for _, line := range strings.Split(dockerfile, "\n") { /* line, err := dockerfile.ReadString('\n') From 4f3b8033f287051156e6b81aeff9da3c44f64cba Mon Sep 17 00:00:00 2001 From: Jason McVetta Date: Mon, 9 Sep 2013 17:17:09 -0700 Subject: [PATCH 175/215] cruft removal --- buildfile.go | 8 -------- 1 file changed, 8 deletions(-) diff --git a/buildfile.go b/buildfile.go index c40ee5f063..cbb6ecfcef 100644 --- a/buildfile.go +++ b/buildfile.go @@ -485,14 +485,6 @@ func (b *buildFile) Build(context io.Reader) (string, error) { dockerfile = lineContinuation.ReplaceAllString(dockerfile, " ") stepN := 0 for _, line := range strings.Split(dockerfile, "\n") { - /* line, err := dockerfile.ReadString('\n') - if err != nil { - if err == io.EOF && line == "" { - break - } else if err != io.EOF { - return "", err - } - }*/ line = strings.Trim(strings.Replace(line, "\t", " ", -1), " \t\r\n") // Skip comments and empty line if len(line) == 0 || line[0] == '#' { From c01f6df43e1280c398d921c2d5eff01db8c26f94 Mon Sep 17 00:00:00 2001 From: Jason McVetta Date: Mon, 9 Sep 2013 18:22:58 -0700 Subject: [PATCH 176/215] Test dockerfile with line containing literal "\n" --- buildfile_test.go | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/buildfile_test.go b/buildfile_test.go index aa2cfa4fdf..bdc3680386 100644 --- a/buildfile_test.go +++ b/buildfile_test.go @@ -60,6 +60,19 @@ run [ "$(ls -d /var/run/sshd)" = "/var/run/sshd" ] nil, }, + // Line containing literal "\n" + { + ` +from {IMAGE} +run sh -c 'echo root:testpass > /tmp/passwd' +run echo "foo \n bar"; echo "baz" +run mkdir -p /var/run/sshd +run [ "$(cat /tmp/passwd)" = "root:testpass" ] +run [ "$(ls -d /var/run/sshd)" = "/var/run/sshd" ] +`, + nil, + nil, + }, { ` from {IMAGE} From 6a4afb7f8eacde9cb81202347258983908a9f7c6 Mon Sep 17 00:00:00 2001 From: Jason McVetta Date: Mon, 9 Sep 2013 18:23:42 -0700 Subject: [PATCH 177/215] stricter regexp for Dockerfile line continuations --- buildfile.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildfile.go b/buildfile.go index cbb6ecfcef..8ff21bf939 100644 --- a/buildfile.go +++ b/buildfile.go @@ -459,7 +459,7 @@ func (b *buildFile) commit(id string, autoCmd []string, comment string) error { } // Long lines can be split with a backslash -var lineContinuation = regexp.MustCompile(`\s*\\.*\n`) +var lineContinuation = regexp.MustCompile(`\s*\\\s*\n`) func (b *buildFile) Build(context io.Reader) (string, error) { // FIXME: @creack any reason for using /tmp instead of ""? From 3d39336a46a0d7f411467d29eb6328dc1ab3e900 Mon Sep 17 00:00:00 2001 From: Solomon Hykes Date: Mon, 9 Sep 2013 18:45:40 -0700 Subject: [PATCH 178/215] Break down hack/make.sh into small scripts, one per 'bundle': test, binary, ubuntu etc. --- hack/make.sh | 153 +++++++++----------------------------------- hack/make/README.md | 17 +++++ hack/make/binary | 4 ++ hack/make/test | 27 ++++++++ hack/make/ubuntu | 94 +++++++++++++++++++++++++++ 5 files changed, 174 insertions(+), 121 deletions(-) create mode 100644 hack/make/README.md create mode 100644 hack/make/binary create mode 100644 hack/make/test create mode 100644 hack/make/ubuntu diff --git a/hack/make.sh b/hack/make.sh index 1d79ed7396..9910882e20 100755 --- a/hack/make.sh +++ b/hack/make.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash # This script builds various binary artifacts from a checkout of the docker # source code. @@ -34,139 +34,50 @@ grep -q "$RESOLVCONF" /proc/mounts || { exit 1 } +# List of bundles to create when no argument is passed +DEFAULT_BUNDLES=( + test + binary + ubuntu +) + VERSION=$(cat ./VERSION) -PKGVERSION="$VERSION" GITCOMMIT=$(git rev-parse --short HEAD) if test -n "$(git status --porcelain)" then GITCOMMIT="$GITCOMMIT-dirty" - PKGVERSION="$PKGVERSION-$(date +%Y%m%d%H%M%S)-$GITCOMMIT" fi # Use these flags when compiling the tests and final binary LDFLAGS="-X main.GITCOMMIT $GITCOMMIT -X main.VERSION $VERSION -d -w" -PACKAGE_ARCHITECTURE="$(dpkg-architecture -qDEB_HOST_ARCH)" -PACKAGE_URL="http://www.docker.io/" -PACKAGE_MAINTAINER="docker@dotcloud.com" -PACKAGE_DESCRIPTION="lxc-docker is a Linux container runtime -Docker complements LXC with a high-level API which operates at the process -level. It runs unix processes with strong guarantees of isolation and -repeatability across servers. -Docker is a great building block for automating distributed systems: -large-scale web deployments, database clusters, continuous deployment systems, -private PaaS, service-oriented architectures, etc." -UPSTART_SCRIPT='description "Docker daemon" - -start on filesystem and started lxc-net -stop on runlevel [!2345] - -respawn - -script - /usr/bin/docker -d -end script -' - -# Each "bundle" is a different type of build artefact: static binary, Ubuntu -# package, etc. - -# Run Docker's test suite, including sub-packages, and store their output as a bundle -bundle_test() { - mkdir -p bundles/$VERSION/test - { - date - for test_dir in $(find_test_dirs); do ( - set -x - cd $test_dir - go test -v -ldflags "$LDFLAGS" - ) done - } 2>&1 | tee bundles/$VERSION/test/test.log +bundle() { + bundlescript=$1 + bundle=$(basename $bundlescript) + echo "---> Making bundle: $bundle" + mkdir -p bundles/$VERSION/$bundle + source $bundlescript $(pwd)/bundles/$VERSION/$bundle } - -# This helper function walks the current directory looking for directories -# holding Go test files, and prints their paths on standard output, one per -# line. -find_test_dirs() { - find . -name '*_test.go' | grep -v '^./vendor' | - { while read f; do dirname $f; done; } | - sort -u -} - -# Build Docker as a static binary file -bundle_binary() { - mkdir -p bundles/$VERSION/binary - go build -o bundles/$VERSION/binary/docker-$VERSION \ - -ldflags "$LDFLAGS" \ - ./docker -} - -# Build docker as an ubuntu package using FPM and REPREPRO (sue me). -# bundle_binary must be called first. -bundle_ubuntu() { - mkdir -p bundles/$VERSION/ubuntu - - DIR=$(pwd)/bundles/$VERSION/ubuntu/build - - # Generate an upstart config file (ubuntu-specific) - mkdir -p $DIR/etc/init - echo "$UPSTART_SCRIPT" > $DIR/etc/init/docker.conf - - # Copy the binary - mkdir -p $DIR/usr/bin - cp bundles/$VERSION/binary/docker-$VERSION $DIR/usr/bin/docker - - # Generate postinstall/prerm scripts - cat >/tmp/postinstall </tmp/prerm <&1 | tee $DEST/test.log +} + + +# This helper function walks the current directory looking for directories +# holding Go test files, and prints their paths on standard output, one per +# line. +find_test_dirs() { + find . -name '*_test.go' | grep -v '^./vendor' | + { while read f; do dirname $f; done; } | + sort -u +} + +bundle_test diff --git a/hack/make/ubuntu b/hack/make/ubuntu new file mode 100644 index 0000000000..dde11ae81e --- /dev/null +++ b/hack/make/ubuntu @@ -0,0 +1,94 @@ +#!/bin/sh + +DEST=$1 + +PKGVERSION="$VERSION" +if test -n "$(git status --porcelain)" +then + PKGVERSION="$PKGVERSION-$(date +%Y%m%d%H%M%S)-$GITCOMMIT" +fi + +PACKAGE_ARCHITECTURE="$(dpkg-architecture -qDEB_HOST_ARCH)" +PACKAGE_URL="http://www.docker.io/" +PACKAGE_MAINTAINER="docker@dotcloud.com" +PACKAGE_DESCRIPTION="lxc-docker is a Linux container runtime +Docker complements LXC with a high-level API which operates at the process +level. It runs unix processes with strong guarantees of isolation and +repeatability across servers. +Docker is a great building block for automating distributed systems: +large-scale web deployments, database clusters, continuous deployment systems, +private PaaS, service-oriented architectures, etc." + +UPSTART_SCRIPT='description "Docker daemon" + +start on filesystem and started lxc-net +stop on runlevel [!2345] + +respawn + +script + /usr/bin/docker -d +end script +' + +# Build docker as an ubuntu package using FPM and REPREPRO (sue me). +# bundle_binary must be called first. +bundle_ubuntu() { + DIR=$DEST/build + + # Generate an upstart config file (ubuntu-specific) + mkdir -p $DIR/etc/init + echo "$UPSTART_SCRIPT" > $DIR/etc/init/docker.conf + + # Copy the binary + # This will fail if the binary bundle hasn't been built + mkdir -p $DIR/usr/bin + # Copy the binary + # This will fail if the binary bundle hasn't been built + cp $DEST/../binary/docker-$VERSION $DIR/usr/bin/docker + + # Generate postinstall/prerm scripts + cat >/tmp/postinstall </tmp/prerm < Date: Mon, 9 Sep 2013 23:39:55 -0700 Subject: [PATCH 179/215] PACKAGERS.md: a guide to packaging Docker for your favorite distro --- hack/PACKAGERS.md | 125 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100644 hack/PACKAGERS.md diff --git a/hack/PACKAGERS.md b/hack/PACKAGERS.md new file mode 100644 index 0000000000..347f777186 --- /dev/null +++ b/hack/PACKAGERS.md @@ -0,0 +1,125 @@ +Dear packager. + +If you are looking to make docker available on your favorite software distribution, +this document is for you. It summarizes the requirements for building and running +docker. + +## Getting started + +We really want to help you package Docker successfully. Before anything, a good first step +is to introduce yourself on the [docker-dev mailing list](https://groups.google.com/forum/?fromgroups#!forum/docker-dev) +, explain what you''re trying to achieve, and tell us how we can help. Don''t worry, we don''t bite! +There might even be someone already working on packaging for the same distro! + +You can also join the IRC channel - #docker and #docker-dev on Freenode are both active and friendly. + +## Package name + +If possible, your package should be called "docker". If that name is already taken, a second +choice is "lxc-docker". + +## System build dependencies + +To build docker, you will need the following system dependencies + +* An amd64 machine +* A recent version of git and mercurial +* Go version 1.1.2 +* A clean checkout of the source must be added to a valid Go [workspace](http://golang.org/doc/code.html#Workspaces) +under the path *src/github.com/dotcloud/docker*. See + + +## Go dependencies + +All Go dependencies are vendored under ,/vendor. They are used by the official build, +so the source of truth for the current version is whatever is in ./vendor. + +To use the vendored dependencies, simply make sure the path to ./vendor is included in $GOPATH. + +If you would rather package these dependencies yourself, take a look at ./hack/vendor.sh for an +easy-to-parse list of the exact version for each. + +NOTE: if you''re not able to package the exact version (to the exact commit) of a given dependency, +please get in touch so we can remediate! Who knows what discrepancies can be caused by even the +slightest deviation. We promise to do our best to make everybody happy. + + +## Disabling CGO + +Make sure to disable CGO on your system, and then recompile the standard library on the build +machine: + +```bash +export CGO_ENABLED=0 +cd /tmp && echo 'package main' > t.go && go test -a -i -v +``` + +## Building Docker + +To build the docker binary, run the following command with the source checkout as the +working directory: + +``` +./hack/make.sh binary +``` + +This will create a static binary under *./bundles/$VERSION/binary/docker-$VERSION*, where +*$VERSION* is the contents of the file *./VERSION*. + +You are encouraged to use ./hack/make.sh without modification. If you must absolutely write +your own script (are you really, really sure you need to? make.sh is really not that complicated), +then please take care the respect the following: + +* In *./hack/make.sh*: $LDFLAGS, $VERSION and $GITCOMMIT +* In *./hack/make/binary*: the exact build command to run + +You may be tempted to tweak these settings. In particular, being a rigorous maintainer, you may want +to disable static linking. Please don''t! Docker *needs* to be statically linked to function properly. +You would do the users of your distro a disservice and "void the docker warranty" by changing the flags. + +A good comparison is Busybox: all distros package it as a statically linked binary, because it just +makes sense. Docker is the same way. + +## Testing Docker + +Before releasing your binary, make sure to run the tests! Run the following command with the source +checkout as the working directory: + +```bash +./hack/make.sh test +``` + +The test suite includes both live integration tests and unit tests, so you will need all runtime +dependencies to be installed (see below). + +The test suite will also download a small test container, so you will need internet connectivity. + + +## Runtime dependencies + +To run properly, docker needs the following software to be installed at runtime: + +* GNU Tar version 1.26 or later +* A recent build of iproute2 (2012-05-21 or later), and specifically the "ip" utility. +* iptables version 1.4 or later +* The lxc utility scripts (http://lxc.sourceforge.net) version 0.8 or later. +* Git version 1.7 or later + +## Kernel dependencies + +Docker in daemon mode has specific kernel requirements. For details, see +http://docs.docker.io/en/latest/installation/kernel/ + +Note that Docker also has a client mode, which can run on virtually any linux kernel (it even builds +on OSX!). + +## Init script + +Docker expects to run as a daemon at machine startup. Your package will need to include a script +for your distro''s process supervisor of choice. + +Docker should be run as root, with the following arguments: + +``` +docker -d +``` From b7826f56664c85e44207ce5e1e685ed04016feb6 Mon Sep 17 00:00:00 2001 From: Victor Vieux Date: Tue, 10 Sep 2013 16:55:27 +0000 Subject: [PATCH 180/215] add Brian Olsen to AUTHORS --- AUTHORS | 1 + 1 file changed, 1 insertion(+) diff --git a/AUTHORS b/AUTHORS index d4964eb917..af0eb3bdd8 100644 --- a/AUTHORS +++ b/AUTHORS @@ -17,6 +17,7 @@ Antony Messerli Barry Allard Brandon Liu Brian McCallister +Brian Olsen Bruno Bigras Caleb Spare Calen Pennington From 44d0f941f287d5dcf6212216b7c0b72b085bdb1a Mon Sep 17 00:00:00 2001 From: Victor Vieux Date: Tue, 10 Sep 2013 17:16:59 +0000 Subject: [PATCH 181/215] fix wrong return error --- container.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/container.go b/container.go index 5ddb07562c..bca6b52c61 100644 --- a/container.go +++ b/container.go @@ -648,7 +648,7 @@ func (container *Container) Start(hostConfig *HostConfig) error { continue } if err := os.MkdirAll(path.Join(container.RootfsPath(), volPath), 0755); err != nil { - return nil + return err } container.Volumes[volPath] = id if isRW, exists := c.VolumesRW[volPath]; exists { From 5b361f31f7d4eb547cbf60fda2968537600772ca Mon Sep 17 00:00:00 2001 From: Solomon Hykes Date: Tue, 10 Sep 2013 11:30:14 -0700 Subject: [PATCH 182/215] Packager's manual: official build vs distro build --- hack/PACKAGERS.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/hack/PACKAGERS.md b/hack/PACKAGERS.md index 347f777186..43280a0009 100644 --- a/hack/PACKAGERS.md +++ b/hack/PACKAGERS.md @@ -18,6 +18,18 @@ You can also join the IRC channel - #docker and #docker-dev on Freenode are both If possible, your package should be called "docker". If that name is already taken, a second choice is "lxc-docker". +## Official build vs distro build + +The Docker project maintains its own build and release toolchain. It is pretty neat and entirely +based on Docker (surprise!). This toolchain is the canonical way to build Docker, and the only +method supported by the development team. We encourage you to give it a try, and if the circumstances +allow you to use it, we recommend that you do. + +You might not be able to use the official build toolchain - usually because your distribution has a +toolchain and packaging policy of its own. We get it! Your house, your rules. The rest of this document +should give you the information you need to package Docker your way, without denaturing it in +the process. + ## System build dependencies To build docker, you will need the following system dependencies From d14058bc29512918ffd4e7413c6d5ae8524088ed Mon Sep 17 00:00:00 2001 From: Solomon Hykes Date: Tue, 10 Sep 2013 11:33:26 -0700 Subject: [PATCH 183/215] Update usage comments in hack/make.sh --- hack/make.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/hack/make.sh b/hack/make.sh index 9910882e20..3df411f107 100755 --- a/hack/make.sh +++ b/hack/make.sh @@ -11,11 +11,12 @@ # will be used as Docker binary version and package version. # - The hash of the git commit will also be included in the Docker binary, # with the suffix -dirty if the repository isn't clean. -# - The script is intented to be run as part of a docker build, as defined +# - The script is intented to be run inside the docker container specified # in the Dockerfile at the root of the source. In other words: # DO NOT CALL THIS SCRIPT DIRECTLY. # - The right way to call this script is to invoke "docker build ." from -# your checkout of the Docker repository. +# your checkout of the Docker repository, and then +# "docker run hack/make.sh" in the resulting container image. # # FIXME: break down bundles into sub-scripts From 228b7af516e023984a3d0ceba98c639cec9695d0 Mon Sep 17 00:00:00 2001 From: Solomon Hykes Date: Tue, 10 Sep 2013 11:33:37 -0700 Subject: [PATCH 184/215] Remove fixed FIXMEs --- hack/make.sh | 4 ---- 1 file changed, 4 deletions(-) diff --git a/hack/make.sh b/hack/make.sh index 3df411f107..f7412a94d1 100755 --- a/hack/make.sh +++ b/hack/make.sh @@ -19,10 +19,6 @@ # "docker run hack/make.sh" in the resulting container image. # -# FIXME: break down bundles into sub-scripts -# FIXME: create all bundles in a single run for consistency. -# If the bundles directory already exists, fail or erase it. - set -e # We're a nice, sexy, little shell script, and people might try to run us; From c75926be4f1a606251c6cdc926c5a37795d358b9 Mon Sep 17 00:00:00 2001 From: Andy Rothfusz Date: Tue, 10 Sep 2013 14:54:35 -0700 Subject: [PATCH 185/215] Fix #1845 lxc typo in images --- .../images/docker-filesystems-busyboxrw.png | Bin 119391 -> 121141 bytes .../images/docker-filesystems-debian.png | Bin 76044 -> 77822 bytes .../images/docker-filesystems-debianrw.png | Bin 92452 -> 94218 bytes .../images/docker-filesystems-generic.png | Bin 76703 -> 78384 bytes .../images/docker-filesystems-multilayer.png | Bin 113052 -> 127744 bytes .../images/docker-filesystems-multiroot.png | Bin 70471 -> 72247 bytes .../terms/images/docker-filesystems.svg | 2327 +++++++++-------- 7 files changed, 1164 insertions(+), 1163 deletions(-) diff --git a/docs/sources/terms/images/docker-filesystems-busyboxrw.png b/docs/sources/terms/images/docker-filesystems-busyboxrw.png index 24277dc1f4394253c431224864f0e8b4166b1efb..ad41c940e4767ed22b89923af94f564f8094b7e6 100644 GIT binary patch delta 48792 zcmYhiWl&vR6RnE`cP9k*;O_1a+})kv!DZp@F2OYroFKv7Ex5b8+Xn7_zf-5q{k^Mp z&9%CF_83q1+AN0qQx6x=2uV!{G@v@3eD8Z=RyY|bIdUp{!biqOB{FMi*be?2gP<11 z9_HW2g6J1*y zK7Q0oJza*fhA6(z_@Agrwu4fN)y-qsZcP`a?=u_yV7$@>irl|XssS?kfOJ89@5o8= zwlPb8UQwdaw)r0bh2x_a^qi|fE??U-bTS|61otU|0w>`%oPnOe|FiLt%hgTbW?OG8 z(vF*tdp9W^PXk;}*RDyw?XV8%`>kA3$dBBs<<%XtN0gb|KcJspLZ8OPPxWeg;!a_2 zisOs@KBJtEom|~Fwg=f`0r@2wHum4eyo^;CgPWxE)OAwK?{N@TY}ew;VCXBwL$AyW25qWcYGr%tKPe~31v9C>hI{Z`#gDwT;C%uf zu(Tk*9Kc^g0<}9zZjNKqhfPzE67&vZA-w;BN_gVR(A4d0-v#_|w}(^F#qxSG46lyj zYN3fAdB6Y6t~Hat4t?vTMpl*5K1}V<_dQI{%7d za7%U6P~_}PHaGLfAkV3M8+aQHv4NGC2*M+cHig|U0CJ%61VL{cU;hQch^72NK-b7C zDZ8&oYq$N`VrSfqd+qwJra-iuEb0sLFjQLqoS2e>-qU4;5;D|2(XVk%n@SWm7x*T) z{rIBlE3?7Cr5_gNYO=-UcD-FXui7DrBxS!&HxN!KI*b@WnKnEuGxl1a9v8_~E+Cn7 zQLG^x0^lU~@7hQAgCblycem|X^Bva1+)k5Tt_|tVJm=OLzAp%~3p45VJP5e0_U+V> z$M<8DJ~scZz(=`yR7wzJPN_LxVx^P~T0qId#v;+m>rSCyxy^vDWH+&$=W`{2b>L?6 z)uNpEW__fqGNzX~zNu6tXZOosI`)k_wmphV6`<(KHZXw{TgzB!0-f`)f7PpvgZc85 zuf5VLe5c~Y$R2+Z$t5y{qr&k0RFT^8^@Et^g5anz;qUuT2nbRLSqV{fjwn2gD}Pp2 zo?LYSUj%Rw*WFhH4qIRQ8B;pE>Kmb5`~Bk*8OM{QbR-CO=o=Pvy2*VxC5R3C$7wrl z19U?O`0kw*QEnIKY&s=T9v)0&^D^YZ^TBP-Vc|`a#U~#W->>Lx#5EB!F{_FD!R`(6 z-tTs(t8<)LglhlRg2%N;`WuO?Qy`Y}6mKS$X;Wx^zZpj&p0tNO%7D2L+=Uf+n(C_8 z=^zmic35LPV?%LoDK%@N^63k+lu1OUJTSRaRN(B)t(&?q_*JO;U(n*lN}Lw#Rppry)0X9hzcWiWg{t(?!?Re)CEjoI4ek%R(HSl@~ zPMn`onj(~So<2U|!affS!2`)J)-z&_b})@6&?I;0tt8dt(*Cp>IFn0ty?;Eef!o3= zH|B`X$XK>E#|yN2wV>NyHDC2nQSD14B*_>`U$h4ZKlF{>HZl1E)S%n_qS>vU zy|20)UfeWZjEPVZnBT&XKO1gz*ja7yfndhJF!c{h3yc4uuI6{{Ks|x#SFocJ!M==A z!Em~UPw^bOv8&Ew6?QkrH`HORJ6zGo{{b3u4*A2rHLFt1o7TUtJ`Tg4)w>kN^2!5p z!)N-62*4JhQ`Cr=tf)``YN$x`n@l)s<(T2A%{TNs^*QOlpQ&O@vH3B(l9=COZD`~d=Q(r2I!MOVvSs75J6*}N>8c>`a z@5I?jT$^9T4-n5aJf-ADSdT5b7SB%CgryynG)5}I3;RuV*PhQ1qTrfJ!*{owyR!R; z-zF8VsIaJ!bCV_(n~)cpOd@2s;ESCtMfp6x{QK?USi$8CY@9_{w!rv)T;%7lqXd z(C0x;j56nvwiIc{eye==^lk7vIZ1!+Z5ro9S4e4IZ}mQlT>`!YoTm$#Sgy#+cpQ;* zQlT}6a!vjd0FN5j72n%fTK*@Iq6wla#6RRWtgPvDw@m zC6vvsnIweN_)H+sz7>2y zE)JN_8yzgxn(3KVF z*m$fFAI{LcrC=6nu z8ab%kE^?_}UJT6k_Fw&VIPPaAzfW1ZVgi&|d?IaQZjAWlzBgeEDvkT^(Xj<@w6g!+LN|(I_k3s=arS4v6GHgNP7~tl3kbl&AtM@MF416 zfjQeCwP%+M;X4g~?FoZr4-~1D$c0}45!29#YSJMG?d@`_YMC>Tl=9p8zu)($ndil`+AM~Q<#=`Q*-3g z*YmB~pEWxR<$qvm2f%GKWmbnX&1wpX7pXg^a_2VxHjan}r}idD2CXIo2^VNgK^0v{ z8HU9o=!x*I-AZwqu5YSBj>jd5R{Wyl#FiD+T6C#HR`G!>$QuV}oovFQTyiJaAU@<@OZA>lEc5}|Yg&!~3mNQG|h_pi>a2P)Pn*5VEe4f47c zpCIZ3y(Vw9+p};2Dk5ysQL~UCDiOl7?JKp+?-L0FAf8`0>PZPj9{K;&x0A^01{R^c zHG{D7da50!g&+ieBNEjVl8ut~c61tA<)0WOf*d_4Fa&4g?$+!5@k1@`9;6_Iy{Xpc;b)gC8z;2D_?w^oFS&3P-{9OclS zJhk5YnXU*g#>+@LdB*|N{xxe0{T}K1%tkwafw#))22zka?{g^NSFI9^L80RPIv>~m zSt42^I>~fWoIDX;jAHweg5@-$yuD&O{VSIJ%YD)JD&3L4+>!kR;M+Q~msuQkuu6X< zb++vD^#ERokdI|+w>5h3zK^D8H1l>}ZW=o#LW#&%{1zGgVLZAbCXpx&Y=ncjH<4M+OhrMxuWvPbP|!!U!G0Co zh$T$nzz@h&;3NXU?tX4M_OE1|fH&z#rZTFhGQHM`@_QB>5fDPaxZ|D^g{DN}S=r(= zrpr14YM&(XrXoFKt|6bfU$J>TH4Ni%7vO|6Re`L#T_uZk0x|vW_(U>Hsvkc6S2Wpl zXZHjv!v*+cNgPZQX|T<7bLT~E`)3HB<4?e_h~pQ^G)gckjy zQ-LzY;^bx|benzf`O^fs2Yjwu;ZADoI0!};tG*4rzs-1gQeGZVV#0wRAc^vhkSC#9 z_+xyUSg^$t)N&qFNmBqImH&emx=6ZEgJG2jkl&PAtKH-F9by^|q#H z)Zf7r+1qc`(-k%Q@?k~RZddNmhupgPjb86&ub6s}F4yq*J2C=lg$HRRjR&!w7O&oP zW#3T~-`_|FDH&9mnPSEc<(K_BQ2(FOZ5hUCHMdB?C5GAV-kFuc&5bHGt+xK#ul;O` zIXie{8V7s&xyfMa7vLjiZf#mYvd)9f}OCfkTe&MO`1eWqj#|;ztNJo+vagA-R0ko*iZo_A>DJ*H822VJ4$%waeeOM zM1t*(E7`fez?t?UZK0Q2I7H?1XZV98#%=K}{Vlp~PR`im38+Bi$U>trbzzEIPlf7F zHNOk$)EMZxT{tZiJnf1$73%M=%qX}QZ{F@VfIe=P`bRAyo*uC|O5 zCS)liMG(EnCB~p8Y~OHlDGjz!*gpTYa|`Z0Z6Jd~7Y>4QEoI*|RE)H&+4xAr6a;Wl z$52SUYid7hj-(5uY3tRTd~VR28VDz6P!2A4mlz}i_&@^rvd&>D z)isXzWEy3t(wLwnkG8^in`&^FXjY01`}YDE2pAXA{P8pu0)0dyg+J^>O7xYf;xiz5 zOaB21G|r4(|N0X6uIv;N5K}FhfwL~pJG3Jm66-`9SI{T74KlRU2v%h1H#?wo!12gZI()q?)g0w z|9jm`67PHo#rT_V*Ko{6?Z(FGOlyCAmjU;l<+tfeFced5F|e52291E&#G1*_mj>9< zp(WZhCNyg;vz}Wsp??Z5+Q}~yiUnv-eU(W<^>YR=Uyee|9t#-Ck3&VaWiXPL#n0 z(=M||#BUCqYmK@UTsC5rj$H#2j20_QRG3<1FcFlJ*9z%ztRL@Ve_Rjoua~Vt1pas* zauW3W4!(0v-?3XiWDY|(r|HAY=hbZXfMcXSl57Zi2BliVxO@|2pLYC2)zH%~b>$<7 zA@Fc$!s9jNqL7iA>NvwN;|u63ijP5f{6KvVU-y9o!;|{AEY`tmc@CWc99(#1-uQC& zPq?`5e=#E|{ZZlmqbI$J7CJ>U%73L$_)zcz!j;JVKV&I?!9UZBCDGAp*Hg~AUziV# zrpl9W#n6ItIl@Vs4Yi3O;6YgAeBs24Xfmmc7Q2#?u!ho|6#+dMP>D#8XCq{iyt)s_ zP3<4*)GHLUTjpiOcIY+V_j!Os-f-A!&SBN;O#QJpQU2b*ep;S;9Dcv%Wzug@*<*}t z66iePZvGI4OBH%WOKKoYg&E#@hd+20Xuo(~^A#Okh@UbTac zORl=M=_HSXj{cAUvrlxXF3x52R0r#8M6_UptC5JJ#lQ^yHL0)XKUyLq$RJqM4388O z!&ROKF$`QFF@6IR)f*qtq?eg5#-kV+Kc@dp{_z%i+VwMmVU*PcBZCximd9d?KdQ1X z3_8{yw^J#--V{?MZZ2ixNjEi*`n_bHN#QyP$0 zM{qh^%}c=hki{XGdcF;1vYeS6#=jCI&Q5`z02|NIb8%A=ZWLc-bzgmej)~8TI9NLB zi6}X>CbFf1NEf9&-6$e%1xAG4%4n7lmg3HUIpi0ok3)BSw#jJtNLLMaXoNKxUnwCb zxdaNckx`caHOwWKU0Qo~vWzPHe-Y39&FjKq^X9F1zB$$6*hMA4G3OE}M6fUsk~0QK zWO)}kPuu6+ z4gX=&<;>2tBzU1D^i>nJ>uK?uDzmspc{Cc9UUl!vH?c-J{qP>zmEZ46j+y&K5{DOx zIjBTW`C2vq>AR#}8Ax*HEFB7|gc?Ab)t1{XjQTSJwuJiM>Xj z|7R%Iu!!IB@jze&36BT4lH(EU+70jKk4d6a&fNpoTeD2#9QUiao*|2Yp-3Na>1^Aq z2C!FsnPa4_AmY4{O>bBXjE*;cm%UzEgnn5JQC%jjtf_U)b1Aw|DRSj(BgBuD3N@EwNT`SqDfl zZiC)Y@Mp1JxWnmb^j-h;d@DF_j%!`|jjb>ZE*q(%o-$3K>pjdNT2Fke ziLaw)F`IA_I@pNEjO=wJFna97rG~W@IBAWhz=ml8n<%YAQSX39iD!}sEc2=tDsKeH z+xeu^x@PnMX>3Jwd%VdGJh$P48Ay0ps2u4US`0l^+8*Pac1dLMQl@ac-nlcX4^bM5 z8=&d<;hfOE{9jNBf<;^Qi_OU^n`@Yh(wHpfx;~P~qUHALXW-k?`qDX#w`Jhb{um^q zvsvH;A3M^H0?|*6raiA9oETw<5*nmzU2qHT$xTj*bbjs6+ti5G(|;(ZeP8n&;C%H? z_I$#G{T|%y)$67h`@7Zk_I?w%T_4XhpLjdi=uVPJ`QHh|$C1Obx%R~&Zg9T#Zmu@p z4mfsgZy(#Vk{Qm^cRCPR*exo)E67pW00A7{2xPJ-8I~gdJD=j)OC1;kKy7$Q`}Is9 zu@plizrs5h$ghnw@_BaAgIcFJ10#OLSVN!vB@3fhm}9hVb9i;rcI)x4ceFKqb#vvE zCYOy3k?L*GN}F2uAv@rcZ?PMgfZ%lB3^3J^wCKZ#8vIc^>PzAl)14Kq3;?Le%O*Cm z4q}zFDs2Y*QjV)q6HWHXKGB%6Sz;^9GC!%Cppp<_-~%)(OFkNH1iYRSL=FBreWb}j z^j@Dkx!}!RLfCf&BkSY{7d&R0%~w*3FbM@sEr=vCI2Gd+YaNGtQvkz)SMTCGCQ8h2 zO$OnKZQCnYCYZ`)q{x+arvRT8Ut7jGZFy3M_uJPs)IcE(LSaXYWC$;u$G_Z(9o!~! z#5}JeZ*H+t;?IBGLMv0l?`YCx2t^UmBWI5ka1zw#f=Z+gzAtCgx-(j#5t)uJ8eu*3 z(qW9|hsWL;FUnazQ*pe1T2p(TcSTgAiho;V62|r0`(+St)&+CQBn}jjf9=4Elwffu z0l5u>yc!|73^2&tk#sZjNVN6L|1Oz%jO)wv^~UA#Yw;ywnHsoxCG$Q)NS*%?wt`kJ zHkIT;Nd_gZQTS3j)Z2U{5!o|Y!e0^+a)33~di0~ciAUv5ZPE(qO^1L|r1R)_ur0Zr4TACIbuPpv!HmTEU-hXWrE$f=qhrPLyP0m+ znW;O@$p{W#ZQDO>;$6*#J6+4{C}lK2#B4$uzy@8Onrs97E=s)%A3ms2@&WPbG!y=W zJ!+D!7h1=oV7-#Pg+8-mMqXPh!|>6VIUrvYYo)(O8!ZQSekU(y4i-y?gMQ|Zan*L`cPd$h`=%a62)?M%bC4B)sG70u_A z{)6uTK7brzXgIcFJFV&*eyg^v8|SCiukEj7z94pUrI7XNNg|;$gg>(z#-;`1PKTi- zt79WRJ3Ae=hC}g1+!1mza&^Th`re;}9a!}&4gHbh`$)&KiJX{aP2L44LxQtm{i`gN z4K-Fs{MRT~>PiXYKD5g&qVwj->FQ+UF2bYqe*%(aj8z_+{ht%AtTWt@--XD-KIX4v z)8lZBfQi+>z>zlI$URP~b3;KnRl?vNbpDTm#Zw)AN8%Y3n=y%v)zxf_Xk1qJeK|JE zKeIKpj+}SD5M0AWGoYJEcfp8gr&9>VS_8BCJ~Zo@F>lj*!tLHBU18uCFm8`Bf9;33*tQG2ps zpUZ+_kJpKcAKy?uzmMar7jeXf`hCHGu~JSgv<5aEYn6BuTn;Ha;^fX`V1e{=Fn@8V z$;jr9?nAZFln0~k)zxGU_J&UHh*~Wvpw?_(ba^!6>G_NDOj5G9qH8PK!{qJz^bnRP zC@ZlKjmsmbDT<-$oTE1vd(pm{*HXWc4gtqCQ#jpTJ1NEdMpR|}sr>if zHbRl+sDxS3ohgv!dT!Z8AD$hl6BC0VJslIZO9_@2S=(RnQ&og_`eIowz#vfS zHss3&bSeW5cU7A0L^iwaspg5t#ZS}?UbWf#*myxh)4fx1NX zk7-E|_br_+@)UJga5H1LA;mq52J2&ndch_eId6|%k%R}tz>(nYO$i3tJ{>X@~d^h zKc8=YG4pl6b=tuL{%}g?#p)fFv{s^Xx_FqqlccMM4{IF4xvo$f*e3F z_@1}m(ODV_Wx%bTjaNM%j!AbdHyrc3(Pe_(l0AYkN4`X1lVX;!;v?hYwrAE`Q0P_b ze==&5(zdofyWK7*0L@hsQFMV+1!DzLlZ9L@-?clkL>sJjvxPd&p^6}z-l4(zqXZDy zJGG}MI%Dk017siz7v6vDp-S|}ETxQ7v!P@$glwE*dNA3I4(eM;Na&&N$WdNj3qW-m zqW!THJC;?p$Qr(ufoCS)8uu&L8+OKP!d%`lGGi>~j95;xus8AlR{kD_oEa|BeI%&t z=q_I(yALY`HZDh;?hL{ow`g8bxC#$~a+Hp2|J5cSMM4zPCEWXemkI2##I%3=dc{Z; zNq$*)SICZtiP&1IHux#*&d}O?%qFK^-aRhpbM!K+bhNf^kJs*v5G{p7R_~f==eS%( z&hSa5{LL*cUsE(PBFv1H5woN|J5SiM%)VEL%{!Z9j4q;IrCKO3?IWUM?Ht|Nad~H*A1~a5ORk3-tuwFY@G2tIbwD zGevXX|4D$m(X~Ow6%J?`ev(M$9YCRGHAB6aGLmra~<=6Py64T3q?-CUnx&s5!*La2FBk>v14h_ zzzWtl1m{q4z^vcl{+TtWjUR>2!*cInqJ8zZPW`0{d140G#zQ&)0NVep))<98Dy)vFynS9_Sz2>q~E5*_PYuWrr_cBLiHq~eZhNSfsIq|2sE<$yeNp~g-3VJf35AH$~zqM|yr$AP>y zhwi*^LjLAsMXqjo-Vmm`zNlMEJ8NOIr#1xSUuKz^i34z*HB7|(NoKATrJ<+i0tl zK?^&Uin{r@(mioB{wn5FPrQD&2*S?PXQ?v`hF=d=Hl$2~< zRNsY_h@76d5E8zis+*?B1AMgl9ddle_t|S9l08pvz00;evKSlI|9>0V)zK;dj+X6z zBP0%6u6Bq}XecLFR|-0@HR>Ae2I|jjR!!QjUk9nixc$8S^%^6VUmyOHClC*gYs0}? zpA@mn#K1a1SUz{WF^7M|AV1)xu;DdSZ=t^?1n|)$=r-nPPB53>f=S^lMI64>VmU8= z<8Ox&zbCx7T9{J??=s@ce0_mjvX}l)ZtK zG1z-c2DdQku%QswweyA7rWFAYpgJQ!->KZBB1izSp`-2h_pZ@Bd-tQL=u;&!o_UOPV#7(CFkG73Lp@+x8DffMz$MA?O$!=T(@rb6me)%2h!E4Xh*&hD_q z6BAY!rT8%hs2W)0t-VZI?*BcyP#O1@O@L7a-iLiUvmZ|DZmKQrh6j%$QGkQ)t@D#0 z#s6o2&)v_H{Nlm9+4(<1g;*r2|FvS07vh*Ls^-zW5 z*UCsAszn*(MZng9>(k@Um%l9sBH#gVibJ(j@dn6qNA%W=TVaQuH>rgc%Etlz%c^&S z$pY&)EC{D|H>QI2hyc`Yp$e|WhWMZF3=WqTn~4qG)7Pxj?pcnedffiv2K+*+48&zRl0tgG%90YW8l|z@=Trm{WjJOoEYB$bYfoa*k`wXmr0YAhiTY9Ly#U9&Lg3B~ha zOZ0AL#@a}Hwg1I_Rkh1ruN0M_{{e^I)IQ40>ji=uK(ezENe@Ifrr%0RF0qodb-l$z zFA47gP_vC1XheuZb*M{Mi)5Xh@pvc?On-nNttOj6 zaz(kuDot-kNW|c%N|=@tI$)LWfiwMUjfM>hFnh=#>U`0_+Mz1p`B3I@I`1?A6cQ0} zjs(o%kALfWQ(?-kh=cutV!>kc>WD2)g5T-lP$%(^nWnneWeSs}Ty`TN4o#yxK_y~e z5Gca)K1$kSc2GW~;f{bK!b>_%x$(QsJ&fp~v9cci%;%sQ@G$px%RM1AVJ$X^u@@w8 zSlN4&anohUTjdlP|WY_fMlxouT z?JM#!*~)KNM=d-OFZOQc%bpG5>0kOgQ@^x6U$lUh1oV<-kPyu=<72yB_~)DUNLRKp zic*sj;2ZSxebq-O2%CsQd!~t+YPzC;unoKMog&}KlviHxDwrd;NHWaBfONH3=#xzk zROe3)*{FDq{@ZXg-a0=YIY;p%x&Nfo|1#q?1vn~0_7gUpRdDOO1|28$pbaV*$(HIt+lP_v=y@m@1O`jaZAk=%$_%Dt{ zYqy)xEwLml8&)XhD-$!oL-lSjDU2-~o?RW`m4U+g$N}ELAh}!>)>OSdOU;0(5Qft< zQ09gM4{`nv&1m=9tF_uAlT9TAdkYi$6(_+#r@{4ggZ*`p8|vGa`(~LWnBbhx32odC zPWv$tP?J9e`IU$Tw*HMIr&MY(x=%FVL+;qo5LSppV*ca@T=rtoNx@5?2m4bB**t&E z;IRBbiCQL_T30XD+QMJl-;t_1gQV7b)_WosDanKJKG9k-?NkH^L_F(Pofo?}B!)O- z?Q47EN^!IBn+Gl)l;8cCiJ1v?Yn$GU&kX)VUp&9XE@VGnm8TZ zHhyw$SSC^cVlkJE^+~ZuOaTQkFJef8wCtSe1%2#~GT{YuoZwWv{@O>9%j~IFHw|Zu z3wdQDeehL{v+=;ft09Ph_v#iB(xMC5h!zk^LnfdLYAbJzDR~UhnHT^`yIj)|Sd!q) z?;+FHEwUDm#RDJAVO|%OI&)*x$Lx6dF|=U%DMilK&o7K-K|FFbxt0#LeScqj z&j8b6Y|@hYU>~TQ7DBhK6;~|8_;6;^f9Yc%FhfR{sG{LsSD1gRl);7e52+4TnI+k7 zAbi96tC0LSAGLmRS}w+XUHqsRaC7E(B5yv-W@NP?D&dd+8Px3)@0Fs`G zG|T>Eztv);`KH3X4yw=I6nyaM5+LXZ3uLT|h0svLc~da(Qq&6!o@wBbTo4ocPB+l} zkKs_nns5*-H~8}Qtv1EtknrU&y<|If>UiDkjp*>Y9;D!)N5cH)Bgvbf3R`5j2x8B4 z+HeDsQt4E_4ko|#Uhm=>onDYtt9SU#zY)8(-{abMJ_QlPerfaFv^Yw{XdCBCp8TXW4R7}1Y#|8ZL3_(S|$#@4f*p_-aN*m zsloKmM2*B+nO2wP=3u+~G}0o7pJ=}`*sX`m^sU58?6dMNx!@2?1m`ttcXDSq&D#E2 zXy+|z`d%QK&NR~SHFC_;_Yf6J=ryLqY!ID@YJ(ODhwjJjzmji7aL53@6JKaEjcmz( zU{VcVJ#3memj`2&>)yeb^qAeES6GR-`lpcnw)Or#h5u{TMmgmPxL>}+k|=?R1~k9N z!GlI>>3y{HRvB7>uG-TP&G3PUZdNei1q_9Iv~9?rDhDp3BNNWH?NhRg(p&&uuR1di zz;sY#YD!PepNR+r_8!Li51Yj$1frx=OzLWP{75Ykz)_WkhOheENR)-sERa5M$}gc@ z$Qj=o(y;KZ^ppScG{{JvJ}X_Zh1rei@TCnr6~5Y(%}0fqQ!_>WZ;dResc^nx zpWHd{wd<`=PLn0M#EH|y1?+s9qN5wo`UM8=Kb6MlB?DBYH%*smB}LhSrNkKIm6Bg? z&%%m+&_drMMnXQw1V6RPTE9m$5OzRQctoF(a)NbiNu}0dQ6RJ#z%26*RVp~pU@Wc9 z_FwT*HN1z%WBFy*hrdRb|J&ry?S2wB;eS%nq#}UU-bJDBP`4@#>|>zw!Cvl6r#a5< za8d;*j)_>hzr*eFqcGylfK7uZ27B=Zi!m0cRNMKeb#dKZWcB`ki+bOT> z@ruO(>kvWu?JaL>5JDpevwePb6;n);1b+XEdb1PLydht)l-bI&vFI2(XH@fQjc6OtPnC*tXo%w|O`{qTe7(VX9s zoA{g9m2-wnMAJ~Gl(pVT_+U^oplmki#7HS7=;f!8ovg#ESA86`94>r)a_Yx{Mqx(jN`-i7sVX90cnDM zW0qR`Z887LC00#ez|+%H0`)VS`E^e)9G=WInKSl(DZ9OUICL3}r&i-;2N8F^HZq2u z_@JS|DqxLCI?9Vam7(gRswI*ppC$41Z7gipjNgOpx7E~AN2%mV?C5DGI@# z&Vs{u;}f(i1wWn(J~Ve>G;8JIdYsWLxhR%apMtBIE^-TCSpv2)dXArYEBRwQuPb{I z#ItnLMQg?9ybV_fRrtM&E@7sw2{RTJb}ne1h*5G_iXY1Smh=8F7349~`8u1#9#_`; zZLV$-z4Z=WaRY0~(pF2>MOx(oss>Sfv8wJ2^W=ekxT)}F=SOLI2-;dL_3u1>#e zt&ZRg`;iM^iQmfN%pD;bN<{SB{B0O`Y|k=q`VUv~dUJGv{==1Wm#2-x9jA+*XRETU zTcd3Hm~`s*_Ve@eXZ&97T2p#glZ#pZhv_HRa{}lzAb8xiM9y4OPZwehlDj;e!4nA$ zdeVhw(&|C)r}h34ESmqeG?9~=mG8f(* zMKw)L8Su9>C+s1v2{uv^Uqyb;R`xLXJA_8Odto6Ei8!kFvq4<<3pzh8WGSHDt)8MZ zLB>+!=7#z1N^FRV1s_rd-SA3o?WbQxOesKba^7a@Wu{~t&}X%jzp&cIqmMcefcNj{ z#_bT^QFRXoLv4V{$>;!iJ8B(Pg@R}r)azBx{qPm_qIX?c(YCBgR`ucFLx3{~CrIe#hUMC60qTh~g`p_DW zmXo76?Q}mO+q&@~rZLD4&z7wr0EkfC;2zVc%jn_AGtF>L36_cx3aTEDcg3a?S?1%m zxiKAH&upg$Q%d!>G z=L?ROy4G)cQsZ1`Rsu=SOav>~X}Ebzj~Rub28YnryQPJFI`BA?&0Y`?XL-x8AT5m4 zeU{8t_^47g57M!gCA9h>zOCdq9@(7V zz*BGi-W+-@{N+}5yHZ6UmNW0GTIqP`7jB1`pR}u&%&5gg?YPvf1iVM46Z!1!6#`TICsSRiqAi%2<%KL~ zE1xOf)uZBQQ={GX2_x8~yE8xCfpuNn4*9(KrLAehe9gl5PNyCAZSOx16k}wdA(L9c z;RnJ|P~?z_6DaqbK(=>e3&HIiStC2 zn3I2@K8q5}73t}VmDjsNQ|o{17FC&N@q6~!6p_$)G8`JFuLG3__IzqHU{=quwzhTzdVAzJ-5?4`CnNi= z-_E0QST~eW(`gF+qkqlLX4GKVqk`d14j9O{p3G-90K(_qk4*@X>X?Zkt_b_CV)xD8 z^P1hGDpJM-SOk3WLZoz8vMWMArK#7c!yGbtroOgYQ;GZ*&YK%P8`Yo}2F;G%+y~S3 z^;-a-30Hau{%ZbarAR6gY}eTCi0IdXUMbB}>IxQF=T4!WnpO`Av(SBu{@c^7bp@x^ky8-LeR z2izywn;kca*IQi=i|q^&+Eu`CC(>f88wmWuK@f{!JoVSjcd-zL=JEX7owFHC1Ube! zrASI)e}ATUIQ~+r>-W+Kc8>FvR1awAku-X|=O`Vn;AYUB8k-fKR{fC2dHwUsHh5X? zHtF{EM;RJnZHDmjA8$@*K97Uzj=i?Gbx^XBw$mB@#I8*_j6OA5uoBKt4or!>{i0aGVtO(qJo^E>FIN;vjZLKo9( zbjp`~rfFVya1JKmDYq@{q)Ek{_N*y}JU<=W0#Qk5bRWvRwudap*H={qxse8D+0R5j z|7A`6RF$Q@`urAx=>*C(;>%RN5+Ltp*){seBeJnG@a*<~=ycwl;ya6+>QAtCSdh;d z&2U)vL|5y0e0V_3W3w3jU8UDtolvN{Bllm%{j0Ya<3F6t`I1Vbl*>NE|VczJDhyd~wyKtaL-`1};B6s7Yvfx}rc z@$ZJWS9irGZSD|jstAw#K1b-njW&Ief<8a_9k!G^>0MMjj4`_COd64refLmK3%t-n@L;CR7kTDtTY6x zN)iYh95Z%261~m`Kq67qfVa6e`_I9w+`&+I&_q+W9C*~x=C~5o3Eo^A@H%?V!`CMH ztA_e}NOA*t^3NJo3TJwMXy^Tztp1u??_%MKUhVIy@|4jGDz}lbp{?7DENLD-~QyqH`^HA@H)&< z^SIm~nyofy^BgavN(%Xprw9Gyb(PBHb+wdwyjbUMX>I)s!Nsg2)}>i>_E(NqtP26l zv(kEIiB4vw-eM$y3aPoq@K44f3qfpM-r;DTFb04%6RrQ(#bSQZWsvaILIz%mME3y; z9~l-I7Jw#G%8BOp_dJX{x&2&k?tJ1IIj}et|KRsh-sujicB-{`h{ylyPBl>9yFu(! zz}?u$E}=&ixAk!5E~WF^J^;&=HEU*U4fcU@?f+xyEf}(DqBYQ$ZjkPhZfT^YrMtT& zq&qf^v^0_u(o)jh-H3!pcX!9#eCM8f&kqop*)wZBwFXrZdM1k5ixR+Z$9X$<)2h;L zM@F>P_M7Lkto9(|-CX8IUvTO>W8zFjeS~$}7+u@!vL=A^?Q;&}7GB;Q=5c8EFv?k_ zTD}AiNQyTjneE_Wj`%!gkg(M*sr5(r8kF>(h3>hkmP( zlq1Z}CqS>^6^@|v$51hHaC8kYfeGRcHeHG1AX8^`FgE!wg#{{YsROWUzWEl6V5V0o zZ<`oohdfYh+(!~QWgXr2uz@##DycvJ>qdbA3VO2E$D`2hpDg$xG>nYgpk$T8+7J3d zJ)Kp!EAKB1`Q=6oX?~P%i(;ukLAglwS>piTFldur&@B#YSIy7E@*-a}>y(>n-ZNjk zEoV|38Q1a87HGRijiJ7KS2v@x6W!bQyC;QV?_=P{fO+hl2+BnWilSJSj#xlQNn`VC zzN}n{JgibrdLeCr|KsA;Vu{-0p9<2yc&xqFTzTNH%WdR9bp@*6`kO0gP zgWKZHVA$%pyET&fVzW@Qg&rei#zlns$m_!+QfDhY85**(KeO+OmzQUF@W;AN_xNAy z(CX)Zw^omy{lJUg;XxB}W2f{Cx-3*44yu$SMhwH2P;Of6PKK}$V876PgH4yfpvQwk zyqZLzR&R%z#T!TIvXj7FWWPWm3t((uh_0P=Khc%26^g=^jNy~Pu$yKj)=ne7S?rGW?MiTJ z)u!F_(LnEpBWB~L6RRE_FogV56Q&_UG8PN0G(YR@37afX>dY3kXg;M50$P>Y&jaN0 zw}+hBy`!{+a;dDBIl%L`dhe_KI)+xEA>tr#-ox`7yIKFS+rb}&@ig`gmjFGjic^TaLo>I@+0h+Q+%>@e$QtpdS{lqMrIpD|I7hRUB=vUvXBbE#;F%^UxtW&o1zgYsU z;bv7xR@DZlF*|~Dk08_e$@{-`N3sJQN*||9u_&5I>^jl`_ufA`Z6eUd-rHi_^fgnN|-N|&f<4N|JUqx00agG z-nqs!bl-u3;PT15%52TextaAd2AG-} zNT?!M0UtStVKkE3)tP#}cZmefI=c=t(gS7Gx?V$4`H>jbD6!mQ&v(HwM&gBk4Ti3kNG;$rwMwOa( zfq68b5FHl@sbKm()8W`Z-l_sx3IxsG+*#qMT|G>Mh08P_WhFfMXKKK3Pg@Q5P5@7RmE-`)!Pn##;}6SdsL=*4C*X$05lK!!!7%Fg=;BlIZ)CL61HUErns6 zc8>BV@vT=H)7w2kyN*90&N4bIn2WU&(T3Y|9`F$+`#`X!;*7n;6_th~8%_?ilR(duK;CSbiOEi!lK|{<1IBa9_hTD4a1w!%AA?XVmf9{b znVJnB41YdJLLBJ~pbgp8A8coW6-B1&%reA)%tSl7q#s!lWlm0fS6X zo0j7(5VSxg?dDI z6q>rC701G@Hyh$K^94nH=HDslT%XrZd!N4_#dFm^$b^{vR8#6P>0&s0c`!qp_v|~r za?QRb{f#wzKe9dnuZZ~7s?zxULmDvrY^U`)`}KH^BFUtoYDDqTB_uqo#(7-=y&Nzk zeb6tI|CY_7-{|N+TdI-u%PUDnKg6ypfp4rohFI(AZYRg3wYAkSaB$+b!a~lyT>smu znZ-m_2CYH!O-&AGco%;6a#69f?lLztrmYaJ?H45D-NHnrz(0 zko#(3>btKY!0Sz>l%QRDn`_Pl-gX69|P)M^j8mJaPdqc~Q7G?O*D$lj= z5U2-@H(M0<`R~}HDT=8&LXAh4!XucXVgcTl#@h%oUEI;2L zoXPnbq0;Oo0dR6D=9e`V^77oP>>t9$UNFTEKE~8Ml{#9U#+dQ+q{qF4 zVz%@Juy@wxzdc$EaqG;=$9)6pyolUqT(R%JHXizJJxcF);aoPH*4`gnD0TP3te?^0 zjx~`O45O^A*-!;8uoG6rMD}*LUual!VfZh+m52hkKkKr9<2wDtEPB@8i|1vhg^N6n zOs&f_Nx;WjhW{-sq5jmZTlBx$pB=(w()1;pNR^`=dJQ3_PPKTPjA&IFlByLe=TZdV zPh_(nXE>zY&M3L}+>ub)j%RMNv0`u{LtpVd#`;n&HixIhgZMB2H=LkX=0 z;QVj7r?RF7N%fjW*&q(1Mx^s>sZKcx2Aaik8vCW~LP86#Lx0Oj2o@&Uc%wu6njsd6 zUW8&%{>>N6$EHu%lEX^r8#%5Z9uYB6=EoFx}!eps_b;K_y-pkZQK-aP?Mqg*2(x-!bX zIdC)b7=J(EHJ(3tA+&OGa}gMkjGHD~09RXhO2vsS%)`Ui`kB-@>iMVre3gl=ghX$4 zPdJ7&o{K=BGQ(F$h;pH|t?e&z5r1D_@M{G!<3+(h;_=zKrw0+0PL>#s-F5f>RAMmk z@u69*Qq{3QGRHedvj+5i!*Ah8wM2k4}uy3$2 zS-WJPSp6!X(SHQ>O6y`EQs{=!pnejr)QvuoVaVO8hT2e5p9I*CaNc!dH>&=&uBd=L zB&JJ$VzjNGhNMVBmyA3>xq`89j)2e|sKlA+tr|U#y`V8DsI-$+(Ss-P;&ut6j#&Ht z{x9wRq>$vRcbuFp_h8k62@4B*pWG@4{eh7hLYah;!DAm86A|I`=}-BBbbxC1Vzo79 zYrTWCfA)IiAix>rI>LQ`w=z{yUdl*cnec}yD>0b{ky=8wDrBS$N4abLLhod`_U0XK z5?xAoQr`El9!v3zLX+0kce_(C4`O1*)n1%Omb6qD+Fsv=zrZHv#;@J@+WhJ(DkrWF zZ@?7VPF;gcqru-DU`fgK>p8ATxthq_Y0TzD(7wx)F#s|~@}UEZ<2pv+b>xjFv}N5J z1i#4Ta}dh0DJvX@#ZZsE7ukUvR6?7@!ORu3u2}!Bq4`7dJ}5aHJ=f3-j;Ih(Bl|EK zmBg?C9XuencfqA~w$lYesR$Tkjm<4BD`lHon23F1&~L<=aw{ueEE7BMve`7L+Me~TFnIN;N`|v-d%Xr zm6*UiB%yD6veja$!iXHN#l35B0%MHdmHr_Vi!oW6l5*bCE_zVo8=ISjTU~a>vq1z^2$iJzd%MZSX?hkn6s`|v4*!gu0qF|Y zGkC6;a2Ag7=VgS$AncbEgCXpILDem+_CnD2;2{%^#*K{)LWK+O2^=fe;j8+D?dx&U z-ytP6&jSdbJL60w0rbeCmm$NWWWaJ`VDiQQRcDX5vZ?0ss7?dAVZ-O#3~db5oKp!| z7TeDhKe9Dc^Hc%9&*dN6ey}p>&LyHkdmp^qKORQ8iZ?M=i&&l+VwsqBJbFishZh@Z zu#zwUmH#rJ$Mfm;^epfun=oh1{Xc0gc=?>J1@1Eu`UEBX-FlHKEkh>BLIo~u6_fA1 zq*b7vy2A4;0N>wST*j@IXm-KDCiGi7@ydQfvT{9?a&jaq&A4!q$*}kL_vHC`dHR`I zS>&4M=ZLVO6i|q{V(;F)8}xd*zX}{mq+2n6M<7U+8g(HotnFYE*~_=!#&4vihUt0x z&J`C?)Sqekmy-8Y&lFH+}7q{1J!v<0Ewq*#x;@=O3?& zf{KqskE^n+6I)iFSrwaFHr&c_kaCnp`FwW~A2nQ>7X1Tpja$C7ie3 zd0`h(!-v?rZ4uKME<-Crp?478(dl{PZT`^i{+JTgLOy0RbQ^pAGhP|Ez7>SJC&`n| z+9jC7Y!o8*Y=%Y5gqlai(vW6is%R}tstb|CZ03Pi%zy}81$3r%8c7F|Htb5GCnY7H zr8d1M>F$0vIaqv%FH`J#Y}ESYXr^#YQiY8ss&AcHw{~~^VrK%Q!EQk{@)9mk*^Tmb zug`r^IMWm}>6R*~$>!$8Mu2!AKJe zgAx>ux;w(eGFY2yC%|9&nFYRc`3}UjU$PG~cRE9!xYw8m zO9zZ#?wQ8_ew;Z z9W}cKmNxTCO=L3MaPqq!&{}KX)cg{6w=7)M1#8jgEbwWAs!7%~8ft~1{^oLnOzcBzGgS^{hfg|3TZp{kGA?3YYI`GzZkhLqp?dTvJBWS|=r>;p+4tY5S znM4CrhhYbupifv@i$~PceTa`<2&Z_r5eg$aWQ}v78(R8gWq>?iT8^88oOC)OP!8-zAt9)%P0I2NWl&ia zj{q_Sl#B&uv(RZ}5~{W&d#RAd`s`1n9~8U`7>zgC{&p@fF!Q$$X7N!dT(xyf?zthz zltSFN$8ssFNx{M2Q!BwcG{k1q?h1wgT>57JU?FZHzHZZS8oQY=aC_R-q?99E4N0cq zTVD-0Lcyar+Ney=2=k8Y$RiOl3;Pb-J(#ItE%DmDmKti=nh@TjVKK6|)6j2pXtduh zU{>22g+PBD!o#yRv;I;618@8k2$RO;kiEM2UTMO#gU27HIiaTJ``V>_!E|uCS zn}+Rl9^BDfS55;XrJcEUM}#?Y{#TerJVL_e2tq>S8^HCGggpgQ5YTMX37bpn#Dkya zo<6*Ic?~)K@g=s%))FDW_9TE!^&XW^e^pa;p*-~zC6TkU9U%?Zx0u$I{|C1MDe34!J88yvw&Ve8Z*@&!LP`SkTqugupFX%lvC==kKn8oV z-0pW!>;L4xJ$3+94lk?YRZ?8nrc$Pp1bg^L!3^A|i-1*kv@K==_s^HfT z5025O&q~;ujs7g3tf8v=m6QUt_CiIW=>Dft%wG~ji@g7uxN2IqZT}z&hu_{!31?ue zgeWVOvv-sx8&8=`<|AB(hk-bGKS2ST(5o|YM0Cfm^A5;sn0t$?y=DGP8zX7DoDfP< z>JX}kYa5aTk!XFC)w@dV#uFW`8iw&7GBhJC1}08}@`j0&Z00p+kumX~0c@hMZwBuR%7c6n^=E{b%YsLtRS> zE%|7;gIMuOY4YG*>2wGyMo*!9;KaWc0&YKm|EKAEnX7Rg+m$=t^+n}{(C|D|8(&yM zywZ4sm%(>6@u7=5yV73yvnSQR;BCLKf8m3DC8`G=ABUs9%-`&0wl0H*U^RV zl&S0uxn!kd8Wm2!ptBhML_qN;>+i8Cc#zf4*7Qe9q|I(H5MNovl*Qolr@y?LI2IA1xX49wR8U9F3~uX9%FJMa?Sp0|r|JBu$2fcwH-sTm9ji3>}?;~^15EDC_=Qi+=c zZOB=gYZGl>)3>X5nG4)s0P9;?&HJ53_5odDfSW$q9!z}d$zA7tS*L@~9`VD=95kN@ z_B?Ow`R`)8_2~ewz@+leqgMCqN5BhdeOFhSnJo%#owFl>^e?ZjM4&`L?o*{# zi)i?_fl8!uvodBN{hP^kI``l$qm9KFhUmGoGx!W(=z|IlLl<;FpjkhnF!^FL?wyFF zQH%%k@HnL7Ua)tK$rvg@h@v=%Q9E+7)j;5zR2Zb{iFR@djqh2VovLSgvI@PbHRtkx zWnZQ`bJ(q4W*0h7g2yJ$5SF1G2yXN+!;IuCp=9pZsnfO7FuSl z`YVu|GAaH$S0!;M-(-CYy+B zimtq+ma#n=cyjztRii92cm<`q$mwEx_pIXu>ick(V7)!IKFZle&)jeIuIk(E#zu(5 zug?aTq{8}+z9;({j~=Jr2Yvs&+`>fFf9^xX#$LSg|C$#-^ZZ!D*flIK*Tdj(!vTDg zQz>NDM-8%Bx z9}$Rs5?e{q|LgPxq9_8x*A49e!MlVFQy*W>O3ATXourao7(S@BUcn-FV_`|NUkqW{ z8P653G{o%~e9LFYvy{r(_Y{RM=?_>{$v{*K9g$I-hGwu^wnw{msP`2jnw!0sK{y__ z+~~9+vTm$YJod_skKS={jeeAonRhTZca7>YKK0aR4Qg$xUjB{q@yvpXgu}ZZwQFZE z3cuQUiO()mh*+A0M4~?efv_(bJSN}{#CL8Tb_IWFc9T1 zA?B3_uXl&4j%g5q0s~Ct7sOF;j&^Ku+QS;#>{Fg2xPzW>l;+@ zbD7R3 zY}9~}UjU?mT_eAV1X9rk*H2cIzAiFz>Ajo9IL&B;(D1=fcwSUSHpnQ*Z(0En{q2c?xxAGkIKl(E^@l=P9mVf2M?J1T07YeivfOFu9>OsrNfjjEltW8)$DfMOy&mhhDN3s zpRpUXlZ5%*BgO*eRy`J1`=%M9YAbEnu$Zni+T8{VEA764v%gCk*LT9fezn@_%^f@c zcO=uuwX}3WX}ZKp>9E5a7lr3@2xCmVi8pK2BbJ3ZfqsPSJ=k(s_Mx9LKE{?E0e%!p z!qD!#fekCWl_#VqAuni+(FqfAKi+ztW4;qYV;01qo=kcM2ku?T_}&PJiy50*z**w{ zou9K^A^23$z zc2_oCnd|W0=U}N--!>1;r*b9c#>$k7j_NTH5cp;*i_7tjxdL{?XGhWZg|@k@1>BGP z*jSDn$~3tOmE-|OGc%GVAABkWg-X*b;7XbVzml^(zJW zV4A@9`E)JVPefkC;mGnUr{0U5!U11KofleHV5*wzM_o38OfdZFHmmuQ=Dn; zh2#R-%(3NrI$uMvW%~a&Oz^;vMAv`G*=e6Edke4OS^2z$VC;fM;6j3^@SS|7*g{U* z+s7<99ASSd2~pExJ~ULBQFVukzCUBv+K!j~Lt}>s*fYV%k;Ca~SDdP$jcO9FCLifeYvst8zvp)DlmjD z84kbjN31n%ap_kz2;T}+*d64#I!{*LxAtHzysyHb>iR<51tvJs z$egg#FoeH*jhP443tG>t8i9l^QEh@c+f!l zja)-UB^BM6nwi;Z1===7Q8|JC^To|n)YLYX0Wgd8yWakK6Gb3F|Y9_^H=Ki zBi$z|4g+KgY*Vmf$?;I1ewPy>pI>|mj*`@?|Nb$`C_y&WpPL={d^#_NoX0UvIn({MeXGx%>OHRwTKX1>NunA4UwE~RvwC2=J90QX4)ij4kZup?GA z=4|DhdVrpRX@kwhg)b!37w|vKOCf{jBjglhN_>@uF@Ask+{PQ!WRZcwLh;^A zE}bSaO_^PZ6Q?XR0~3{a9-X9t8g^M$R&IGIa=@^wV4I(w`Dp5I^*~v?EZEB1i*NF@ z(Rj>nnuI|;S)O6~5h1`OI~&VI;$JHR1CoB9TvY+P+tl0JrM4)jd_Za{C0Y+n|<_lBCAhmJ#$JG@k^#Dfn z;30{Vsr)s^Bcgs5eeE+8X6bo59wgDowXHUv*8|`Y6a;~Q?T+{JQsdug1o=KZy5qkO6Kr6t$Wk3#fcWzzt+66 z`BpE$#ZF#6Ix0JRnGPcJ@<=Fv#}bs9l_e4E8S%z@gw-&JMxW>E`p#wXZ)kF6JKoUy z^ECuyW;_&ybl##iqee*CO_fQlS*@$%3`9_cVqnSAu$~ycrDFh;w{K5?a^yh3k3)vVOH_+ zRayMFH*9J`Ti_QLuozA{1tZtT2Qx)Vmj5mK&+DQOCgrSRa-BBUY>B0u5cN(s>zny$*I62`a*qHo%Ut+nzpKC-#^~h<1Q?I8j z^W?%H=YKGZf>2@D=SxfsfcEVOE0n=C6ux2dgEQ>oES_f#;wf(-&+*AG#^Z$_l)`9y ztk-7wy|D6;&~cCVmMpa^Bdc0Mf-Qc#He|H2j?$3tca|;Fvu+Se=WFTV2b%zVUuO0taCmSA(r~sz3 zXw%$|hc|pBTgVtcMZPE*q@Sas-{!AYfMUIl_FZmx7$F1|XBp5E>2Ih^xFVAs9=85h zf(@ZiV1`N1jfTd9#P>V#3dIR~<`;&1ZpGS6fA z`PcoRElN9q4QEWB6EdE$?3hWlqG9vr^;_FTuKxg&yu39Cn5F~H=mOWI1JjUIFRb1b z$2?pB^n@$>odUTxowD+swI~`k7FvDKajjyEzqor5`0x~R)}}$IoO$%OdhbxDHU+bD zj*GANi*o18spC8mG1WfftlGFaM-zA~IvXOjxg!Rvoo6P29Sf+KH;~8p+Z46UmlTG{vp3Pb;S%B{&m4FkPtZrN=M^uT*M%m=iR>?5=}ZS)%*FE#zz=?sMNV0`TpF~P7D zu+Rbd(s9eE=;+IpKYu=vLK2MHy2A)L-+10ueX0HYX>YorlH%Q$Mn@>#@ht2nR^~b; z{qAHC6dcO$Yy9GZV}5>m^f|y$`?cI|tJP(-HqB|Fp#k>4pdSM6lgof~YLiOR4H6QE z&*x+PrXVoiAooP#HTC;XSWGyAdzKJWt{uFxRG6WP=z~z_H8KZBIcseNLP$DHeGf$F z=dfW6y%tu0$^gSjY9&{MKuQ7@d`4O)B{Qmc=rEQoah*XJFC#PR-{=@jY%=tKVQ(;z zO-C&({QNaA@B>_%I|cB@1|Li*yon^>b2OH6c0SJrGe*L%2CBOW<>S&47(ci3l~0-e zQ40R$lG3zx-}ewkJtxNtOIS}&#LNi?Sa@XcS?iy=NHuTBH=;2s z63{zy83^i8l|(vAz_XX72X?_82({Wnc%0k%Hf2pLb!ok#$-oPQBTh>vNW%~ zn7_)W60m|7Nym{j9WS>%d|+?DMhsC^ZUGLk5V>GsVZp@g;k*eNT8uu#lN39+4lGHL zIY!?agE4>%4mf*MG`NAHrGM3)w~nu>0hwL{@_2*wis7k_c92%iHkuIm^Zh0gnXdaG z{jGe_FwJA#ew|GylFQCCPlpk|KM50^eCN;ARnwdyx*dU-sh~Hg@cF9HZ-o6`?okXe zG1Ho@F^@9VZgc_`08t|)iW)mpH8H|dMpErJuz)!v8hB7-=xDm3(d5|cWS3~hI zq%aNvV);M(wMek+^&&woyTO9Ft(R2EKr) z87D`_FQutxa;chmjZ;7q@(=4h0O`Oln5PuPxw<7PWPzD^rwVMWfm> z>D&c~!~RgeUO_3JV8<$YbEg2koMtfh?{_Wi$$o$7zRuud4{&=7FTeEK4B zcg)Pp+ODpEt05)UK;^*K???|1w&a3>0%|&O@t!$IUDq;L{fd&A;*;Z5*1cLVNDzrJ zFcvM({$%mzKD<2B@ukQG;di7@qHJ<$s8^~XK(64qMA(#ES#vwZFsZtqcz7DGSAZ|A zu1Fc9W0(f&>lD#dNtHE`$mtEXbbQD2`3TH6z+wD@7p^3TO{($D`v1Y8Gm z?TkSynC!T~+~wb3Y6s*Rb+zwi`r-A)v&6#<+Zg@haeL!N<(C9q;I&#?zus>vL~I-5 zp3v)b;;@OX3tx3H%9Q@1THD#~TK+0AxuGzSq@ECS4H1X3W_*w`%nZEye{ z9KeZ(+L{_?N{C>qKWU1Tl&9m7Zp6;fWSfBd?Y-&he030*Tj_WTv$(zv+UN#Hsu(zE zn0a7SF9Ft66!Z*BE!r^0$}bXTjhRqi9KU1TfH&2!gOzW5VkCIud@JGGn_M3*YuVx5 zR+&;{U#cFjKYwba!ag;1PDg=j1^SS=I6!mVOTEzSR)z5*UNUi4O;e>S4GzVa94koJ ztY7`{Ez?)Fp`ofAZWO4BipIk&xSfs{sl%Uo$P+y#zjCQ*TMV#Q&pf}NA_indAQ?)l z%xcKW%Gxn8l?CkX?oy!<^AuoO(7r*$g#xt)SUBw_XA56n-&Qs7-XuZ+tKck_qhTHL zL;276vhP?pIkcequrQu=+T?1_C`` z)Z9d21#!OH{1|aS!bAM(8SNeY9h8?#)DJGtPGKAcCC^tV0Vrh9&JH>*eH?ab$peop z2k)|q5SgubNj3)Hl*Wt)FP{!OQ1vc4Q=nlTU%SiK?}hAGE_J;{`30|~>P-;|36AEE z4II2_WO;R~X*IQKt25I~Cub~zk$T%X*0b3%trpPFr6_6sK=FnV=k=B%=arR>_=9g` zOo5rrOsi^b5=bL13F^pDA_#U2BX%^vnAhigDdR66fuLcgE)-GfUlhj$is6y_Yz+cu z!fzyTJ3t;oCOZV*rX(Z!wSiYtF)cujPARBo4Y5LFCk7*Ns22o}!-G{0MvLqwl2TzP z<64>VCJO6&bh5KHAKv_Mra=cyshvQWYEEicT1`!3&5aW}uc6yZB%f4PNlg{e%8HVR zX30{(3Doh{o{C|35poD}DvvN&+os2|@cMnZ!N;BIbht`-NwRAdXY@EKtX5^&YknQZJa%nY8M znhg(59^2Fgv;?{cR|ubp&N|9ixuC&%y9j{N6a% zxw%zmH{ojmP>_H|gh(Cj-${^7IcE-iX683lJ`LYtXFEGr6;xFd@_+oGX?qI~1d0~p zl)iL4!iv$n&JyOZ8MdBg3i(`XfNsnyGdQ~$0H>HFm-^&jjG)Tq55oz3rQLK85lGkl z@b%Xq68$8u-x5G;Cii79{%u!iRb{y2ck1l3lJV0RRIQ^$I0Yi7z)a}QZ6a_PeRJeV zE_cNnNr~@CV{~f+z_0+I>E-#|ko|*~0@cNZm4rcCBv?Sr?gC*Z+0Ic^RkQ|trKP#- zXW$+3^5HC`&q1BD{ExyeXfDnvW`{hDev|P(gNA(1%TqPB1s}6MSr#$^h2OVGA1Kt> zZN~pw)%y0fJDZ^3($5dU@Pv?4_Vzp$~et`*YWQ3ipwNTWV0GzNM9{oYLcW9g=|jM?a@ z@ySWtvUoV2fF>Wr3k#Ey^A?X(huDgHGg6R|s zu5Rc@Ck8%hX_bHD_@OSurGdEtJii*}yS%2bM>%W37@eYQ#*3dyH;Z|?x1k5}0x5+9 z9{ldlxwz5L2r6}8{;nDmJfBJTvDHL=eRvW$&J>9|77s_}AYZ>E;zkAms<^DCij8DqlWmXlQT);Hv1TsHl`mN=o9(5dxJ%|GRemBm(Ztg7oye0rmCQ z9uOJ-E98SBCFxbr@Ax4dIhiMp02*Mew}E0G#1%F1$W~ez+=@MCnl#(IP1S~U$f>y$ zD>ay0k5-H}&!dx>*a3?*vD)29sQQ68v$J~pNjx7s(W_>=hN^(Lwl?31pR~or#m32r z*w=eYjnstMNUlCTt1b<-Fvyco9CX(bAlt*`1js=Np6TlM@YFuKK zkzl?&A-MYsOHJgkxkWb@(k@=@23DS|j0icnxriw#$OM3^1sWZ9-!w|<#2x=@>39Ss z>5U*blt`r~EW{AmaFBe6y+7T_0Sf8p=uQX)Jx{5?u!|W!UiZWp8hDD&*qa`0KKH_8 z>g`O(k!IkKv)zuWs^(p7tWs5Cn!pGNE&AM{uY*=iFr7lTDB&|IQgyYnP+9X-)hD&X z%Zr}Eo^T-dZ*hF@l`l_K+2EiffX2(wnuRKV4yS2YI6T#B^6uNNkT(}eg+WhaUlfyn zphi;B+S)G2;fNaS7+m!IgoKdHRCLtwsl?DTVnz%N9Wyx*a&Fg2Y-~jS{reXe79O6X zQ3{7_4J)Pqh8@7wU=a{_-VMf684?i@H9=1IfjzZyP_>|ZenuWyVhl=&MF;UwwuIFB z1MmGJnaPm;**TLab6WfiLI~@x4?c1F`8KqmC$lQ5P4K*2^#LRfBKUz74}o&rZBu0uBTmA>qtY{T8Z`rxIXPdy;g9*qm z#iY*w`aFyNm&*x@1LXk>crfK2M+Q72fjg4O%38ZYw%ka`SBN4iyB@;o0C_7Pb$!G> zv8Zd4=&fK;0F*Gqfg@(uc=*QOxym53=7jGF=GN3nwFMM{ zyor6?Ao6I0N7$G++n@;|1+%!IqRh9q9t2`iPuC52(6qxb)YAwVG6zh%3KdRU-B7ZA z5D*&r!CdkoYG)z{YjINbICus8Qz)IFqK_56(D zL=e`Vp9it-y$Uwm)N%MPkI}$H(zgxJ?PzZW;-KN=s!B~E373!W-N(}c%cSGZU&=jU z;8DLQDk!*R^8ohgz9m%9fyy+LmFVCGn1cd91SpMo5b?Y2*5b1n)=rEKbqU+rzJgN} z9(zU=_z!7l2pH>CKUsv^fVg8Aggh`@@G2d)w|E2(8Gkr zYj&nEMfbOaW@mT`S9k(9H@CC6EK=d9TDa0iT`fKq{5aTxn20AWi4z zPqXzm`ZNi{2vK|3l$RIdw{20QQ$r0-knP* z@TgL%i|q~CW~^S`>tQ)Lt2fHvM5#ZCpy#B=E3JIhL7;O{DG1*{=LY>}88o>J05gRO zR!PapC{U|ib+%Pp9Nj$!b8_4spgHzN?f=1%bqgi4`oTX2l08oh;|t-yGM@U4Y6H&_9Hvc(MJu7ZBw^t#E_T zXv7s^zerNhLvOBR`+q&N$?qTHM0{^o#ey)PbGJpI!M#Y(Zu552|Nn421rrsFB9oRW zXdF4a$ZFY|fq6TK@oo}BEwPRX(cS@ydT9Y=CHU+N&Ci5UgUom{FlSwr%?<-p=H=u1 zf7U2m8H_)TjqWvPkO~{p=^T9tcn%K~I4}E|!jy~DnYNKM^N>oOFsCCcOTcAM^cwnh zy}yh!GNw6u&yL9!^=SVV1{wkp3d0ycwY7EKpTpR|XOn8^3Xac74cBM?WG8&GvC(DD zK@*MO1x9_1S`h`Xu_fSP5rOnyX!qBBkuV6GhEzq!mjO7Bj}Z_ptwt7|plBua%-kP8 zlKu97mxzD(@FA7a%?UgUqyP2ch~54DnjAqdXIF4McIVYO_%0j$Y8n1|xRDbAp88{| z-A@eZN9fhkYaA)dg*d}Ao?oZ70tT(9>dzB7K-J4mj_NldO%3^5sW9M4 z^1;JV1nzd@ow0M_c{D2d59t0P(DM!8CH%iaki212!nMy&T2*c30PvTcpGXhgY~lfa$j{_ogWb{?$&her7BA!N6x7Phz0Q2q`*A+x^2n&f577x zr-k|LUx!*VMUnhy)Hy@A_7OIJb;kdhNt&7I#2)IPg^0G02^kZUM8B`E@8eOL2bv{a#vEry*nXi?H?>?`pMfc8$mzuZ2JGQ7 zTG4x#QyyA)2+ig@^Ltmj(+lw%N^u-ry6`dhxB=`WV<%)3%=L}nn2r85mjs-l8jiOj zy!cj`nXBz~gf-LC5C}g%zYcg#5XQ5Gh;=J4=-wbE|JPO+#YR$CfOg-zX|wCY1uf7Y zOC8u)i_9VaLj(|SxJ^mr7hIC@{nc8kcAjE0 zgk9q+FOM^n#N{xD4ytP4D-y&9Hz%peG56P3OsyV=Uk~nP-y z2V{l^Pdmj+o!SI%Ghxa*!2XJ^pSb@1-~Xymz^e?^+6~K%>c4<1`lJuuiSG(?6_fUh z>ZawOR03M8us@{NeU+4?d+=CJ>8WAe3kw^)?rS@XiWC|?zf!Km6qfv}WCnCam56+> z{Vwv${(}C`RWF2Z0vu}j~5fbrL)gF zkb_~Vn~>r{=eobL6^G}?y9qE8YgtrObl@*9+g-Tu>;LKPE90`6Q?rLy(Y=&RLKD_nrANGv8+Xoe#&u0q*DC zd#`=1YhBk`f?FF6g05S0p!>U66x2qll33QKTNlxOe+D<+X~;tk}1U z1^RotdhkBya&)_?dg4`pe*{e7C$?@*w4 zg`CM|2qG2>#3#RJ_VuyQpd)&H(H&IKo|7xLab+}-EeJD@+ zDzw?t{;QRUb>SuT8w^&`d={u(^!WV!)l(1snC=K&B4kSF`c~Z>RBF~r$lf(T!%9S@ zt9vq1pjX<2%aV-2`MQiy?GIrvgKU_FKMq^l(Gz4`DLe@rW${18LsQ>r_vD9!CktZU z`7;?~`{-bfTi_R#!1krh@LpF#jfT`ogV%!ATN0OZszpB?#!zm)gYxZnZ<>^I{NXHLeR*;#?L??G;A%k*!LF-*+_>crx1 zR7uQCsDjSX)C%jhGKD`{xYq55T|$BnYiFUdr>G+@B=zEJ`nNFW@c}Zvzf0e_Dz?11 zsu+kN2lZKCZ@#4mK-j89_`4Jl($3`@}Ok=afk*TC#q(D&Ck1(bu%fjkmeJi z3m5sK$l0NlCsZz=JwL8AP9r)!a_nQWPlrt8O-$E%^@{6?@4a&Tj`Kr`=mhpS0S+Nr z%S4QU!2vQG(Q{<;zDhHOZ$nX$Vr;#fW=6anqcAq)`SxPomxw=TzEi$e_DO(&Z)Pia zg=CDDweD4DUylOR-%Zu=UaM$RwLB^nFr8Bn4Gb__n5ee=tEfY9(dVqi4C;>8$R!Tm zq=vU;4j$*+VjxDn-Os%zw6u7$K-FSqp`&DHTTYcz4hz}-3Kc--Js!92#FtRQMfpMy z75G_>A7*4^W8FJLqlEL-cVr-edEQDr(v7Bi+pA;ISqtL+XW11Sv^hgdFQIyd(tn~5*g$c)QG z%vG(n;o)J$k4^sAZNfb?3dRpX+-ILZ50DTy!X*Cq>PWRy{`uwwL^D{e5Ahq8;(-w_W!gTr@gJr zL6_z(v$5>~EZuZVk_wk$(GiCVE{o3P|IWtptoqXXP+Zq%EvCz}LW5*%F5NKm zn{fe{@k8i2-=6-1I8S2_%qw6IXsvcR*q-$tDn*cs9r#x7b6BrOJjOLry(C~u`Q`Fu zvvO06SZk3A<)p^&GMRY&2g7enXVNJxn(wEHTe!%es71v>@hFF`kY{C)zBm;FSrt!e zYRUL_3MdF);NTP!WgrHPqE?|hR#0>FL%$s08VmWiZ*H^KxnoGvDON32I-+AC3N?uU z@!tLoyG+FKHX|cr^-_G$)zMmXh5)J@WJO^CXZi$M;&s$*>IJ{rlYV z(4fk#cX)WWDnH*=3e^HRq;Sktw0u?Qg~mpvykhbI8t4TDoQhG?n`F7^(^?ux;t*4M zKc=DXv=@L&_Ra#4v$;3ot$bhmoq*A2LaFC}-fnEpayZ;~7|O!tsjDmPY<_2`6P?cm zQOPkwit1Kd-!sDN*ZqN8w6?Jh-cpTMdcwD~5wSuuA5%Xr#*+Z$(HSDhZs-VS1goNa%&hS1^qN2q)8`GVw)CRihL=`|DXOxO-Q^cAnw;ml5;z_jsLLy=6M^t*#_cyb2pQP-Up%a- z(MM*M@$3-fMuNO>(UoY(5)FBIoP5rGnyMWkaPE!pmj527vf$;xTEb09G>!eyhsW%2 z?>tCiaEyWYjxBzCV0`=ph7uf7_v0N-v7I$e=c1o8P5Leicvn6e;>VG@2e!}MQ^Na9 zOOO6xC=}Q-_4V})JrB2Y?m!jqDblrL2AFzW9-ULry#q5$-Sds~jEIOHS`LmJIg~po zHIC}#%Mvxt@6^%-J(@0rC*9IsFcgt)BqLx~*^W0Fk%T>WiFeOFiq~Lsr5ac6Iv><@rNRCzNQSnt`}?V>;@{(-T;s@)pCgp9)S8w?NY=-MhB6lI~KTiN3tEpRs&GB7eSC;V=PvQNZ6{)eb>a8T$ER17qr ztAi&A>H$Ja`=i1fd++BDrCrXuug31*za(MvW=2%J?Ae>s&_^19^z>n|FP%jhstS!G zp5LI2T#Sq?8Ly>z5lAEtDOAow3-uhZ2#LC{)BP$m;@)nBur%}WLD|eD>cE$`Z^u=A z?PLX%>UDmIOTuqL?TrY9Uho5S5_YSan3zcYWdQ;KE#QB7 zSH6FE*z(SuJIoJip4kY%YNHxKLuq!)@?!cVztN#ENXoK!4NATakb#?&EY=-~(+SjL zVkVVxEiV^%w*4sD1;h_#=Y7%#$;n(#)4!Q#F1?jK7#*fE@b+FXQ02AU=}vMIb-C>% z;rv@G+~7+Uxt>ln8gub0ei{L$FMnmlk5Fl7xZof4DM?#MDJ`1LeWPOqt=ZL;;2T{CE#?1?u@1~B_H`XkyvKh+9t zzepLDYiRZGE4tRb^`Gz19_(b1Cr7lXK`EaWHv)o#A3q612sqG|jmF%2CE_0BM#uZO zch4kQyun}){GQh!G_^}j)xUW#r~O?tJ@z$6LO=Ugh-!G}pnI{H)@F>S*>q<=X#olI z?E*d{EaXaMZ|Y0n&6l~@cX>!I#+i1s``%dnLAFbG^Y%^zy`SsFzrQEN*G%de04QFP zbTqC$HQIKUm>?#6RRm=?$@lpMK;Hd`kB@%|7EDQWa_0Bc1C6zvhyEbW@Hte_S;@b& zq`A9$jVq>O0lwdGYc~K?-AchZg1&c2J(6t~Z$}m?Gd_7zI9W*odg#zpB;&O&P%^Q# z+!C3;zW>>uE*+X=*1rwS8%*!zPWWE9T$nE~8! zGbS`NLq#Ucz9;I-9381Qo(x<7*&>I?%Yo=<(a&}XU;mOJ`B(bbE^jT2S6oDj(H!;p zS?!EhV%MTy$D_HCr0ZxNN5DDjtIIah8cHBj^)%MjmGK51YE$$ErB?z^6Optu=x0z% z9)C9_B^e*?u9*GVTfdk@)rlF^Cf_nvR+1vch_Cpm1?}t`85yxcw+B(v)2rNRP=cUP z^bXk@`$3LZ5f0bcFwg|a+`RcEBr?z; z=E}05y?#z{P}}T`*KHiBFFp}`z|cYlgHWc+r#D_8y{Pl(k<9qBjYyoHWL91d?2x{U z%Ug#oO~RH`REa;wvx*5_%ig?>f8%FiP|2pe{D4v1&D#swoM?}akF#&Gkm7L!K7zCH z@GFR>igB^982SeXJ8^tlszia$QiKYodk&A;;NU=$ke3$-6&@6CajY|9_+}z8S1nSj zt6L5)i$7=k^=Fd2Pc@eT4XI0c4Q7NKnWhx9PrK;MbKK%EAhS8H5{0aukdi|7b;74^ zUx6gG?x`;i%=wBucT1j4OO>CW?vocq69eB$@8k1B&?1oK;O@P9oIgO|n|Hjwk-^@C z`%>l_FB&)7lF0`WDkJ|W4XBJs{s%aN!NWcofO9CNuZp~KvPsUOG?QWNm5Qbb`(dsf z9xmnC=2@p17&>*ZxmWbnjzx!9v$@&K%G?i9H#S)tWlP_(>q1VGqcm6TpO7v5DSqu$ zC3;ey)yiwox%fy!9Jc{CJ8_E4Lx=^{KiE$S8W2Rjpf_zGSCN1)S%fHFO3K>OT0d)d zVCxp=KU(f?uG)7HWxJZ2&lN*^#0IW1TrzmeMCds5Q0ea7ehx?Y&NN4{bOEQJx`H9o$484LP70Hsv*XEh8M!OM_hkQYViQA(WL`?`k9 zLg`CMk;t7DKm6WKuW)%}KBk=zI zG?AD0za~kF_eu!VWeAoWuO$@9^ERd%o*$j=PiJ7t_!u)mf0&@jEXDR~-%>29Nr`2$ zcYJTyeaFE*JglN8_nWzVhrPJK#=5byM_tZg|66mA`(ffG0X^42Ev>uy+3#DX-78lI zFeifu@453KUS2?zU%11Q*wNS34BJX27Jv3>_1$}VcQUlx5!-fp{mtt{RAx*{ZD8Xo z?V4a{I^HK3nSeI4RcI{=0Rh3>vN8*4Cj+|JSaFGigTt`FN3wBj?C@1+s0s#P&uUD7 zDB$nE>(Cc>6?0In-TCNU>~=|@r)R8C{12RswU?MV1}vFsnK8;EHbZ#3yE_8*ztm3d z={yxiOb6Kmmg>C^1pcH;^Y0#krsNfqWd7zC2|k)YOdJ^_ZS7gF!*)A`_URp(UrY0# zHsJ6{&vN=<|LWkN(QMB?yFPP{P*}Jk1BCsz+<*zV4$2btRgfZd{;Q5+b*J3iFoONV zhl%Nb6SWB>8|Wk&Eq84nSv`(lMapvWO!0A9GNv06JkK5Lyqdk&A4a?MF-gc6>gbH| zyuND=FLlP^NrWyY?%em<=WL@xD??51%d7+)2G}I(oH1RWJ?mGOeb)fVTh-h;k?;0< z+Q*Lru_GgYKpVQV8zR)+j^8G}bcGU%F&QPImU1(9N5gT>IFtQ~qsutP3a^*g9V5A~!vK%5}8J1XaaM z9f(APgJ=4SS_Vgy-b*Lc8=!o_(52NDc|-VH38%I~Zk0C6i3MJ*`;a&iUUC@XFQ|7*>m>aK2Bsk#N z_^*Bd)cbr=>;yP3)ZlfNnh3hg^w%GoPD=#FT#8Ld);)Kz+F-FrcP^1~1%f!pP|^*p zc646trftG8R5W7rTpu5pa=9u1nml>4cMXXtH=~nZ`--`)n&;Jui|rt5oPzJQ8+`l< zFG`cXpsD+F?PRjFk6^%txs=bz z@*`VYF3GPzbiNV_L`y|w{h(_PwFETgZ-2v~$_M-_F}hgR^t6*wf;%(+wE!Rp^WTw- z`nAvbpIPP}>>$j7a+`;}i(NuXIv_h@$yDcw>iR}Q`+!1j3|-?ppHl?;PE&wC?v}Qa z)B|WbgZvyD*wf1X@Sg2#Rvse$b0~-zoaQ6l@L>FA}vmo`=zpSPQ=_jtMyHi-EAPuF3W{UesZ+rjwsE> z3z6e6;Iw(Cea&W|J{8(}-y*r5sh#GcvN38>)AwR}x^J<@u(x(&`=t{5*NC?)0r6%X zon3a5x+kuul25N+kG?x*^rcyRW9AMC31L3rFW0>CY^*jBhn9Ss@2~G2I%Yj6dwdA> z)hXoH#>Tl`8i|s^4jmzj!j6`PhQ{dE=H^lG>9I1Rn84kg^ZkRxXlL9tPQK#ZV`(}u z%Cgi{ycI5zt0(o2>ZP@O&1a(i+UM^Kgy}uF*luxM?BeAmTmFqNOUgnX@`_bHP~rXi_r*s? zs~?$%4t*6Ah8t0G3Ll4ntn>Tv<3|t0RSiPQux~=Lq)vlf1b@4`Ntvm1SN9uMRMU|r zT;{i@E)BHPrQV0!)5FCsOEf+{PElSqaq6B+#9vQNjH}*{W#d!3do+Q^C-eI!%ecO{ zg!sA65DM#oe5xa2TCMdhELq?4NJbcGc`)8v{IKtfoi!e+U3*3*pvKs5cX_G~;W4ux zs1cs%&1lQz)LuEkn;M)mKdE+L96^4Jv;CD-?6n@qQbap$E14uccNEfyZ!2W8;E=NA zQ^QOdRmjbarfXbRc~DBK8m*2%*HxMMdlxkbc^?@v2QHTgq#pn6OPKn(=4j%^JS_YC zxo1V2jm@_7bI%RQa{KQ%}x)-}DJWX8T-igcskM43K#$jRG=4^Ab zmX_B2C??6HXq8YFHcxEy1B-xma-yZBg~*~Ul87us!B6dq|3*CTf#p}M?3Ole%kJ6M zR_np?ypttKKE5g!Wc^{>{@H1jF<+CG)ajo|v;L3Fg+9kbd*aWtzPaFHd{I$a{PkCp za>Dy;P4$FkzD=*8wG*Y4D}y3?^y%RShKJkECh%^o?T;!}IJFqR1q5t5yEGp?C|l^7 zo$_2QGBh!nRqCN5?c-u2v!y?g80UvkCj`e`8X{g- zPS0LUM1(6uVPN)u*1j6h8b(CWYye5RR?ip-%6d2xvpiWu*B&SP%a>Nw5|yy9(r;5t zJ_ePYA6;)C0=}{hKEm*JTND*c^Qv$0F-Y-b>|T=ee6|eRcZ8T;gh$&3lY(p*g^5Qt z+zwO1gtWD^MhIzz*vWH6ZQAU1ZF!Q#cH<&2?aa$_I6QTV=W)5}XNr==Y5p{vg&sfO zxPZ#W#}_Sem?Y@?{n5<;ICRHSZtLjifTAV)5*?C#~*|ME{?_by! z0SemMnY6FRd78GT>lp`FS+_HABj|%}(chFSQ;wml+t3Z&{_E_ts8ZFJ3uLbrRM#`2nk+6i4&9ED`J5C{OaS!jS7f3>eqO9>^+ypg@2?Zn-BI$TVz)w z9%$actW&(QH=7Nr54ti1qPOFZaA-xJ`|Qyn)&!xkG&_7f=1N= z>2(xj7_y}KlY(^u{3KUD+sg)jvsG%;+b2uCFob}4YFc7j+qJio2A?3P(YXT}>!u$h_Lxe~DRZE>M8uvy~G!e&@v^oA(kE zf?h;MZXW!;>TzKG{e4eNV`JkkA+y2|sQ^4w+G{0tbT?8n8X6jYUfv>dR23OrXmx9A zm3x+h#wo+mu%45C!&!j(Z~n{FVS=Uyn_{#Hlq_F7$?k*9hcx8drITU3iw#E_?xKW8 zyIz(8N?}oLHMG}fDxPts-}gao;rgB*pSXml+$tNl82)u>%5iN?z@e4U+SX=x`A{#U z#+@t@DsEb1iP}8WT|kHSaj>&j?Qcv=f9S{D;%s_twhKUohWJ1?k<(*p0h32 zr|;hf>J2Knr1?Ahf;Lu$osxvGLvA{DeysfcgG>bA(C4Qd51%jJUEeYu#;?03eapa96P(n3#qqlc9+Pdd}Ve zz?3vvzpvS!*!>XjKAe2+9!B3kEa%=qUI_Qht2Bv_%JI)d_gLEVBxduB68N_5NXRK> z*H=PctsS<@=o3*Januo4=xDGJk~#@7~}h2r@Kux_(W` zN8QBae4x~#O@fG!@M5eniY)pKY|?10-@kvyO;kBsES((wl^%zyYI%G6X~bJ_ATv@2 z(yGS4?Q48l;dy?1dOUx6cDkDTP%FN@QHJu@B4QSt^dMsIzQhYYUrHLvM#rBbSYBRT zwGo(&5J3;zdKtjvn{~h9q8|z_d+IROm=4lsGbjy*pMh_(*igQK3Vuigoo<1k@zTog z@1o0V;d3V^p@PCUIzOl-Jst1q;Wf;I=$VI(o_Q^yRNQP&?Cs6Ldwu;kC<@kvkio$j z(HCN8*Uc{QASYxGRhFY=@~`5_#eFahxbGl!o{fWE^8F49^gTL|nJN0oA??c&HY!;7 z1{&F%mwvuY!I(xjde&X`I2rv`_omO~=xDB<7gp3u@%-w$Qz`YrR#HP3FqyOIw@{j+ z;AbmCzh7o#WLSZ|GAtGmx<(cq>P!Mprv}3<2+S=kZW=s%m<~55z?GS$#Q=}TkAtH^ zwVr!qv*&GXDMd!!-jMb0&wp`DS9kg5b&Bewq#tG00|c}0j)R!L`i$~DPU>h53Pb{LAA%<-3Mf-YivyOd zoA_2T!AgrFPsS<1u1&wYUOBDN+u3Ow7oQqFU0Ar;Q*I*wgYN^5pn5=8HC*`MlIY`bIimrStHM%DxO#=|vk&iJV(Rnh`|_!*aL1&jN1k@Yvx=M` z1qC(FezOrFczBzGqoe%yI^QZN*tVQ6hA8n85)rvTS)i9JkCJP z)L=4-t6V2cNos-dPsUAa%3LBIvth})|5j60He($Dz$Ywa?6YnpFR$O7ftVD;lp8O? zQfxk~q1=j&-nN^pecnJrO6nw|sTozqq_A^){(Ma#+YMag?MlkZ56}(Cj~f53qEMGE zDl5q9+_@lQqm2LMe$m&tJnbzdE?w9uZBF8F>~vuA)lL4EnU7aPhv3huwQ zwjFV&9fI2ki%~*<(F#e3WQ+-ldf$`MJkf;V_UDfZKC>UoOx8#K_y}fx66WOOybiBVA3H+P+&(BZ9fr5UBhbkQ{ZklSrdO0<lSff|hShTw zrcHj$14hh7wYI3zL8O8uyJOfu6Eh z%vM&a^P)k$Eh;i9haoC;O-)Tf&|&S?s;mMQoE=-4ot+&Ohp8{s-$zFFULnwo?G_61 zH_aa@i8FgHM%l`B>AVG=x=Vk3nu9P=4p`W_t7(uMFVGK|R6bvjHD?ju z%%?0go~?LI%^VdMb9MgUSI_GXuBWYcm|sxx#;F*+*GNk)+_?}OOh=0T%})1=4QXka znCjm{8^qtJ*U|BT98mu?t1P>&!X>T}<5@TSnfHj0>142vh#Ry0`&G?+*H3Xu>~bGv z{ZS}AjZ_&~2Zy-*oNsLwr)y*G$#K{KdAudP+=%i&)^C3jN}Z@@?A3lhW2QxpdJ6+~ z&@=5OUhJ(sFbR1hmPyv@HmE#59J?AJ;( zePb>96HMd^Gq(o&rvD79))N-g9LuElB*#)xfBimiZ%TDO$*U5o4rz?r+$7foGQ?@p zro290S=3WivFEw3|DXxNJziWH6J#P^c4wL}NAW4HTyry|A-i|^E6@T&$w5JPlt8W# z2;MkL1XIRVi`*yW27b`Q3;^(S@a3>0j7TYe|v>PcjZHr|5sR=^f1>q?8 z;GXCYKC=s;`6?%;&FS*MJ9$O6=)1~1*`f@rhNVg#3hf0C_RtQ@S(4> zutnopyw^-PKY{IyCU2s5SIHR3*`~b)r`z$Sdy};NJ54r>pWR61;dS=xW5VivjvTj90-^mvD(0L_x|>R_*ckmj~)KC58Xtd>b>)lKHd3lhr0Vv>q4Jy zLCHbG`L}nr_HI{@VX}~K%Yy|pSV@E(0|Uc8f4Vjr+Vtt^t#8_0Y1k{yWPJ=UDSG;a z-jeH;sVa=Cs;a4zm6}qkg5C$4PI)>tp52LpQ7hguY*{xMqLu)_3_=Ack{Q(FM=&*v zCoD9y+~V@(SyS6kWtXM7>G$tf_@cO6*T3UB>wRSVJ%aGUIeI(ZN2{LX*Qc%?y}L|S z?)oghVnOvDM?iq+pV^nD%*=<~8bFP@Ko(Z**b+=e>ngz-zl?`V_{<-ii(SGd>efmiiNE>nt7AVXktG{}hSE^mM%0D?`4P(fnC=)SkAkTjGv+|CaF%uKV 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 delta 47028 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 z

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 B8a)62 delta 57795 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 diff --git a/docs/sources/terms/images/docker-filesystems-generic.png b/docs/sources/terms/images/docker-filesystems-generic.png index a6710680a9b6a16e61daad13acb7d58bf68f018a..fb734b75c62aff73923b144ceb8ed15187e0594f 100644 GIT binary patch delta 59514 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 b>8e~2-eqwqmhzhVB2^WyDdhik^WJ{|Zwh@5 delta 57820 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 delta 96249 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⋘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

2&d2+5|@ZT%BjESH@30s_t}4fA5#<-$GDK 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 bncw2EjH^D2fjMizz(-N`g-q$wH~#-0mJ{pN diff --git a/docs/sources/terms/images/docker-filesystems.svg b/docs/sources/terms/images/docker-filesystems.svg index 13d61dc1eb..d41aff2522 100644 --- a/docs/sources/terms/images/docker-filesystems.svg +++ b/docs/sources/terms/images/docker-filesystems.svg @@ -26,16 +26,16 @@ inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="0.82666667" - inkscape:cx="382.45968" - inkscape:cy="348.3871" + inkscape:cx="236.08871" + inkscape:cy="300" inkscape:document-units="px" - inkscape:current-layer="layer4" + inkscape:current-layer="layer2" showgrid="false" width="800px" inkscape:window-width="1327" inkscape:window-height="714" - inkscape:window-x="616" - inkscape:window-y="1483" + inkscape:window-x="686" + inkscape:window-y="219" inkscape:window-maximized="0" showguides="false" inkscape:guide-bbox="true" @@ -48,98 +48,98 @@ inkscape:snap-bbox="false" inkscape:snap-grids="false"> + orientation="0,1" /> + orientation="1,0" /> + orientation="1,0" /> + orientation="1,0" /> + orientation="1,0" /> + orientation="1,0" /> + orientation="0,1" /> + + - - + id="guide5235" /> + id="guide5237" /> + id="guide5239" /> + - - + inkscape:vp_z="1199.1838 : 590.41154 : 1" + inkscape:persp3d-origin="406.04839 : 290.19023 : 1" + id="perspective4014" /> + id="perspective4012" /> + + inkscape:vp_z="1200.5884 : 584.76404 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="-407.35594 : 591.07573 : 1" + sodipodi:type="inkscape:persp3d" /> @@ -149,1392 +149,1393 @@ image/svg+xml - + + id="layer8" + inkscape:groupmode="layer" + sodipodi:insensitive="true"> + height="600" + width="800" + id="rect8704" + style="fill:#f0f0f0;fill-opacity:0.51111115;stroke:none" /> + id="layer2" + inkscape:groupmode="layer"> + inkscape:corner0="0.49469727 : -0.063230334 : 0 : 1" + inkscape:perspectiveID="#perspective3054" + id="g3999" + style="fill:#aad3d3;fill-opacity:1;stroke:#000000;stroke-width:2.4000001;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + sodipodi:type="inkscape:box3d" + inkscape:export-filename="/Users/arothfusz/src/metalivedev/docker/docs/sources/terms/images/docker-filesystems-multiroot.png" + inkscape:export-xdpi="90" + inkscape:export-ydpi="90"> + style="fill:#afafde;fill-rule:evenodd;stroke:#000000;stroke-width:2.4000001;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + id="path4009" + sodipodi:type="inkscape:box3dside" /> + style="fill:#353564;fill-rule:evenodd;stroke:#000000;stroke-width:2.4000001;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + id="path4001" + sodipodi:type="inkscape:box3dside" /> + style="fill:#e9e9ff;fill-rule:evenodd;stroke:#000000;stroke-width:2.4000001;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + id="path4011" + sodipodi:type="inkscape:box3dside" /> + style="fill:#bbdbdb;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.4000001;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + id="path4003" + sodipodi:type="inkscape:box3dside" /> + style="fill:#91c6c6;fill-rule:evenodd;stroke:#000000;stroke-width:2.4000001;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + id="path4007" + sodipodi:type="inkscape:box3dside" /> - - - - - - - - - + style="fill:#a9d2d2;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.4000001;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + id="path4005" + sodipodi:type="inkscape:box3dside" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + transform="matrix(0.75405944,0,0,0.75405944,111.78234,89.235813)" + inkscape:export-filename="/Users/arothfusz/src/metalivedev/docker/docs/sources/terms/images/docker-filesystems-multiroot.png" + inkscape:export-xdpi="90" + inkscape:export-ydpi="90"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Links:

` + doc, err := html.Parse(strings.NewReader(s)) + if err != nil { + log.Fatal(err) + } + var f func(*html.Node) + f = func(n *html.Node) { + if n.Type == html.ElementNode && n.Data == "a" { + for _, a := range n.Attr { + if a.Key == "href" { + fmt.Println(a.Val) + break + } + } + } + for c := n.FirstChild; c != nil; c = c.NextSibling { + f(c) + } + } + f(doc) + // Output: + // foo + // /bar/baz +} diff --git a/vendor/src/code.google.com/p/go.net/html/foreign.go b/vendor/src/code.google.com/p/go.net/html/foreign.go new file mode 100644 index 0000000000..d3b3844099 --- /dev/null +++ b/vendor/src/code.google.com/p/go.net/html/foreign.go @@ -0,0 +1,226 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package html + +import ( + "strings" +) + +func adjustAttributeNames(aa []Attribute, nameMap map[string]string) { + for i := range aa { + if newName, ok := nameMap[aa[i].Key]; ok { + aa[i].Key = newName + } + } +} + +func adjustForeignAttributes(aa []Attribute) { + for i, a := range aa { + if a.Key == "" || a.Key[0] != 'x' { + continue + } + switch a.Key { + case "xlink:actuate", "xlink:arcrole", "xlink:href", "xlink:role", "xlink:show", + "xlink:title", "xlink:type", "xml:base", "xml:lang", "xml:space", "xmlns:xlink": + j := strings.Index(a.Key, ":") + aa[i].Namespace = a.Key[:j] + aa[i].Key = a.Key[j+1:] + } + } +} + +func htmlIntegrationPoint(n *Node) bool { + if n.Type != ElementNode { + return false + } + switch n.Namespace { + case "math": + if n.Data == "annotation-xml" { + for _, a := range n.Attr { + if a.Key == "encoding" { + val := strings.ToLower(a.Val) + if val == "text/html" || val == "application/xhtml+xml" { + return true + } + } + } + } + case "svg": + switch n.Data { + case "desc", "foreignObject", "title": + return true + } + } + return false +} + +func mathMLTextIntegrationPoint(n *Node) bool { + if n.Namespace != "math" { + return false + } + switch n.Data { + case "mi", "mo", "mn", "ms", "mtext": + return true + } + return false +} + +// Section 12.2.5.5. +var breakout = map[string]bool{ + "b": true, + "big": true, + "blockquote": true, + "body": true, + "br": true, + "center": true, + "code": true, + "dd": true, + "div": true, + "dl": true, + "dt": true, + "em": true, + "embed": true, + "h1": true, + "h2": true, + "h3": true, + "h4": true, + "h5": true, + "h6": true, + "head": true, + "hr": true, + "i": true, + "img": true, + "li": true, + "listing": true, + "menu": true, + "meta": true, + "nobr": true, + "ol": true, + "p": true, + "pre": true, + "ruby": true, + "s": true, + "small": true, + "span": true, + "strong": true, + "strike": true, + "sub": true, + "sup": true, + "table": true, + "tt": true, + "u": true, + "ul": true, + "var": true, +} + +// Section 12.2.5.5. +var svgTagNameAdjustments = map[string]string{ + "altglyph": "altGlyph", + "altglyphdef": "altGlyphDef", + "altglyphitem": "altGlyphItem", + "animatecolor": "animateColor", + "animatemotion": "animateMotion", + "animatetransform": "animateTransform", + "clippath": "clipPath", + "feblend": "feBlend", + "fecolormatrix": "feColorMatrix", + "fecomponenttransfer": "feComponentTransfer", + "fecomposite": "feComposite", + "feconvolvematrix": "feConvolveMatrix", + "fediffuselighting": "feDiffuseLighting", + "fedisplacementmap": "feDisplacementMap", + "fedistantlight": "feDistantLight", + "feflood": "feFlood", + "fefunca": "feFuncA", + "fefuncb": "feFuncB", + "fefuncg": "feFuncG", + "fefuncr": "feFuncR", + "fegaussianblur": "feGaussianBlur", + "feimage": "feImage", + "femerge": "feMerge", + "femergenode": "feMergeNode", + "femorphology": "feMorphology", + "feoffset": "feOffset", + "fepointlight": "fePointLight", + "fespecularlighting": "feSpecularLighting", + "fespotlight": "feSpotLight", + "fetile": "feTile", + "feturbulence": "feTurbulence", + "foreignobject": "foreignObject", + "glyphref": "glyphRef", + "lineargradient": "linearGradient", + "radialgradient": "radialGradient", + "textpath": "textPath", +} + +// Section 12.2.5.1 +var mathMLAttributeAdjustments = map[string]string{ + "definitionurl": "definitionURL", +} + +var svgAttributeAdjustments = map[string]string{ + "attributename": "attributeName", + "attributetype": "attributeType", + "basefrequency": "baseFrequency", + "baseprofile": "baseProfile", + "calcmode": "calcMode", + "clippathunits": "clipPathUnits", + "contentscripttype": "contentScriptType", + "contentstyletype": "contentStyleType", + "diffuseconstant": "diffuseConstant", + "edgemode": "edgeMode", + "externalresourcesrequired": "externalResourcesRequired", + "filterres": "filterRes", + "filterunits": "filterUnits", + "glyphref": "glyphRef", + "gradienttransform": "gradientTransform", + "gradientunits": "gradientUnits", + "kernelmatrix": "kernelMatrix", + "kernelunitlength": "kernelUnitLength", + "keypoints": "keyPoints", + "keysplines": "keySplines", + "keytimes": "keyTimes", + "lengthadjust": "lengthAdjust", + "limitingconeangle": "limitingConeAngle", + "markerheight": "markerHeight", + "markerunits": "markerUnits", + "markerwidth": "markerWidth", + "maskcontentunits": "maskContentUnits", + "maskunits": "maskUnits", + "numoctaves": "numOctaves", + "pathlength": "pathLength", + "patterncontentunits": "patternContentUnits", + "patterntransform": "patternTransform", + "patternunits": "patternUnits", + "pointsatx": "pointsAtX", + "pointsaty": "pointsAtY", + "pointsatz": "pointsAtZ", + "preservealpha": "preserveAlpha", + "preserveaspectratio": "preserveAspectRatio", + "primitiveunits": "primitiveUnits", + "refx": "refX", + "refy": "refY", + "repeatcount": "repeatCount", + "repeatdur": "repeatDur", + "requiredextensions": "requiredExtensions", + "requiredfeatures": "requiredFeatures", + "specularconstant": "specularConstant", + "specularexponent": "specularExponent", + "spreadmethod": "spreadMethod", + "startoffset": "startOffset", + "stddeviation": "stdDeviation", + "stitchtiles": "stitchTiles", + "surfacescale": "surfaceScale", + "systemlanguage": "systemLanguage", + "tablevalues": "tableValues", + "targetx": "targetX", + "targety": "targetY", + "textlength": "textLength", + "viewbox": "viewBox", + "viewtarget": "viewTarget", + "xchannelselector": "xChannelSelector", + "ychannelselector": "yChannelSelector", + "zoomandpan": "zoomAndPan", +} diff --git a/vendor/src/code.google.com/p/go.net/html/node.go b/vendor/src/code.google.com/p/go.net/html/node.go new file mode 100644 index 0000000000..e7b4e50a01 --- /dev/null +++ b/vendor/src/code.google.com/p/go.net/html/node.go @@ -0,0 +1,193 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package html + +import ( + "code.google.com/p/go.net/html/atom" +) + +// A NodeType is the type of a Node. +type NodeType uint32 + +const ( + ErrorNode NodeType = iota + TextNode + DocumentNode + ElementNode + CommentNode + DoctypeNode + scopeMarkerNode +) + +// Section 12.2.3.3 says "scope markers are inserted when entering applet +// elements, buttons, object elements, marquees, table cells, and table +// captions, and are used to prevent formatting from 'leaking'". +var scopeMarker = Node{Type: scopeMarkerNode} + +// A Node consists of a NodeType and some Data (tag name for element nodes, +// content for text) and are part of a tree of Nodes. Element nodes may also +// have a Namespace and contain a slice of Attributes. Data is unescaped, so +// that it looks like "a 0 { + return (*s)[i-1] + } + return nil +} + +// index returns the index of the top-most occurrence of n in the stack, or -1 +// if n is not present. +func (s *nodeStack) index(n *Node) int { + for i := len(*s) - 1; i >= 0; i-- { + if (*s)[i] == n { + return i + } + } + return -1 +} + +// insert inserts a node at the given index. +func (s *nodeStack) insert(i int, n *Node) { + (*s) = append(*s, nil) + copy((*s)[i+1:], (*s)[i:]) + (*s)[i] = n +} + +// remove removes a node from the stack. It is a no-op if n is not present. +func (s *nodeStack) remove(n *Node) { + i := s.index(n) + if i == -1 { + return + } + copy((*s)[i:], (*s)[i+1:]) + j := len(*s) - 1 + (*s)[j] = nil + *s = (*s)[:j] +} diff --git a/vendor/src/code.google.com/p/go.net/html/node_test.go b/vendor/src/code.google.com/p/go.net/html/node_test.go new file mode 100644 index 0000000000..471102f3a2 --- /dev/null +++ b/vendor/src/code.google.com/p/go.net/html/node_test.go @@ -0,0 +1,146 @@ +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package html + +import ( + "fmt" +) + +// checkTreeConsistency checks that a node and its descendants are all +// consistent in their parent/child/sibling relationships. +func checkTreeConsistency(n *Node) error { + return checkTreeConsistency1(n, 0) +} + +func checkTreeConsistency1(n *Node, depth int) error { + if depth == 1e4 { + return fmt.Errorf("html: tree looks like it contains a cycle") + } + if err := checkNodeConsistency(n); err != nil { + return err + } + for c := n.FirstChild; c != nil; c = c.NextSibling { + if err := checkTreeConsistency1(c, depth+1); err != nil { + return err + } + } + return nil +} + +// checkNodeConsistency checks that a node's parent/child/sibling relationships +// are consistent. +func checkNodeConsistency(n *Node) error { + if n == nil { + return nil + } + + nParent := 0 + for p := n.Parent; p != nil; p = p.Parent { + nParent++ + if nParent == 1e4 { + return fmt.Errorf("html: parent list looks like an infinite loop") + } + } + + nForward := 0 + for c := n.FirstChild; c != nil; c = c.NextSibling { + nForward++ + if nForward == 1e6 { + return fmt.Errorf("html: forward list of children looks like an infinite loop") + } + if c.Parent != n { + return fmt.Errorf("html: inconsistent child/parent relationship") + } + } + + nBackward := 0 + for c := n.LastChild; c != nil; c = c.PrevSibling { + nBackward++ + if nBackward == 1e6 { + return fmt.Errorf("html: backward list of children looks like an infinite loop") + } + if c.Parent != n { + return fmt.Errorf("html: inconsistent child/parent relationship") + } + } + + if n.Parent != nil { + if n.Parent == n { + return fmt.Errorf("html: inconsistent parent relationship") + } + if n.Parent == n.FirstChild { + return fmt.Errorf("html: inconsistent parent/first relationship") + } + if n.Parent == n.LastChild { + return fmt.Errorf("html: inconsistent parent/last relationship") + } + if n.Parent == n.PrevSibling { + return fmt.Errorf("html: inconsistent parent/prev relationship") + } + if n.Parent == n.NextSibling { + return fmt.Errorf("html: inconsistent parent/next relationship") + } + + parentHasNAsAChild := false + for c := n.Parent.FirstChild; c != nil; c = c.NextSibling { + if c == n { + parentHasNAsAChild = true + break + } + } + if !parentHasNAsAChild { + return fmt.Errorf("html: inconsistent parent/child relationship") + } + } + + if n.PrevSibling != nil && n.PrevSibling.NextSibling != n { + return fmt.Errorf("html: inconsistent prev/next relationship") + } + if n.NextSibling != nil && n.NextSibling.PrevSibling != n { + return fmt.Errorf("html: inconsistent next/prev relationship") + } + + if (n.FirstChild == nil) != (n.LastChild == nil) { + return fmt.Errorf("html: inconsistent first/last relationship") + } + if n.FirstChild != nil && n.FirstChild == n.LastChild { + // We have a sole child. + if n.FirstChild.PrevSibling != nil || n.FirstChild.NextSibling != nil { + return fmt.Errorf("html: inconsistent sole child's sibling relationship") + } + } + + seen := map[*Node]bool{} + + var last *Node + for c := n.FirstChild; c != nil; c = c.NextSibling { + if seen[c] { + return fmt.Errorf("html: inconsistent repeated child") + } + seen[c] = true + last = c + } + if last != n.LastChild { + return fmt.Errorf("html: inconsistent last relationship") + } + + var first *Node + for c := n.LastChild; c != nil; c = c.PrevSibling { + if !seen[c] { + return fmt.Errorf("html: inconsistent missing child") + } + delete(seen, c) + first = c + } + if first != n.FirstChild { + return fmt.Errorf("html: inconsistent first relationship") + } + + if len(seen) != 0 { + return fmt.Errorf("html: inconsistent forwards/backwards child list") + } + + return nil +} diff --git a/vendor/src/code.google.com/p/go.net/html/parse.go b/vendor/src/code.google.com/p/go.net/html/parse.go new file mode 100644 index 0000000000..bf99ec6ab2 --- /dev/null +++ b/vendor/src/code.google.com/p/go.net/html/parse.go @@ -0,0 +1,2092 @@ +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package html + +import ( + "errors" + "fmt" + "io" + "strings" + + a "code.google.com/p/go.net/html/atom" +) + +// A parser implements the HTML5 parsing algorithm: +// http://www.whatwg.org/specs/web-apps/current-work/multipage/tokenization.html#tree-construction +type parser struct { + // tokenizer provides the tokens for the parser. + tokenizer *Tokenizer + // tok is the most recently read token. + tok Token + // Self-closing tags like
are treated as start tags, except that + // hasSelfClosingToken is set while they are being processed. + hasSelfClosingToken bool + // doc is the document root element. + doc *Node + // The stack of open elements (section 12.2.3.2) and active formatting + // elements (section 12.2.3.3). + oe, afe nodeStack + // Element pointers (section 12.2.3.4). + head, form *Node + // Other parsing state flags (section 12.2.3.5). + scripting, framesetOK bool + // im is the current insertion mode. + im insertionMode + // originalIM is the insertion mode to go back to after completing a text + // or inTableText insertion mode. + originalIM insertionMode + // fosterParenting is whether new elements should be inserted according to + // the foster parenting rules (section 12.2.5.3). + fosterParenting bool + // quirks is whether the parser is operating in "quirks mode." + quirks bool + // fragment is whether the parser is parsing an HTML fragment. + fragment bool + // context is the context element when parsing an HTML fragment + // (section 12.4). + context *Node +} + +func (p *parser) top() *Node { + if n := p.oe.top(); n != nil { + return n + } + return p.doc +} + +// Stop tags for use in popUntil. These come from section 12.2.3.2. +var ( + defaultScopeStopTags = map[string][]a.Atom{ + "": {a.Applet, a.Caption, a.Html, a.Table, a.Td, a.Th, a.Marquee, a.Object}, + "math": {a.AnnotationXml, a.Mi, a.Mn, a.Mo, a.Ms, a.Mtext}, + "svg": {a.Desc, a.ForeignObject, a.Title}, + } +) + +type scope int + +const ( + defaultScope scope = iota + listItemScope + buttonScope + tableScope + tableRowScope + tableBodyScope + selectScope +) + +// popUntil pops the stack of open elements at the highest element whose tag +// is in matchTags, provided there is no higher element in the scope's stop +// tags (as defined in section 12.2.3.2). It returns whether or not there was +// such an element. If there was not, popUntil leaves the stack unchanged. +// +// For example, the set of stop tags for table scope is: "html", "table". If +// the stack was: +// ["html", "body", "font", "table", "b", "i", "u"] +// then popUntil(tableScope, "font") would return false, but +// popUntil(tableScope, "i") would return true and the stack would become: +// ["html", "body", "font", "table", "b"] +// +// If an element's tag is in both the stop tags and matchTags, then the stack +// will be popped and the function returns true (provided, of course, there was +// no higher element in the stack that was also in the stop tags). For example, +// popUntil(tableScope, "table") returns true and leaves: +// ["html", "body", "font"] +func (p *parser) popUntil(s scope, matchTags ...a.Atom) bool { + if i := p.indexOfElementInScope(s, matchTags...); i != -1 { + p.oe = p.oe[:i] + return true + } + return false +} + +// indexOfElementInScope returns the index in p.oe of the highest element whose +// tag is in matchTags that is in scope. If no matching element is in scope, it +// returns -1. +func (p *parser) indexOfElementInScope(s scope, matchTags ...a.Atom) int { + for i := len(p.oe) - 1; i >= 0; i-- { + tagAtom := p.oe[i].DataAtom + if p.oe[i].Namespace == "" { + for _, t := range matchTags { + if t == tagAtom { + return i + } + } + switch s { + case defaultScope: + // No-op. + case listItemScope: + if tagAtom == a.Ol || tagAtom == a.Ul { + return -1 + } + case buttonScope: + if tagAtom == a.Button { + return -1 + } + case tableScope: + if tagAtom == a.Html || tagAtom == a.Table { + return -1 + } + case selectScope: + if tagAtom != a.Optgroup && tagAtom != a.Option { + return -1 + } + default: + panic("unreachable") + } + } + switch s { + case defaultScope, listItemScope, buttonScope: + for _, t := range defaultScopeStopTags[p.oe[i].Namespace] { + if t == tagAtom { + return -1 + } + } + } + } + return -1 +} + +// elementInScope is like popUntil, except that it doesn't modify the stack of +// open elements. +func (p *parser) elementInScope(s scope, matchTags ...a.Atom) bool { + return p.indexOfElementInScope(s, matchTags...) != -1 +} + +// clearStackToContext pops elements off the stack of open elements until a +// scope-defined element is found. +func (p *parser) clearStackToContext(s scope) { + for i := len(p.oe) - 1; i >= 0; i-- { + tagAtom := p.oe[i].DataAtom + switch s { + case tableScope: + if tagAtom == a.Html || tagAtom == a.Table { + p.oe = p.oe[:i+1] + return + } + case tableRowScope: + if tagAtom == a.Html || tagAtom == a.Tr { + p.oe = p.oe[:i+1] + return + } + case tableBodyScope: + if tagAtom == a.Html || tagAtom == a.Tbody || tagAtom == a.Tfoot || tagAtom == a.Thead { + p.oe = p.oe[:i+1] + return + } + default: + panic("unreachable") + } + } +} + +// generateImpliedEndTags pops nodes off the stack of open elements as long as +// the top node has a tag name of dd, dt, li, option, optgroup, p, rp, or rt. +// If exceptions are specified, nodes with that name will not be popped off. +func (p *parser) generateImpliedEndTags(exceptions ...string) { + var i int +loop: + for i = len(p.oe) - 1; i >= 0; i-- { + n := p.oe[i] + if n.Type == ElementNode { + switch n.DataAtom { + case a.Dd, a.Dt, a.Li, a.Option, a.Optgroup, a.P, a.Rp, a.Rt: + for _, except := range exceptions { + if n.Data == except { + break loop + } + } + continue + } + } + break + } + + p.oe = p.oe[:i+1] +} + +// addChild adds a child node n to the top element, and pushes n onto the stack +// of open elements if it is an element node. +func (p *parser) addChild(n *Node) { + if p.shouldFosterParent() { + p.fosterParent(n) + } else { + p.top().AppendChild(n) + } + + if n.Type == ElementNode { + p.oe = append(p.oe, n) + } +} + +// shouldFosterParent returns whether the next node to be added should be +// foster parented. +func (p *parser) shouldFosterParent() bool { + if p.fosterParenting { + switch p.top().DataAtom { + case a.Table, a.Tbody, a.Tfoot, a.Thead, a.Tr: + return true + } + } + return false +} + +// fosterParent adds a child node according to the foster parenting rules. +// Section 12.2.5.3, "foster parenting". +func (p *parser) fosterParent(n *Node) { + var table, parent, prev *Node + var i int + for i = len(p.oe) - 1; i >= 0; i-- { + if p.oe[i].DataAtom == a.Table { + table = p.oe[i] + break + } + } + + if table == nil { + // The foster parent is the html element. + parent = p.oe[0] + } else { + parent = table.Parent + } + if parent == nil { + parent = p.oe[i-1] + } + + if table != nil { + prev = table.PrevSibling + } else { + prev = parent.LastChild + } + if prev != nil && prev.Type == TextNode && n.Type == TextNode { + prev.Data += n.Data + return + } + + parent.InsertBefore(n, table) +} + +// addText adds text to the preceding node if it is a text node, or else it +// calls addChild with a new text node. +func (p *parser) addText(text string) { + if text == "" { + return + } + + if p.shouldFosterParent() { + p.fosterParent(&Node{ + Type: TextNode, + Data: text, + }) + return + } + + t := p.top() + if n := t.LastChild; n != nil && n.Type == TextNode { + n.Data += text + return + } + p.addChild(&Node{ + Type: TextNode, + Data: text, + }) +} + +// addElement adds a child element based on the current token. +func (p *parser) addElement() { + p.addChild(&Node{ + Type: ElementNode, + DataAtom: p.tok.DataAtom, + Data: p.tok.Data, + Attr: p.tok.Attr, + }) +} + +// Section 12.2.3.3. +func (p *parser) addFormattingElement() { + tagAtom, attr := p.tok.DataAtom, p.tok.Attr + p.addElement() + + // Implement the Noah's Ark clause, but with three per family instead of two. + identicalElements := 0 +findIdenticalElements: + for i := len(p.afe) - 1; i >= 0; i-- { + n := p.afe[i] + if n.Type == scopeMarkerNode { + break + } + if n.Type != ElementNode { + continue + } + if n.Namespace != "" { + continue + } + if n.DataAtom != tagAtom { + continue + } + if len(n.Attr) != len(attr) { + continue + } + compareAttributes: + for _, t0 := range n.Attr { + for _, t1 := range attr { + if t0.Key == t1.Key && t0.Namespace == t1.Namespace && t0.Val == t1.Val { + // Found a match for this attribute, continue with the next attribute. + continue compareAttributes + } + } + // If we get here, there is no attribute that matches a. + // Therefore the element is not identical to the new one. + continue findIdenticalElements + } + + identicalElements++ + if identicalElements >= 3 { + p.afe.remove(n) + } + } + + p.afe = append(p.afe, p.top()) +} + +// Section 12.2.3.3. +func (p *parser) clearActiveFormattingElements() { + for { + n := p.afe.pop() + if len(p.afe) == 0 || n.Type == scopeMarkerNode { + return + } + } +} + +// Section 12.2.3.3. +func (p *parser) reconstructActiveFormattingElements() { + n := p.afe.top() + if n == nil { + return + } + if n.Type == scopeMarkerNode || p.oe.index(n) != -1 { + return + } + i := len(p.afe) - 1 + for n.Type != scopeMarkerNode && p.oe.index(n) == -1 { + if i == 0 { + i = -1 + break + } + i-- + n = p.afe[i] + } + for { + i++ + clone := p.afe[i].clone() + p.addChild(clone) + p.afe[i] = clone + if i == len(p.afe)-1 { + break + } + } +} + +// Section 12.2.4. +func (p *parser) acknowledgeSelfClosingTag() { + p.hasSelfClosingToken = false +} + +// An insertion mode (section 12.2.3.1) is the state transition function from +// a particular state in the HTML5 parser's state machine. It updates the +// parser's fields depending on parser.tok (where ErrorToken means EOF). +// It returns whether the token was consumed. +type insertionMode func(*parser) bool + +// setOriginalIM sets the insertion mode to return to after completing a text or +// inTableText insertion mode. +// Section 12.2.3.1, "using the rules for". +func (p *parser) setOriginalIM() { + if p.originalIM != nil { + panic("html: bad parser state: originalIM was set twice") + } + p.originalIM = p.im +} + +// Section 12.2.3.1, "reset the insertion mode". +func (p *parser) resetInsertionMode() { + for i := len(p.oe) - 1; i >= 0; i-- { + n := p.oe[i] + if i == 0 && p.context != nil { + n = p.context + } + + switch n.DataAtom { + case a.Select: + p.im = inSelectIM + case a.Td, a.Th: + p.im = inCellIM + case a.Tr: + p.im = inRowIM + case a.Tbody, a.Thead, a.Tfoot: + p.im = inTableBodyIM + case a.Caption: + p.im = inCaptionIM + case a.Colgroup: + p.im = inColumnGroupIM + case a.Table: + p.im = inTableIM + case a.Head: + p.im = inBodyIM + case a.Body: + p.im = inBodyIM + case a.Frameset: + p.im = inFramesetIM + case a.Html: + p.im = beforeHeadIM + default: + continue + } + return + } + p.im = inBodyIM +} + +const whitespace = " \t\r\n\f" + +// Section 12.2.5.4.1. +func initialIM(p *parser) bool { + switch p.tok.Type { + case TextToken: + p.tok.Data = strings.TrimLeft(p.tok.Data, whitespace) + if len(p.tok.Data) == 0 { + // It was all whitespace, so ignore it. + return true + } + case CommentToken: + p.doc.AppendChild(&Node{ + Type: CommentNode, + Data: p.tok.Data, + }) + return true + case DoctypeToken: + n, quirks := parseDoctype(p.tok.Data) + p.doc.AppendChild(n) + p.quirks = quirks + p.im = beforeHTMLIM + return true + } + p.quirks = true + p.im = beforeHTMLIM + return false +} + +// Section 12.2.5.4.2. +func beforeHTMLIM(p *parser) bool { + switch p.tok.Type { + case DoctypeToken: + // Ignore the token. + return true + case TextToken: + p.tok.Data = strings.TrimLeft(p.tok.Data, whitespace) + if len(p.tok.Data) == 0 { + // It was all whitespace, so ignore it. + return true + } + case StartTagToken: + if p.tok.DataAtom == a.Html { + p.addElement() + p.im = beforeHeadIM + return true + } + case EndTagToken: + switch p.tok.DataAtom { + case a.Head, a.Body, a.Html, a.Br: + p.parseImpliedToken(StartTagToken, a.Html, a.Html.String()) + return false + default: + // Ignore the token. + return true + } + case CommentToken: + p.doc.AppendChild(&Node{ + Type: CommentNode, + Data: p.tok.Data, + }) + return true + } + p.parseImpliedToken(StartTagToken, a.Html, a.Html.String()) + return false +} + +// Section 12.2.5.4.3. +func beforeHeadIM(p *parser) bool { + switch p.tok.Type { + case TextToken: + p.tok.Data = strings.TrimLeft(p.tok.Data, whitespace) + if len(p.tok.Data) == 0 { + // It was all whitespace, so ignore it. + return true + } + case StartTagToken: + switch p.tok.DataAtom { + case a.Head: + p.addElement() + p.head = p.top() + p.im = inHeadIM + return true + case a.Html: + return inBodyIM(p) + } + case EndTagToken: + switch p.tok.DataAtom { + case a.Head, a.Body, a.Html, a.Br: + p.parseImpliedToken(StartTagToken, a.Head, a.Head.String()) + return false + default: + // Ignore the token. + return true + } + case CommentToken: + p.addChild(&Node{ + Type: CommentNode, + Data: p.tok.Data, + }) + return true + case DoctypeToken: + // Ignore the token. + return true + } + + p.parseImpliedToken(StartTagToken, a.Head, a.Head.String()) + return false +} + +// Section 12.2.5.4.4. +func inHeadIM(p *parser) bool { + switch p.tok.Type { + case TextToken: + s := strings.TrimLeft(p.tok.Data, whitespace) + if len(s) < len(p.tok.Data) { + // Add the initial whitespace to the current node. + p.addText(p.tok.Data[:len(p.tok.Data)-len(s)]) + if s == "" { + return true + } + p.tok.Data = s + } + case StartTagToken: + switch p.tok.DataAtom { + case a.Html: + return inBodyIM(p) + case a.Base, a.Basefont, a.Bgsound, a.Command, a.Link, a.Meta: + p.addElement() + p.oe.pop() + p.acknowledgeSelfClosingTag() + return true + case a.Script, a.Title, a.Noscript, a.Noframes, a.Style: + p.addElement() + p.setOriginalIM() + p.im = textIM + return true + case a.Head: + // Ignore the token. + return true + } + case EndTagToken: + switch p.tok.DataAtom { + case a.Head: + n := p.oe.pop() + if n.DataAtom != a.Head { + panic("html: bad parser state: element not found, in the in-head insertion mode") + } + p.im = afterHeadIM + return true + case a.Body, a.Html, a.Br: + p.parseImpliedToken(EndTagToken, a.Head, a.Head.String()) + return false + default: + // Ignore the token. + return true + } + case CommentToken: + p.addChild(&Node{ + Type: CommentNode, + Data: p.tok.Data, + }) + return true + case DoctypeToken: + // Ignore the token. + return true + } + + p.parseImpliedToken(EndTagToken, a.Head, a.Head.String()) + return false +} + +// Section 12.2.5.4.6. +func afterHeadIM(p *parser) bool { + switch p.tok.Type { + case TextToken: + s := strings.TrimLeft(p.tok.Data, whitespace) + if len(s) < len(p.tok.Data) { + // Add the initial whitespace to the current node. + p.addText(p.tok.Data[:len(p.tok.Data)-len(s)]) + if s == "" { + return true + } + p.tok.Data = s + } + case StartTagToken: + switch p.tok.DataAtom { + case a.Html: + return inBodyIM(p) + case a.Body: + p.addElement() + p.framesetOK = false + p.im = inBodyIM + return true + case a.Frameset: + p.addElement() + p.im = inFramesetIM + return true + case a.Base, a.Basefont, a.Bgsound, a.Link, a.Meta, a.Noframes, a.Script, a.Style, a.Title: + p.oe = append(p.oe, p.head) + defer p.oe.remove(p.head) + return inHeadIM(p) + case a.Head: + // Ignore the token. + return true + } + case EndTagToken: + switch p.tok.DataAtom { + case a.Body, a.Html, a.Br: + // Drop down to creating an implied tag. + default: + // Ignore the token. + return true + } + case CommentToken: + p.addChild(&Node{ + Type: CommentNode, + Data: p.tok.Data, + }) + return true + case DoctypeToken: + // Ignore the token. + return true + } + + p.parseImpliedToken(StartTagToken, a.Body, a.Body.String()) + p.framesetOK = true + return false +} + +// copyAttributes copies attributes of src not found on dst to dst. +func copyAttributes(dst *Node, src Token) { + if len(src.Attr) == 0 { + return + } + attr := map[string]string{} + for _, t := range dst.Attr { + attr[t.Key] = t.Val + } + for _, t := range src.Attr { + if _, ok := attr[t.Key]; !ok { + dst.Attr = append(dst.Attr, t) + attr[t.Key] = t.Val + } + } +} + +// Section 12.2.5.4.7. +func inBodyIM(p *parser) bool { + switch p.tok.Type { + case TextToken: + d := p.tok.Data + switch n := p.oe.top(); n.DataAtom { + case a.Pre, a.Listing: + if n.FirstChild == nil { + // Ignore a newline at the start of a
 block.
+				if d != "" && d[0] == '\r' {
+					d = d[1:]
+				}
+				if d != "" && d[0] == '\n' {
+					d = d[1:]
+				}
+			}
+		}
+		d = strings.Replace(d, "\x00", "", -1)
+		if d == "" {
+			return true
+		}
+		p.reconstructActiveFormattingElements()
+		p.addText(d)
+		if p.framesetOK && strings.TrimLeft(d, whitespace) != "" {
+			// There were non-whitespace characters inserted.
+			p.framesetOK = false
+		}
+	case StartTagToken:
+		switch p.tok.DataAtom {
+		case a.Html:
+			copyAttributes(p.oe[0], p.tok)
+		case a.Base, a.Basefont, a.Bgsound, a.Command, a.Link, a.Meta, a.Noframes, a.Script, a.Style, a.Title:
+			return inHeadIM(p)
+		case a.Body:
+			if len(p.oe) >= 2 {
+				body := p.oe[1]
+				if body.Type == ElementNode && body.DataAtom == a.Body {
+					p.framesetOK = false
+					copyAttributes(body, p.tok)
+				}
+			}
+		case a.Frameset:
+			if !p.framesetOK || len(p.oe) < 2 || p.oe[1].DataAtom != a.Body {
+				// Ignore the token.
+				return true
+			}
+			body := p.oe[1]
+			if body.Parent != nil {
+				body.Parent.RemoveChild(body)
+			}
+			p.oe = p.oe[:1]
+			p.addElement()
+			p.im = inFramesetIM
+			return true
+		case a.Address, a.Article, a.Aside, a.Blockquote, a.Center, a.Details, a.Dir, a.Div, a.Dl, a.Fieldset, a.Figcaption, a.Figure, a.Footer, a.Header, a.Hgroup, a.Menu, a.Nav, a.Ol, a.P, a.Section, a.Summary, a.Ul:
+			p.popUntil(buttonScope, a.P)
+			p.addElement()
+		case a.H1, a.H2, a.H3, a.H4, a.H5, a.H6:
+			p.popUntil(buttonScope, a.P)
+			switch n := p.top(); n.DataAtom {
+			case a.H1, a.H2, a.H3, a.H4, a.H5, a.H6:
+				p.oe.pop()
+			}
+			p.addElement()
+		case a.Pre, a.Listing:
+			p.popUntil(buttonScope, a.P)
+			p.addElement()
+			// The newline, if any, will be dealt with by the TextToken case.
+			p.framesetOK = false
+		case a.Form:
+			if p.form == nil {
+				p.popUntil(buttonScope, a.P)
+				p.addElement()
+				p.form = p.top()
+			}
+		case a.Li:
+			p.framesetOK = false
+			for i := len(p.oe) - 1; i >= 0; i-- {
+				node := p.oe[i]
+				switch node.DataAtom {
+				case a.Li:
+					p.oe = p.oe[:i]
+				case a.Address, a.Div, a.P:
+					continue
+				default:
+					if !isSpecialElement(node) {
+						continue
+					}
+				}
+				break
+			}
+			p.popUntil(buttonScope, a.P)
+			p.addElement()
+		case a.Dd, a.Dt:
+			p.framesetOK = false
+			for i := len(p.oe) - 1; i >= 0; i-- {
+				node := p.oe[i]
+				switch node.DataAtom {
+				case a.Dd, a.Dt:
+					p.oe = p.oe[:i]
+				case a.Address, a.Div, a.P:
+					continue
+				default:
+					if !isSpecialElement(node) {
+						continue
+					}
+				}
+				break
+			}
+			p.popUntil(buttonScope, a.P)
+			p.addElement()
+		case a.Plaintext:
+			p.popUntil(buttonScope, a.P)
+			p.addElement()
+		case a.Button:
+			p.popUntil(defaultScope, a.Button)
+			p.reconstructActiveFormattingElements()
+			p.addElement()
+			p.framesetOK = false
+		case a.A:
+			for i := len(p.afe) - 1; i >= 0 && p.afe[i].Type != scopeMarkerNode; i-- {
+				if n := p.afe[i]; n.Type == ElementNode && n.DataAtom == a.A {
+					p.inBodyEndTagFormatting(a.A)
+					p.oe.remove(n)
+					p.afe.remove(n)
+					break
+				}
+			}
+			p.reconstructActiveFormattingElements()
+			p.addFormattingElement()
+		case a.B, a.Big, a.Code, a.Em, a.Font, a.I, a.S, a.Small, a.Strike, a.Strong, a.Tt, a.U:
+			p.reconstructActiveFormattingElements()
+			p.addFormattingElement()
+		case a.Nobr:
+			p.reconstructActiveFormattingElements()
+			if p.elementInScope(defaultScope, a.Nobr) {
+				p.inBodyEndTagFormatting(a.Nobr)
+				p.reconstructActiveFormattingElements()
+			}
+			p.addFormattingElement()
+		case a.Applet, a.Marquee, a.Object:
+			p.reconstructActiveFormattingElements()
+			p.addElement()
+			p.afe = append(p.afe, &scopeMarker)
+			p.framesetOK = false
+		case a.Table:
+			if !p.quirks {
+				p.popUntil(buttonScope, a.P)
+			}
+			p.addElement()
+			p.framesetOK = false
+			p.im = inTableIM
+			return true
+		case a.Area, a.Br, a.Embed, a.Img, a.Input, a.Keygen, a.Wbr:
+			p.reconstructActiveFormattingElements()
+			p.addElement()
+			p.oe.pop()
+			p.acknowledgeSelfClosingTag()
+			if p.tok.DataAtom == a.Input {
+				for _, t := range p.tok.Attr {
+					if t.Key == "type" {
+						if strings.ToLower(t.Val) == "hidden" {
+							// Skip setting framesetOK = false
+							return true
+						}
+					}
+				}
+			}
+			p.framesetOK = false
+		case a.Param, a.Source, a.Track:
+			p.addElement()
+			p.oe.pop()
+			p.acknowledgeSelfClosingTag()
+		case a.Hr:
+			p.popUntil(buttonScope, a.P)
+			p.addElement()
+			p.oe.pop()
+			p.acknowledgeSelfClosingTag()
+			p.framesetOK = false
+		case a.Image:
+			p.tok.DataAtom = a.Img
+			p.tok.Data = a.Img.String()
+			return false
+		case a.Isindex:
+			if p.form != nil {
+				// Ignore the token.
+				return true
+			}
+			action := ""
+			prompt := "This is a searchable index. Enter search keywords: "
+			attr := []Attribute{{Key: "name", Val: "isindex"}}
+			for _, t := range p.tok.Attr {
+				switch t.Key {
+				case "action":
+					action = t.Val
+				case "name":
+					// Ignore the attribute.
+				case "prompt":
+					prompt = t.Val
+				default:
+					attr = append(attr, t)
+				}
+			}
+			p.acknowledgeSelfClosingTag()
+			p.popUntil(buttonScope, a.P)
+			p.parseImpliedToken(StartTagToken, a.Form, a.Form.String())
+			if action != "" {
+				p.form.Attr = []Attribute{{Key: "action", Val: action}}
+			}
+			p.parseImpliedToken(StartTagToken, a.Hr, a.Hr.String())
+			p.parseImpliedToken(StartTagToken, a.Label, a.Label.String())
+			p.addText(prompt)
+			p.addChild(&Node{
+				Type:     ElementNode,
+				DataAtom: a.Input,
+				Data:     a.Input.String(),
+				Attr:     attr,
+			})
+			p.oe.pop()
+			p.parseImpliedToken(EndTagToken, a.Label, a.Label.String())
+			p.parseImpliedToken(StartTagToken, a.Hr, a.Hr.String())
+			p.parseImpliedToken(EndTagToken, a.Form, a.Form.String())
+		case a.Textarea:
+			p.addElement()
+			p.setOriginalIM()
+			p.framesetOK = false
+			p.im = textIM
+		case a.Xmp:
+			p.popUntil(buttonScope, a.P)
+			p.reconstructActiveFormattingElements()
+			p.framesetOK = false
+			p.addElement()
+			p.setOriginalIM()
+			p.im = textIM
+		case a.Iframe:
+			p.framesetOK = false
+			p.addElement()
+			p.setOriginalIM()
+			p.im = textIM
+		case a.Noembed, a.Noscript:
+			p.addElement()
+			p.setOriginalIM()
+			p.im = textIM
+		case a.Select:
+			p.reconstructActiveFormattingElements()
+			p.addElement()
+			p.framesetOK = false
+			p.im = inSelectIM
+			return true
+		case a.Optgroup, a.Option:
+			if p.top().DataAtom == a.Option {
+				p.oe.pop()
+			}
+			p.reconstructActiveFormattingElements()
+			p.addElement()
+		case a.Rp, a.Rt:
+			if p.elementInScope(defaultScope, a.Ruby) {
+				p.generateImpliedEndTags()
+			}
+			p.addElement()
+		case a.Math, a.Svg:
+			p.reconstructActiveFormattingElements()
+			if p.tok.DataAtom == a.Math {
+				adjustAttributeNames(p.tok.Attr, mathMLAttributeAdjustments)
+			} else {
+				adjustAttributeNames(p.tok.Attr, svgAttributeAdjustments)
+			}
+			adjustForeignAttributes(p.tok.Attr)
+			p.addElement()
+			p.top().Namespace = p.tok.Data
+			if p.hasSelfClosingToken {
+				p.oe.pop()
+				p.acknowledgeSelfClosingTag()
+			}
+			return true
+		case a.Caption, a.Col, a.Colgroup, a.Frame, a.Head, a.Tbody, a.Td, a.Tfoot, a.Th, a.Thead, a.Tr:
+			// Ignore the token.
+		default:
+			p.reconstructActiveFormattingElements()
+			p.addElement()
+		}
+	case EndTagToken:
+		switch p.tok.DataAtom {
+		case a.Body:
+			if p.elementInScope(defaultScope, a.Body) {
+				p.im = afterBodyIM
+			}
+		case a.Html:
+			if p.elementInScope(defaultScope, a.Body) {
+				p.parseImpliedToken(EndTagToken, a.Body, a.Body.String())
+				return false
+			}
+			return true
+		case a.Address, a.Article, a.Aside, a.Blockquote, a.Button, a.Center, a.Details, a.Dir, a.Div, a.Dl, a.Fieldset, a.Figcaption, a.Figure, a.Footer, a.Header, a.Hgroup, a.Listing, a.Menu, a.Nav, a.Ol, a.Pre, a.Section, a.Summary, a.Ul:
+			p.popUntil(defaultScope, p.tok.DataAtom)
+		case a.Form:
+			node := p.form
+			p.form = nil
+			i := p.indexOfElementInScope(defaultScope, a.Form)
+			if node == nil || i == -1 || p.oe[i] != node {
+				// Ignore the token.
+				return true
+			}
+			p.generateImpliedEndTags()
+			p.oe.remove(node)
+		case a.P:
+			if !p.elementInScope(buttonScope, a.P) {
+				p.parseImpliedToken(StartTagToken, a.P, a.P.String())
+			}
+			p.popUntil(buttonScope, a.P)
+		case a.Li:
+			p.popUntil(listItemScope, a.Li)
+		case a.Dd, a.Dt:
+			p.popUntil(defaultScope, p.tok.DataAtom)
+		case a.H1, a.H2, a.H3, a.H4, a.H5, a.H6:
+			p.popUntil(defaultScope, a.H1, a.H2, a.H3, a.H4, a.H5, a.H6)
+		case a.A, a.B, a.Big, a.Code, a.Em, a.Font, a.I, a.Nobr, a.S, a.Small, a.Strike, a.Strong, a.Tt, a.U:
+			p.inBodyEndTagFormatting(p.tok.DataAtom)
+		case a.Applet, a.Marquee, a.Object:
+			if p.popUntil(defaultScope, p.tok.DataAtom) {
+				p.clearActiveFormattingElements()
+			}
+		case a.Br:
+			p.tok.Type = StartTagToken
+			return false
+		default:
+			p.inBodyEndTagOther(p.tok.DataAtom)
+		}
+	case CommentToken:
+		p.addChild(&Node{
+			Type: CommentNode,
+			Data: p.tok.Data,
+		})
+	}
+
+	return true
+}
+
+func (p *parser) inBodyEndTagFormatting(tagAtom a.Atom) {
+	// This is the "adoption agency" algorithm, described at
+	// http://www.whatwg.org/specs/web-apps/current-work/multipage/tokenization.html#adoptionAgency
+
+	// TODO: this is a fairly literal line-by-line translation of that algorithm.
+	// Once the code successfully parses the comprehensive test suite, we should
+	// refactor this code to be more idiomatic.
+
+	// Steps 1-3. The outer loop.
+	for i := 0; i < 8; i++ {
+		// Step 4. Find the formatting element.
+		var formattingElement *Node
+		for j := len(p.afe) - 1; j >= 0; j-- {
+			if p.afe[j].Type == scopeMarkerNode {
+				break
+			}
+			if p.afe[j].DataAtom == tagAtom {
+				formattingElement = p.afe[j]
+				break
+			}
+		}
+		if formattingElement == nil {
+			p.inBodyEndTagOther(tagAtom)
+			return
+		}
+		feIndex := p.oe.index(formattingElement)
+		if feIndex == -1 {
+			p.afe.remove(formattingElement)
+			return
+		}
+		if !p.elementInScope(defaultScope, tagAtom) {
+			// Ignore the tag.
+			return
+		}
+
+		// Steps 5-6. Find the furthest block.
+		var furthestBlock *Node
+		for _, e := range p.oe[feIndex:] {
+			if isSpecialElement(e) {
+				furthestBlock = e
+				break
+			}
+		}
+		if furthestBlock == nil {
+			e := p.oe.pop()
+			for e != formattingElement {
+				e = p.oe.pop()
+			}
+			p.afe.remove(e)
+			return
+		}
+
+		// Steps 7-8. Find the common ancestor and bookmark node.
+		commonAncestor := p.oe[feIndex-1]
+		bookmark := p.afe.index(formattingElement)
+
+		// Step 9. The inner loop. Find the lastNode to reparent.
+		lastNode := furthestBlock
+		node := furthestBlock
+		x := p.oe.index(node)
+		// Steps 9.1-9.3.
+		for j := 0; j < 3; j++ {
+			// Step 9.4.
+			x--
+			node = p.oe[x]
+			// Step 9.5.
+			if p.afe.index(node) == -1 {
+				p.oe.remove(node)
+				continue
+			}
+			// Step 9.6.
+			if node == formattingElement {
+				break
+			}
+			// Step 9.7.
+			clone := node.clone()
+			p.afe[p.afe.index(node)] = clone
+			p.oe[p.oe.index(node)] = clone
+			node = clone
+			// Step 9.8.
+			if lastNode == furthestBlock {
+				bookmark = p.afe.index(node) + 1
+			}
+			// Step 9.9.
+			if lastNode.Parent != nil {
+				lastNode.Parent.RemoveChild(lastNode)
+			}
+			node.AppendChild(lastNode)
+			// Step 9.10.
+			lastNode = node
+		}
+
+		// Step 10. Reparent lastNode to the common ancestor,
+		// or for misnested table nodes, to the foster parent.
+		if lastNode.Parent != nil {
+			lastNode.Parent.RemoveChild(lastNode)
+		}
+		switch commonAncestor.DataAtom {
+		case a.Table, a.Tbody, a.Tfoot, a.Thead, a.Tr:
+			p.fosterParent(lastNode)
+		default:
+			commonAncestor.AppendChild(lastNode)
+		}
+
+		// Steps 11-13. Reparent nodes from the furthest block's children
+		// to a clone of the formatting element.
+		clone := formattingElement.clone()
+		reparentChildren(clone, furthestBlock)
+		furthestBlock.AppendChild(clone)
+
+		// Step 14. Fix up the list of active formatting elements.
+		if oldLoc := p.afe.index(formattingElement); oldLoc != -1 && oldLoc < bookmark {
+			// Move the bookmark with the rest of the list.
+			bookmark--
+		}
+		p.afe.remove(formattingElement)
+		p.afe.insert(bookmark, clone)
+
+		// Step 15. Fix up the stack of open elements.
+		p.oe.remove(formattingElement)
+		p.oe.insert(p.oe.index(furthestBlock)+1, clone)
+	}
+}
+
+// inBodyEndTagOther performs the "any other end tag" algorithm for inBodyIM.
+func (p *parser) inBodyEndTagOther(tagAtom a.Atom) {
+	for i := len(p.oe) - 1; i >= 0; i-- {
+		if p.oe[i].DataAtom == tagAtom {
+			p.oe = p.oe[:i]
+			break
+		}
+		if isSpecialElement(p.oe[i]) {
+			break
+		}
+	}
+}
+
+// Section 12.2.5.4.8.
+func textIM(p *parser) bool {
+	switch p.tok.Type {
+	case ErrorToken:
+		p.oe.pop()
+	case TextToken:
+		d := p.tok.Data
+		if n := p.oe.top(); n.DataAtom == a.Textarea && n.FirstChild == nil {
+			// Ignore a newline at the start of a -->
+#errors
+#document
+| 
+|   
+|   
+|     -->
+#errors
+#document
+| 
+|   
+|   
+|     
+#errors
+Line: 1 Col: 10 Unexpected start tag (textarea). Expected DOCTYPE.
+#document
+| 
+|   
+|   
+|     
+#errors
+Line: 1 Col: 9 Unexpected end tag (strong). Expected DOCTYPE.
+Line: 1 Col: 9 Unexpected end tag (strong) after the (implied) root element.
+Line: 1 Col: 13 Unexpected end tag (b) after the (implied) root element.
+Line: 1 Col: 18 Unexpected end tag (em) after the (implied) root element.
+Line: 1 Col: 22 Unexpected end tag (i) after the (implied) root element.
+Line: 1 Col: 26 Unexpected end tag (u) after the (implied) root element.
+Line: 1 Col: 35 Unexpected end tag (strike) after the (implied) root element.
+Line: 1 Col: 39 Unexpected end tag (s) after the (implied) root element.
+Line: 1 Col: 47 Unexpected end tag (blink) after the (implied) root element.
+Line: 1 Col: 52 Unexpected end tag (tt) after the (implied) root element.
+Line: 1 Col: 58 Unexpected end tag (pre) after the (implied) root element.
+Line: 1 Col: 64 Unexpected end tag (big) after the (implied) root element.
+Line: 1 Col: 72 Unexpected end tag (small) after the (implied) root element.
+Line: 1 Col: 79 Unexpected end tag (font) after the (implied) root element.
+Line: 1 Col: 88 Unexpected end tag (select) after the (implied) root element.
+Line: 1 Col: 93 Unexpected end tag (h1) after the (implied) root element.
+Line: 1 Col: 98 Unexpected end tag (h2) after the (implied) root element.
+Line: 1 Col: 103 Unexpected end tag (h3) after the (implied) root element.
+Line: 1 Col: 108 Unexpected end tag (h4) after the (implied) root element.
+Line: 1 Col: 113 Unexpected end tag (h5) after the (implied) root element.
+Line: 1 Col: 118 Unexpected end tag (h6) after the (implied) root element.
+Line: 1 Col: 125 Unexpected end tag (body) after the (implied) root element.
+Line: 1 Col: 130 Unexpected end tag (br). Treated as br element.
+Line: 1 Col: 134 End tag (a) violates step 1, paragraph 1 of the adoption agency algorithm.
+Line: 1 Col: 140 This element (img) has no end tag.
+Line: 1 Col: 148 Unexpected end tag (title). Ignored.
+Line: 1 Col: 155 Unexpected end tag (span). Ignored.
+Line: 1 Col: 163 Unexpected end tag (style). Ignored.
+Line: 1 Col: 172 Unexpected end tag (script). Ignored.
+Line: 1 Col: 180 Unexpected end tag (table). Ignored.
+Line: 1 Col: 185 Unexpected end tag (th). Ignored.
+Line: 1 Col: 190 Unexpected end tag (td). Ignored.
+Line: 1 Col: 195 Unexpected end tag (tr). Ignored.
+Line: 1 Col: 203 This element (frame) has no end tag.
+Line: 1 Col: 210 This element (area) has no end tag.
+Line: 1 Col: 217 Unexpected end tag (link). Ignored.
+Line: 1 Col: 225 This element (param) has no end tag.
+Line: 1 Col: 230 This element (hr) has no end tag.
+Line: 1 Col: 238 This element (input) has no end tag.
+Line: 1 Col: 244 Unexpected end tag (col). Ignored.
+Line: 1 Col: 251 Unexpected end tag (base). Ignored.
+Line: 1 Col: 258 Unexpected end tag (meta). Ignored.
+Line: 1 Col: 269 This element (basefont) has no end tag.
+Line: 1 Col: 279 This element (bgsound) has no end tag.
+Line: 1 Col: 287 This element (embed) has no end tag.
+Line: 1 Col: 296 This element (spacer) has no end tag.
+Line: 1 Col: 300 Unexpected end tag (p). Ignored.
+Line: 1 Col: 305 End tag (dd) seen too early. Expected other end tag.
+Line: 1 Col: 310 End tag (dt) seen too early. Expected other end tag.
+Line: 1 Col: 320 Unexpected end tag (caption). Ignored.
+Line: 1 Col: 331 Unexpected end tag (colgroup). Ignored.
+Line: 1 Col: 339 Unexpected end tag (tbody). Ignored.
+Line: 1 Col: 347 Unexpected end tag (tfoot). Ignored.
+Line: 1 Col: 355 Unexpected end tag (thead). Ignored.
+Line: 1 Col: 365 End tag (address) seen too early. Expected other end tag.
+Line: 1 Col: 378 End tag (blockquote) seen too early. Expected other end tag.
+Line: 1 Col: 387 End tag (center) seen too early. Expected other end tag.
+Line: 1 Col: 393 Unexpected end tag (dir). Ignored.
+Line: 1 Col: 399 End tag (div) seen too early. Expected other end tag.
+Line: 1 Col: 404 End tag (dl) seen too early. Expected other end tag.
+Line: 1 Col: 415 End tag (fieldset) seen too early. Expected other end tag.
+Line: 1 Col: 425 End tag (listing) seen too early. Expected other end tag.
+Line: 1 Col: 432 End tag (menu) seen too early. Expected other end tag.
+Line: 1 Col: 437 End tag (ol) seen too early. Expected other end tag.
+Line: 1 Col: 442 End tag (ul) seen too early. Expected other end tag.
+Line: 1 Col: 447 End tag (li) seen too early. Expected other end tag.
+Line: 1 Col: 454 End tag (nobr) violates step 1, paragraph 1 of the adoption agency algorithm.
+Line: 1 Col: 460 This element (wbr) has no end tag.
+Line: 1 Col: 476 End tag (button) seen too early. Expected other end tag.
+Line: 1 Col: 486 End tag (marquee) seen too early. Expected other end tag.
+Line: 1 Col: 495 End tag (object) seen too early. Expected other end tag.
+Line: 1 Col: 513 Unexpected end tag (html). Ignored.
+Line: 1 Col: 513 Unexpected end tag (frameset). Ignored.
+Line: 1 Col: 520 Unexpected end tag (head). Ignored.
+Line: 1 Col: 529 Unexpected end tag (iframe). Ignored.
+Line: 1 Col: 537 This element (image) has no end tag.
+Line: 1 Col: 547 This element (isindex) has no end tag.
+Line: 1 Col: 557 Unexpected end tag (noembed). Ignored.
+Line: 1 Col: 568 Unexpected end tag (noframes). Ignored.
+Line: 1 Col: 579 Unexpected end tag (noscript). Ignored.
+Line: 1 Col: 590 Unexpected end tag (optgroup). Ignored.
+Line: 1 Col: 599 Unexpected end tag (option). Ignored.
+Line: 1 Col: 611 Unexpected end tag (plaintext). Ignored.
+Line: 1 Col: 622 Unexpected end tag (textarea). Ignored.
+#document
+| 
+|   
+|   
+|     
+|

+ +#data +

+#errors +Line: 1 Col: 7 Unexpected start tag (table). Expected DOCTYPE. +Line: 1 Col: 20 Unexpected end tag (strong) in table context caused voodoo mode. +Line: 1 Col: 20 End tag (strong) violates step 1, paragraph 1 of the adoption agency algorithm. +Line: 1 Col: 24 Unexpected end tag (b) in table context caused voodoo mode. +Line: 1 Col: 24 End tag (b) violates step 1, paragraph 1 of the adoption agency algorithm. +Line: 1 Col: 29 Unexpected end tag (em) in table context caused voodoo mode. +Line: 1 Col: 29 End tag (em) violates step 1, paragraph 1 of the adoption agency algorithm. +Line: 1 Col: 33 Unexpected end tag (i) in table context caused voodoo mode. +Line: 1 Col: 33 End tag (i) violates step 1, paragraph 1 of the adoption agency algorithm. +Line: 1 Col: 37 Unexpected end tag (u) in table context caused voodoo mode. +Line: 1 Col: 37 End tag (u) violates step 1, paragraph 1 of the adoption agency algorithm. +Line: 1 Col: 46 Unexpected end tag (strike) in table context caused voodoo mode. +Line: 1 Col: 46 End tag (strike) violates step 1, paragraph 1 of the adoption agency algorithm. +Line: 1 Col: 50 Unexpected end tag (s) in table context caused voodoo mode. +Line: 1 Col: 50 End tag (s) violates step 1, paragraph 1 of the adoption agency algorithm. +Line: 1 Col: 58 Unexpected end tag (blink) in table context caused voodoo mode. +Line: 1 Col: 58 Unexpected end tag (blink). Ignored. +Line: 1 Col: 63 Unexpected end tag (tt) in table context caused voodoo mode. +Line: 1 Col: 63 End tag (tt) violates step 1, paragraph 1 of the adoption agency algorithm. +Line: 1 Col: 69 Unexpected end tag (pre) in table context caused voodoo mode. +Line: 1 Col: 69 End tag (pre) seen too early. Expected other end tag. +Line: 1 Col: 75 Unexpected end tag (big) in table context caused voodoo mode. +Line: 1 Col: 75 End tag (big) violates step 1, paragraph 1 of the adoption agency algorithm. +Line: 1 Col: 83 Unexpected end tag (small) in table context caused voodoo mode. +Line: 1 Col: 83 End tag (small) violates step 1, paragraph 1 of the adoption agency algorithm. +Line: 1 Col: 90 Unexpected end tag (font) in table context caused voodoo mode. +Line: 1 Col: 90 End tag (font) violates step 1, paragraph 1 of the adoption agency algorithm. +Line: 1 Col: 99 Unexpected end tag (select) in table context caused voodoo mode. +Line: 1 Col: 99 Unexpected end tag (select). Ignored. +Line: 1 Col: 104 Unexpected end tag (h1) in table context caused voodoo mode. +Line: 1 Col: 104 End tag (h1) seen too early. Expected other end tag. +Line: 1 Col: 109 Unexpected end tag (h2) in table context caused voodoo mode. +Line: 1 Col: 109 End tag (h2) seen too early. Expected other end tag. +Line: 1 Col: 114 Unexpected end tag (h3) in table context caused voodoo mode. +Line: 1 Col: 114 End tag (h3) seen too early. Expected other end tag. +Line: 1 Col: 119 Unexpected end tag (h4) in table context caused voodoo mode. +Line: 1 Col: 119 End tag (h4) seen too early. Expected other end tag. +Line: 1 Col: 124 Unexpected end tag (h5) in table context caused voodoo mode. +Line: 1 Col: 124 End tag (h5) seen too early. Expected other end tag. +Line: 1 Col: 129 Unexpected end tag (h6) in table context caused voodoo mode. +Line: 1 Col: 129 End tag (h6) seen too early. Expected other end tag. +Line: 1 Col: 136 Unexpected end tag (body) in the table row phase. Ignored. +Line: 1 Col: 141 Unexpected end tag (br) in table context caused voodoo mode. +Line: 1 Col: 141 Unexpected end tag (br). Treated as br element. +Line: 1 Col: 145 Unexpected end tag (a) in table context caused voodoo mode. +Line: 1 Col: 145 End tag (a) violates step 1, paragraph 1 of the adoption agency algorithm. +Line: 1 Col: 151 Unexpected end tag (img) in table context caused voodoo mode. +Line: 1 Col: 151 This element (img) has no end tag. +Line: 1 Col: 159 Unexpected end tag (title) in table context caused voodoo mode. +Line: 1 Col: 159 Unexpected end tag (title). Ignored. +Line: 1 Col: 166 Unexpected end tag (span) in table context caused voodoo mode. +Line: 1 Col: 166 Unexpected end tag (span). Ignored. +Line: 1 Col: 174 Unexpected end tag (style) in table context caused voodoo mode. +Line: 1 Col: 174 Unexpected end tag (style). Ignored. +Line: 1 Col: 183 Unexpected end tag (script) in table context caused voodoo mode. +Line: 1 Col: 183 Unexpected end tag (script). Ignored. +Line: 1 Col: 196 Unexpected end tag (th). Ignored. +Line: 1 Col: 201 Unexpected end tag (td). Ignored. +Line: 1 Col: 206 Unexpected end tag (tr). Ignored. +Line: 1 Col: 214 This element (frame) has no end tag. +Line: 1 Col: 221 This element (area) has no end tag. +Line: 1 Col: 228 Unexpected end tag (link). Ignored. +Line: 1 Col: 236 This element (param) has no end tag. +Line: 1 Col: 241 This element (hr) has no end tag. +Line: 1 Col: 249 This element (input) has no end tag. +Line: 1 Col: 255 Unexpected end tag (col). Ignored. +Line: 1 Col: 262 Unexpected end tag (base). Ignored. +Line: 1 Col: 269 Unexpected end tag (meta). Ignored. +Line: 1 Col: 280 This element (basefont) has no end tag. +Line: 1 Col: 290 This element (bgsound) has no end tag. +Line: 1 Col: 298 This element (embed) has no end tag. +Line: 1 Col: 307 This element (spacer) has no end tag. +Line: 1 Col: 311 Unexpected end tag (p). Ignored. +Line: 1 Col: 316 End tag (dd) seen too early. Expected other end tag. +Line: 1 Col: 321 End tag (dt) seen too early. Expected other end tag. +Line: 1 Col: 331 Unexpected end tag (caption). Ignored. +Line: 1 Col: 342 Unexpected end tag (colgroup). Ignored. +Line: 1 Col: 350 Unexpected end tag (tbody). Ignored. +Line: 1 Col: 358 Unexpected end tag (tfoot). Ignored. +Line: 1 Col: 366 Unexpected end tag (thead). Ignored. +Line: 1 Col: 376 End tag (address) seen too early. Expected other end tag. +Line: 1 Col: 389 End tag (blockquote) seen too early. Expected other end tag. +Line: 1 Col: 398 End tag (center) seen too early. Expected other end tag. +Line: 1 Col: 404 Unexpected end tag (dir). Ignored. +Line: 1 Col: 410 End tag (div) seen too early. Expected other end tag. +Line: 1 Col: 415 End tag (dl) seen too early. Expected other end tag. +Line: 1 Col: 426 End tag (fieldset) seen too early. Expected other end tag. +Line: 1 Col: 436 End tag (listing) seen too early. Expected other end tag. +Line: 1 Col: 443 End tag (menu) seen too early. Expected other end tag. +Line: 1 Col: 448 End tag (ol) seen too early. Expected other end tag. +Line: 1 Col: 453 End tag (ul) seen too early. Expected other end tag. +Line: 1 Col: 458 End tag (li) seen too early. Expected other end tag. +Line: 1 Col: 465 End tag (nobr) violates step 1, paragraph 1 of the adoption agency algorithm. +Line: 1 Col: 471 This element (wbr) has no end tag. +Line: 1 Col: 487 End tag (button) seen too early. Expected other end tag. +Line: 1 Col: 497 End tag (marquee) seen too early. Expected other end tag. +Line: 1 Col: 506 End tag (object) seen too early. Expected other end tag. +Line: 1 Col: 524 Unexpected end tag (html). Ignored. +Line: 1 Col: 524 Unexpected end tag (frameset). Ignored. +Line: 1 Col: 531 Unexpected end tag (head). Ignored. +Line: 1 Col: 540 Unexpected end tag (iframe). Ignored. +Line: 1 Col: 548 This element (image) has no end tag. +Line: 1 Col: 558 This element (isindex) has no end tag. +Line: 1 Col: 568 Unexpected end tag (noembed). Ignored. +Line: 1 Col: 579 Unexpected end tag (noframes). Ignored. +Line: 1 Col: 590 Unexpected end tag (noscript). Ignored. +Line: 1 Col: 601 Unexpected end tag (optgroup). Ignored. +Line: 1 Col: 610 Unexpected end tag (option). Ignored. +Line: 1 Col: 622 Unexpected end tag (plaintext). Ignored. +Line: 1 Col: 633 Unexpected end tag (textarea). Ignored. +#document +| +| +| +|
+| +| +| +|

+ +#data + +#errors +Line: 1 Col: 10 Unexpected start tag (frameset). Expected DOCTYPE. +Line: 1 Col: 10 Expected closing tag. Unexpected end of file. +#document +| +| +| diff --git a/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests10.dat b/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests10.dat new file mode 100644 index 0000000000..4f8df86f20 --- /dev/null +++ b/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests10.dat @@ -0,0 +1,799 @@ +#data + +#errors +#document +| +| +| +| +| + +#data +a +#errors +29: Bogus comment +#document +| +| +| +| +| +| + +#data + +#errors +#document +| +| +| +| +| + +#data + +#errors +35: Stray “svg” start tag. +42: Stray end tag “svg” +#document +| +| +| +| +| +#errors +43: Stray “svg” start tag. +50: Stray end tag “svg” +#document +| +| +| +| +|

+#errors +34: Start tag “svg” seen in “table”. +41: Stray end tag “svg”. +#document +| +| +| +| +| +| + +#data +
foo
+#errors +34: Start tag “svg” seen in “table”. +46: Stray end tag “g”. +53: Stray end tag “svg”. +#document +| +| +| +| +| +| +| "foo" +| + +#data +
foobar
+#errors +34: Start tag “svg” seen in “table”. +46: Stray end tag “g”. +58: Stray end tag “g”. +65: Stray end tag “svg”. +#document +| +| +| +| +| +| +| "foo" +| +| "bar" +| + +#data +
foobar
+#errors +41: Start tag “svg” seen in “table”. +53: Stray end tag “g”. +65: Stray end tag “g”. +72: Stray end tag “svg”. +#document +| +| +| +| +| +| +| "foo" +| +| "bar" +| +| + +#data +
foobar
+#errors +45: Start tag “svg” seen in “table”. +57: Stray end tag “g”. +69: Stray end tag “g”. +76: Stray end tag “svg”. +#document +| +| +| +| +| +| +| "foo" +| +| "bar" +| +| +| + +#data +
foobar
+#errors +#document +| +| +| +| +| +| +| +|
+| +| +| "foo" +| +| "bar" + +#data +
foobar

baz

+#errors +#document +| +| +| +| +| +| +| +|
+| +| +| "foo" +| +| "bar" +|

+| "baz" + +#data +
foobar

baz

+#errors +#document +| +| +| +| +| +|
+| +| +| "foo" +| +| "bar" +|

+| "baz" + +#data +
foobar

baz

quux +#errors +70: HTML start tag “p” in a foreign namespace context. +81: “table” closed but “caption” was still open. +#document +| +| +| +| +| +|
+| +| +| "foo" +| +| "bar" +|

+| "baz" +|

+| "quux" + +#data +
foobarbaz

quux +#errors +78: “table” closed but “caption” was still open. +78: Unclosed elements on stack. +#document +| +| +| +| +| +|
+| +| +| "foo" +| +| "bar" +| "baz" +|

+| "quux" + +#data +foobar

baz

quux +#errors +44: Start tag “svg” seen in “table”. +56: Stray end tag “g”. +68: Stray end tag “g”. +71: HTML start tag “p” in a foreign namespace context. +71: Start tag “p” seen in “table”. +#document +| +| +| +| +| +| +| "foo" +| +| "bar" +|

+| "baz" +| +| +|

+| "quux" + +#data +

quux +#errors +50: Stray “svg” start tag. +54: Stray “g” start tag. +62: Stray end tag “g” +66: Stray “g” start tag. +74: Stray end tag “g” +77: Stray “p” start tag. +88: “table” end tag with “select” open. +#document +| +| +| +| +| +| +| +|
+|

quux +#errors +36: Start tag “select” seen in “table”. +42: Stray “svg” start tag. +46: Stray “g” start tag. +54: Stray end tag “g” +58: Stray “g” start tag. +66: Stray end tag “g” +69: Stray “p” start tag. +80: “table” end tag with “select” open. +#document +| +| +| +| +| +|

+| "quux" + +#data +foobar

baz +#errors +41: Stray “svg” start tag. +68: HTML start tag “p” in a foreign namespace context. +#document +| +| +| +| +| +| +| "foo" +| +| "bar" +|

+| "baz" + +#data +foobar

baz +#errors +34: Stray “svg” start tag. +61: HTML start tag “p” in a foreign namespace context. +#document +| +| +| +| +| +| +| "foo" +| +| "bar" +|

+| "baz" + +#data +

+#errors +31: Stray “svg” start tag. +35: Stray “g” start tag. +40: Stray end tag “g” +44: Stray “g” start tag. +49: Stray end tag “g” +52: Stray “p” start tag. +58: Stray “span” start tag. +58: End of file seen and there were open elements. +#document +| +| +| +| + +#data +

+#errors +42: Stray “svg” start tag. +46: Stray “g” start tag. +51: Stray end tag “g” +55: Stray “g” start tag. +60: Stray end tag “g” +63: Stray “p” start tag. +69: Stray “span” start tag. +#document +| +| +| +| + +#data + +#errors +#document +| +| +| +| +| xlink:href="foo" +| +| xlink href="foo" + +#data + +#errors +#document +| +| +| +| +| xlink:href="foo" +| xml:lang="en" +| +| +| xlink href="foo" +| xml lang="en" + +#data + +#errors +#document +| +| +| +| +| xlink:href="foo" +| xml:lang="en" +| +| +| xlink href="foo" +| xml lang="en" + +#data +bar +#errors +#document +| +| +| +| +| xlink:href="foo" +| xml:lang="en" +| +| +| xlink href="foo" +| xml lang="en" +| "bar" + +#data + +#errors +#document +| +| +| +| + +#data +

a +#errors +#document +| +| +| +|
+| +| "a" + +#data +
a +#errors +#document +| +| +| +|
+| +| +| "a" + +#data +
+#errors +#document +| +| +| +|
+| +| +| + +#data +
a +#errors +#document +| +| +| +|
+| +| +| +| +| "a" + +#data +

a +#errors +#document +| +| +| +|

+| +| +| +|

+| "a" + +#data +
    a +#errors +40: HTML start tag “ul” in a foreign namespace context. +41: End of file in a foreign namespace context. +#document +| +| +| +| +| +| +|
    +| +|
      +| "a" + +#data +
        a +#errors +35: HTML start tag “ul” in a foreign namespace context. +36: End of file in a foreign namespace context. +#document +| +| +| +| +| +| +| +|
          +| "a" + +#data +

          +#errors +#document +| +| +| +| +|

          +| +| +|

          + +#data +

          +#errors +#document +| +| +| +| +|

          +| +| +|

          + +#data +

          +#errors +#document +| +| +| +|

          +| +| +| +|

          +|

          + +#data +
          +#errors +#document +| +| +| +| +| +|
          +| +|
          +| +| + +#data +
          +#errors +#document +| +| +| +| +| +| +| +|
          +|
          +| + +#data + +#errors +#document +| +| +| +| +| +| + +#data +

+#errors +#document +| +| +| +| +|
+| +| + +#data + +#errors +#document +| +| +| +| +| +| + +#data + +#errors +#document +| +| +| +| +| +| + +#data + +#errors +#document +| +| +| +| +| +| + +#data + +#errors +#document +| +| +| +| +| +| + +#data + +#errors +#document +| +| +| +| +| +| + +#data + +#errors +#document +| +| +| +| +| +| + +#data + +#errors +#document +| +| +| +| +| +| + +#data + +#errors +#document +| +| +| +| +| +| + +#data + +#errors +#document +| +| +| +| +| +| + +#data + +#errors +#document +| +| +| +| +| +| + +#data + +#errors +#document +| +| +| +| +| +| +| + +#data +
+#errors +#document +| +| +| +| +| +| +| +|
+| +| +| +| +| + +#data + +#errors +#document +| +| +| +| +| +| +| +| +| +| +| +| +| +| diff --git a/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests11.dat b/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests11.dat new file mode 100644 index 0000000000..638cde479f --- /dev/null +++ b/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests11.dat @@ -0,0 +1,482 @@ +#data + +#errors +#document +| +| +| +| +| +| attributeName="" +| attributeType="" +| baseFrequency="" +| baseProfile="" +| calcMode="" +| clipPathUnits="" +| contentScriptType="" +| contentStyleType="" +| diffuseConstant="" +| edgeMode="" +| externalResourcesRequired="" +| filterRes="" +| filterUnits="" +| glyphRef="" +| gradientTransform="" +| gradientUnits="" +| kernelMatrix="" +| kernelUnitLength="" +| keyPoints="" +| keySplines="" +| keyTimes="" +| lengthAdjust="" +| limitingConeAngle="" +| markerHeight="" +| markerUnits="" +| markerWidth="" +| maskContentUnits="" +| maskUnits="" +| numOctaves="" +| pathLength="" +| patternContentUnits="" +| patternTransform="" +| patternUnits="" +| pointsAtX="" +| pointsAtY="" +| pointsAtZ="" +| preserveAlpha="" +| preserveAspectRatio="" +| primitiveUnits="" +| refX="" +| refY="" +| repeatCount="" +| repeatDur="" +| requiredExtensions="" +| requiredFeatures="" +| specularConstant="" +| specularExponent="" +| spreadMethod="" +| startOffset="" +| stdDeviation="" +| stitchTiles="" +| surfaceScale="" +| systemLanguage="" +| tableValues="" +| targetX="" +| targetY="" +| textLength="" +| viewBox="" +| viewTarget="" +| xChannelSelector="" +| yChannelSelector="" +| zoomAndPan="" + +#data + +#errors +#document +| +| +| +| +| +| attributeName="" +| attributeType="" +| baseFrequency="" +| baseProfile="" +| calcMode="" +| clipPathUnits="" +| contentScriptType="" +| contentStyleType="" +| diffuseConstant="" +| edgeMode="" +| externalResourcesRequired="" +| filterRes="" +| filterUnits="" +| glyphRef="" +| gradientTransform="" +| gradientUnits="" +| kernelMatrix="" +| kernelUnitLength="" +| keyPoints="" +| keySplines="" +| keyTimes="" +| lengthAdjust="" +| limitingConeAngle="" +| markerHeight="" +| markerUnits="" +| markerWidth="" +| maskContentUnits="" +| maskUnits="" +| numOctaves="" +| pathLength="" +| patternContentUnits="" +| patternTransform="" +| patternUnits="" +| pointsAtX="" +| pointsAtY="" +| pointsAtZ="" +| preserveAlpha="" +| preserveAspectRatio="" +| primitiveUnits="" +| refX="" +| refY="" +| repeatCount="" +| repeatDur="" +| requiredExtensions="" +| requiredFeatures="" +| specularConstant="" +| specularExponent="" +| spreadMethod="" +| startOffset="" +| stdDeviation="" +| stitchTiles="" +| surfaceScale="" +| systemLanguage="" +| tableValues="" +| targetX="" +| targetY="" +| textLength="" +| viewBox="" +| viewTarget="" +| xChannelSelector="" +| yChannelSelector="" +| zoomAndPan="" + +#data + +#errors +#document +| +| +| +| +| +| attributeName="" +| attributeType="" +| baseFrequency="" +| baseProfile="" +| calcMode="" +| clipPathUnits="" +| contentScriptType="" +| contentStyleType="" +| diffuseConstant="" +| edgeMode="" +| externalResourcesRequired="" +| filterRes="" +| filterUnits="" +| glyphRef="" +| gradientTransform="" +| gradientUnits="" +| kernelMatrix="" +| kernelUnitLength="" +| keyPoints="" +| keySplines="" +| keyTimes="" +| lengthAdjust="" +| limitingConeAngle="" +| markerHeight="" +| markerUnits="" +| markerWidth="" +| maskContentUnits="" +| maskUnits="" +| numOctaves="" +| pathLength="" +| patternContentUnits="" +| patternTransform="" +| patternUnits="" +| pointsAtX="" +| pointsAtY="" +| pointsAtZ="" +| preserveAlpha="" +| preserveAspectRatio="" +| primitiveUnits="" +| refX="" +| refY="" +| repeatCount="" +| repeatDur="" +| requiredExtensions="" +| requiredFeatures="" +| specularConstant="" +| specularExponent="" +| spreadMethod="" +| startOffset="" +| stdDeviation="" +| stitchTiles="" +| surfaceScale="" +| systemLanguage="" +| tableValues="" +| targetX="" +| targetY="" +| textLength="" +| viewBox="" +| viewTarget="" +| xChannelSelector="" +| yChannelSelector="" +| zoomAndPan="" + +#data + +#errors +#document +| +| +| +| +| +| attributename="" +| attributetype="" +| basefrequency="" +| baseprofile="" +| calcmode="" +| clippathunits="" +| contentscripttype="" +| contentstyletype="" +| diffuseconstant="" +| edgemode="" +| externalresourcesrequired="" +| filterres="" +| filterunits="" +| glyphref="" +| gradienttransform="" +| gradientunits="" +| kernelmatrix="" +| kernelunitlength="" +| keypoints="" +| keysplines="" +| keytimes="" +| lengthadjust="" +| limitingconeangle="" +| markerheight="" +| markerunits="" +| markerwidth="" +| maskcontentunits="" +| maskunits="" +| numoctaves="" +| pathlength="" +| patterncontentunits="" +| patterntransform="" +| patternunits="" +| pointsatx="" +| pointsaty="" +| pointsatz="" +| preservealpha="" +| preserveaspectratio="" +| primitiveunits="" +| refx="" +| refy="" +| repeatcount="" +| repeatdur="" +| requiredextensions="" +| requiredfeatures="" +| specularconstant="" +| specularexponent="" +| spreadmethod="" +| startoffset="" +| stddeviation="" +| stitchtiles="" +| surfacescale="" +| systemlanguage="" +| tablevalues="" +| targetx="" +| targety="" +| textlength="" +| viewbox="" +| viewtarget="" +| xchannelselector="" +| ychannelselector="" +| zoomandpan="" + +#data + +#errors +#document +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| + +#data + +#errors +#document +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| + +#data + +#errors +#document +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| + +#data + +#errors +#document +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| + +#data + +#errors +#document +| +| +| +| +| +| diff --git a/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests12.dat b/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests12.dat new file mode 100644 index 0000000000..63107d277b --- /dev/null +++ b/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests12.dat @@ -0,0 +1,62 @@ +#data +

foobazeggs

spam

quuxbar +#errors +#document +| +| +| +| +|

+| "foo" +| +| +| +| "baz" +| +| +| +| +| "eggs" +| +| +|

+| "spam" +| +| +| +|
+| +| +| "quux" +| "bar" + +#data +foobazeggs

spam
quuxbar +#errors +#document +| +| +| +| +| "foo" +| +| +| +| "baz" +| +| +| +| +| "eggs" +| +| +|

+| "spam" +| +| +| +|
+| +| +| "quux" +| "bar" diff --git a/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests14.dat b/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests14.dat new file mode 100644 index 0000000000..b8713f8858 --- /dev/null +++ b/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests14.dat @@ -0,0 +1,74 @@ +#data + +#errors +#document +| +| +| +| +| + +#data + +#errors +#document +| +| +| +| +| +| + +#data + +#errors +15: Unexpected start tag html +#document +| +| +| abc:def="gh" +| +| +| + +#data + +#errors +15: Unexpected start tag html +#document +| +| +| xml:lang="bar" +| +| + +#data + +#errors +#document +| +| +| 123="456" +| +| + +#data + +#errors +#document +| +| +| 123="456" +| 789="012" +| +| + +#data + +#errors +#document +| +| +| +| +| 789="012" diff --git a/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests15.dat b/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests15.dat new file mode 100644 index 0000000000..6ce1c0d166 --- /dev/null +++ b/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests15.dat @@ -0,0 +1,208 @@ +#data +

X +#errors +Line: 1 Col: 31 Unexpected end tag (p). Ignored. +Line: 1 Col: 36 Expected closing tag. Unexpected end of file. +#document +| +| +| +| +|

+| +| +| +| +| +| +| " " +|

+| "X" + +#data +

+

X +#errors +Line: 1 Col: 3 Unexpected start tag (p). Expected DOCTYPE. +Line: 1 Col: 16 Unexpected end tag (p). Ignored. +Line: 2 Col: 4 Expected closing tag. Unexpected end of file. +#document +| +| +| +|

+| +| +| +| +| +| +| " +" +|

+| "X" + +#data + +#errors +Line: 1 Col: 22 Unexpected end tag (html) after the (implied) root element. +#document +| +| +| +| +| " " + +#data + +#errors +Line: 1 Col: 22 Unexpected end tag (body) after the (implied) root element. +#document +| +| +| +| +| + +#data + +#errors +Line: 1 Col: 6 Unexpected start tag (html). Expected DOCTYPE. +Line: 1 Col: 13 Unexpected end tag (html) after the (implied) root element. +#document +| +| +| +| + +#data +X +#errors +Line: 1 Col: 22 Unexpected end tag (body) after the (implied) root element. +#document +| +| +| +| +| +| "X" + +#data +<!doctype html><table> X<meta></table> +#errors +Line: 1 Col: 24 Unexpected non-space characters in table context caused voodoo mode. +Line: 1 Col: 30 Unexpected start tag (meta) in table context caused voodoo mode. +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| " X" +| <meta> +| <table> + +#data +<!doctype html><table> x</table> +#errors +Line: 1 Col: 24 Unexpected non-space characters in table context caused voodoo mode. +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| " x" +| <table> + +#data +<!doctype html><table> x </table> +#errors +Line: 1 Col: 25 Unexpected non-space characters in table context caused voodoo mode. +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| " x " +| <table> + +#data +<!doctype html><table><tr> x</table> +#errors +Line: 1 Col: 28 Unexpected non-space characters in table context caused voodoo mode. +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| " x" +| <table> +| <tbody> +| <tr> + +#data +<!doctype html><table>X<style> <tr>x </style> </table> +#errors +Line: 1 Col: 23 Unexpected non-space characters in table context caused voodoo mode. +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| "X" +| <table> +| <style> +| " <tr>x " +| " " + +#data +<!doctype html><div><table><a>foo</a> <tr><td>bar</td> </tr></table></div> +#errors +Line: 1 Col: 30 Unexpected start tag (a) in table context caused voodoo mode. +Line: 1 Col: 37 Unexpected end tag (a) in table context caused voodoo mode. +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <div> +| <a> +| "foo" +| <table> +| " " +| <tbody> +| <tr> +| <td> +| "bar" +| " " + +#data +<frame></frame></frame><frameset><frame><frameset><frame></frameset><noframes></frameset><noframes> +#errors +6: Start tag seen without seeing a doctype first. Expected “<!DOCTYPE html>”. +13: Stray start tag “frame”. +21: Stray end tag “frame”. +29: Stray end tag “frame”. +39: “frameset” start tag after “body” already open. +105: End of file seen inside an [R]CDATA element. +105: End of file seen and there were open elements. +XXX: These errors are wrong, please fix me! +#document +| <html> +| <head> +| <frameset> +| <frame> +| <frameset> +| <frame> +| <noframes> +| "</frameset><noframes>" + +#data +<!DOCTYPE html><object></html> +#errors +1: Expected closing tag. Unexpected end of file +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <object> diff --git a/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests16.dat b/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests16.dat new file mode 100644 index 0000000000..c8ef66f0e6 --- /dev/null +++ b/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests16.dat @@ -0,0 +1,2299 @@ +#data +<!doctype html><script> +#errors +Line: 1 Col: 23 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| <body> + +#data +<!doctype html><script>a +#errors +Line: 1 Col: 24 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "a" +| <body> + +#data +<!doctype html><script>< +#errors +Line: 1 Col: 24 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<" +| <body> + +#data +<!doctype html><script></ +#errors +Line: 1 Col: 25 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "</" +| <body> + +#data +<!doctype html><script></S +#errors +Line: 1 Col: 26 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "</S" +| <body> + +#data +<!doctype html><script></SC +#errors +Line: 1 Col: 27 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "</SC" +| <body> + +#data +<!doctype html><script></SCR +#errors +Line: 1 Col: 28 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "</SCR" +| <body> + +#data +<!doctype html><script></SCRI +#errors +Line: 1 Col: 29 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "</SCRI" +| <body> + +#data +<!doctype html><script></SCRIP +#errors +Line: 1 Col: 30 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "</SCRIP" +| <body> + +#data +<!doctype html><script></SCRIPT +#errors +Line: 1 Col: 31 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "</SCRIPT" +| <body> + +#data +<!doctype html><script></SCRIPT +#errors +Line: 1 Col: 32 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| <body> + +#data +<!doctype html><script></s +#errors +Line: 1 Col: 26 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "</s" +| <body> + +#data +<!doctype html><script></sc +#errors +Line: 1 Col: 27 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "</sc" +| <body> + +#data +<!doctype html><script></scr +#errors +Line: 1 Col: 28 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "</scr" +| <body> + +#data +<!doctype html><script></scri +#errors +Line: 1 Col: 29 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "</scri" +| <body> + +#data +<!doctype html><script></scrip +#errors +Line: 1 Col: 30 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "</scrip" +| <body> + +#data +<!doctype html><script></script +#errors +Line: 1 Col: 31 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "</script" +| <body> + +#data +<!doctype html><script></script +#errors +Line: 1 Col: 32 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| <body> + +#data +<!doctype html><script><! +#errors +Line: 1 Col: 25 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!" +| <body> + +#data +<!doctype html><script><!a +#errors +Line: 1 Col: 26 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!a" +| <body> + +#data +<!doctype html><script><!- +#errors +Line: 1 Col: 26 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!-" +| <body> + +#data +<!doctype html><script><!-a +#errors +Line: 1 Col: 27 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!-a" +| <body> + +#data +<!doctype html><script><!-- +#errors +Line: 1 Col: 27 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--" +| <body> + +#data +<!doctype html><script><!--a +#errors +Line: 1 Col: 28 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--a" +| <body> + +#data +<!doctype html><script><!--< +#errors +Line: 1 Col: 28 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<" +| <body> + +#data +<!doctype html><script><!--<a +#errors +Line: 1 Col: 29 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<a" +| <body> + +#data +<!doctype html><script><!--</ +#errors +Line: 1 Col: 27 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--</" +| <body> + +#data +<!doctype html><script><!--</script +#errors +Line: 1 Col: 35 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--</script" +| <body> + +#data +<!doctype html><script><!--</script +#errors +Line: 1 Col: 36 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--" +| <body> + +#data +<!doctype html><script><!--<s +#errors +Line: 1 Col: 29 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<s" +| <body> + +#data +<!doctype html><script><!--<script +#errors +Line: 1 Col: 34 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script" +| <body> + +#data +<!doctype html><script><!--<script +#errors +Line: 1 Col: 35 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script " +| <body> + +#data +<!doctype html><script><!--<script < +#errors +Line: 1 Col: 36 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script <" +| <body> + +#data +<!doctype html><script><!--<script <a +#errors +Line: 1 Col: 37 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script <a" +| <body> + +#data +<!doctype html><script><!--<script </ +#errors +Line: 1 Col: 37 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script </" +| <body> + +#data +<!doctype html><script><!--<script </s +#errors +Line: 1 Col: 38 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script </s" +| <body> + +#data +<!doctype html><script><!--<script </script +#errors +Line: 1 Col: 43 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script </script" +| <body> + +#data +<!doctype html><script><!--<script </scripta +#errors +Line: 1 Col: 44 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script </scripta" +| <body> + +#data +<!doctype html><script><!--<script </script +#errors +Line: 1 Col: 44 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script </script " +| <body> + +#data +<!doctype html><script><!--<script </script> +#errors +Line: 1 Col: 44 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script </script>" +| <body> + +#data +<!doctype html><script><!--<script </script/ +#errors +Line: 1 Col: 44 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script </script/" +| <body> + +#data +<!doctype html><script><!--<script </script < +#errors +Line: 1 Col: 45 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script </script <" +| <body> + +#data +<!doctype html><script><!--<script </script <a +#errors +Line: 1 Col: 46 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script </script <a" +| <body> + +#data +<!doctype html><script><!--<script </script </ +#errors +Line: 1 Col: 46 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script </script </" +| <body> + +#data +<!doctype html><script><!--<script </script </script +#errors +Line: 1 Col: 52 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script </script </script" +| <body> + +#data +<!doctype html><script><!--<script </script </script +#errors +Line: 1 Col: 53 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script </script " +| <body> + +#data +<!doctype html><script><!--<script </script </script/ +#errors +Line: 1 Col: 53 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script </script " +| <body> + +#data +<!doctype html><script><!--<script </script </script> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script </script " +| <body> + +#data +<!doctype html><script><!--<script - +#errors +Line: 1 Col: 36 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script -" +| <body> + +#data +<!doctype html><script><!--<script -a +#errors +Line: 1 Col: 37 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script -a" +| <body> + +#data +<!doctype html><script><!--<script -< +#errors +Line: 1 Col: 37 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script -<" +| <body> + +#data +<!doctype html><script><!--<script -- +#errors +Line: 1 Col: 37 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script --" +| <body> + +#data +<!doctype html><script><!--<script --a +#errors +Line: 1 Col: 38 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script --a" +| <body> + +#data +<!doctype html><script><!--<script --< +#errors +Line: 1 Col: 38 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script --<" +| <body> + +#data +<!doctype html><script><!--<script --> +#errors +Line: 1 Col: 38 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script -->" +| <body> + +#data +<!doctype html><script><!--<script -->< +#errors +Line: 1 Col: 39 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script --><" +| <body> + +#data +<!doctype html><script><!--<script --></ +#errors +Line: 1 Col: 40 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script --></" +| <body> + +#data +<!doctype html><script><!--<script --></script +#errors +Line: 1 Col: 46 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script --></script" +| <body> + +#data +<!doctype html><script><!--<script --></script +#errors +Line: 1 Col: 47 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script -->" +| <body> + +#data +<!doctype html><script><!--<script --></script/ +#errors +Line: 1 Col: 47 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script -->" +| <body> + +#data +<!doctype html><script><!--<script --></script> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script -->" +| <body> + +#data +<!doctype html><script><!--<script><\/script>--></script> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script><\/script>-->" +| <body> + +#data +<!doctype html><script><!--<script></scr'+'ipt>--></script> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script></scr'+'ipt>-->" +| <body> + +#data +<!doctype html><script><!--<script></script><script></script></script> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script></script><script></script>" +| <body> + +#data +<!doctype html><script><!--<script></script><script></script>--><!--</script> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script></script><script></script>--><!--" +| <body> + +#data +<!doctype html><script><!--<script></script><script></script>-- ></script> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script></script><script></script>-- >" +| <body> + +#data +<!doctype html><script><!--<script></script><script></script>- -></script> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script></script><script></script>- ->" +| <body> + +#data +<!doctype html><script><!--<script></script><script></script>- - ></script> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script></script><script></script>- - >" +| <body> + +#data +<!doctype html><script><!--<script></script><script></script>-></script> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script></script><script></script>->" +| <body> + +#data +<!doctype html><script><!--<script>--!></script>X +#errors +Line: 1 Col: 49 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script>--!></script>X" +| <body> + +#data +<!doctype html><script><!--<scr'+'ipt></script>--></script> +#errors +Line: 1 Col: 59 Unexpected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<scr'+'ipt>" +| <body> +| "-->" + +#data +<!doctype html><script><!--<script></scr'+'ipt></script>X +#errors +Line: 1 Col: 57 Unexpected end of file. Expected end tag (script). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| "<!--<script></scr'+'ipt></script>X" +| <body> + +#data +<!doctype html><style><!--<style></style>--></style> +#errors +Line: 1 Col: 52 Unexpected end tag (style). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <style> +| "<!--<style>" +| <body> +| "-->" + +#data +<!doctype html><style><!--</style>X +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <style> +| "<!--" +| <body> +| "X" + +#data +<!doctype html><style><!--...</style>...--></style> +#errors +Line: 1 Col: 51 Unexpected end tag (style). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <style> +| "<!--..." +| <body> +| "...-->" + +#data +<!doctype html><style><!--<br><html xmlns:v="urn:schemas-microsoft-com:vml"><!--[if !mso]><style></style>X +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <style> +| "<!--<br><html xmlns:v="urn:schemas-microsoft-com:vml"><!--[if !mso]><style>" +| <body> +| "X" + +#data +<!doctype html><style><!--...<style><!--...--!></style>--></style> +#errors +Line: 1 Col: 66 Unexpected end tag (style). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <style> +| "<!--...<style><!--...--!>" +| <body> +| "-->" + +#data +<!doctype html><style><!--...</style><!-- --><style>@import ...</style> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <style> +| "<!--..." +| <!-- --> +| <style> +| "@import ..." +| <body> + +#data +<!doctype html><style>...<style><!--...</style><!-- --></style> +#errors +Line: 1 Col: 63 Unexpected end tag (style). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <style> +| "...<style><!--..." +| <!-- --> +| <body> + +#data +<!doctype html><style>...<!--[if IE]><style>...</style>X +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <style> +| "...<!--[if IE]><style>..." +| <body> +| "X" + +#data +<!doctype html><title><!--<title>--> +#errors +Line: 1 Col: 52 Unexpected end tag (title). +#document +| +| +| +| +| "<!--<title>" +| <body> +| "-->" + +#data +<!doctype html><title></title> +#errors +#document +| +| +| +| +| "" +| + +#data +foo/title><link></head><body>X +#errors +Line: 1 Col: 52 Unexpected end of file. Expected end tag (title). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <title> +| "foo/title><link></head><body>X" +| <body> + +#data +<!doctype html><noscript><!--<noscript></noscript>--></noscript> +#errors +Line: 1 Col: 64 Unexpected end tag (noscript). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <noscript> +| "<!--<noscript>" +| <body> +| "-->" + +#data +<!doctype html><noscript><!--</noscript>X<noscript>--></noscript> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <noscript> +| "<!--" +| <body> +| "X" +| <noscript> +| "-->" + +#data +<!doctype html><noscript><iframe></noscript>X +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <noscript> +| "<iframe>" +| <body> +| "X" + +#data +<!doctype html><noframes><!--<noframes></noframes>--></noframes> +#errors +Line: 1 Col: 64 Unexpected end tag (noframes). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <noframes> +| "<!--<noframes>" +| <body> +| "-->" + +#data +<!doctype html><noframes><body><script><!--...</script></body></noframes></html> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <noframes> +| "<body><script><!--...</script></body>" +| <body> + +#data +<!doctype html><textarea><!--<textarea></textarea>--></textarea> +#errors +Line: 1 Col: 64 Unexpected end tag (textarea). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <textarea> +| "<!--<textarea>" +| "-->" + +#data +<!doctype html><textarea></textarea></textarea> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <textarea> +| "</textarea>" + +#data +<!doctype html><textarea><</textarea> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <textarea> +| "<" + +#data +<!doctype html><textarea>a<b</textarea> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <textarea> +| "a<b" + +#data +<!doctype html><iframe><!--<iframe></iframe>--></iframe> +#errors +Line: 1 Col: 56 Unexpected end tag (iframe). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <iframe> +| "<!--<iframe>" +| "-->" + +#data +<!doctype html><iframe>...<!--X->...<!--/X->...</iframe> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <iframe> +| "...<!--X->...<!--/X->..." + +#data +<!doctype html><xmp><!--<xmp></xmp>--></xmp> +#errors +Line: 1 Col: 44 Unexpected end tag (xmp). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <xmp> +| "<!--<xmp>" +| "-->" + +#data +<!doctype html><noembed><!--<noembed></noembed>--></noembed> +#errors +Line: 1 Col: 60 Unexpected end tag (noembed). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <noembed> +| "<!--<noembed>" +| "-->" + +#data +<script> +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 8 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| <body> + +#data +<script>a +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 9 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "a" +| <body> + +#data +<script>< +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 9 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<" +| <body> + +#data +<script></ +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 10 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "</" +| <body> + +#data +<script></S +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 11 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "</S" +| <body> + +#data +<script></SC +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 12 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "</SC" +| <body> + +#data +<script></SCR +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 13 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "</SCR" +| <body> + +#data +<script></SCRI +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 14 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "</SCRI" +| <body> + +#data +<script></SCRIP +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 15 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "</SCRIP" +| <body> + +#data +<script></SCRIPT +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 16 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "</SCRIPT" +| <body> + +#data +<script></SCRIPT +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 17 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| <body> + +#data +<script></s +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 11 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "</s" +| <body> + +#data +<script></sc +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 12 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "</sc" +| <body> + +#data +<script></scr +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 13 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "</scr" +| <body> + +#data +<script></scri +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 14 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "</scri" +| <body> + +#data +<script></scrip +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 15 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "</scrip" +| <body> + +#data +<script></script +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 16 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "</script" +| <body> + +#data +<script></script +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 17 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| <body> + +#data +<script><! +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 10 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!" +| <body> + +#data +<script><!a +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 11 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!a" +| <body> + +#data +<script><!- +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 11 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!-" +| <body> + +#data +<script><!-a +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 12 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!-a" +| <body> + +#data +<script><!-- +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 12 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!--" +| <body> + +#data +<script><!--a +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 13 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!--a" +| <body> + +#data +<script><!--< +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 13 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!--<" +| <body> + +#data +<script><!--<a +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 14 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!--<a" +| <body> + +#data +<script><!--</ +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 14 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!--</" +| <body> + +#data +<script><!--</script +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 20 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!--</script" +| <body> + +#data +<script><!--</script +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 21 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!--" +| <body> + +#data +<script><!--<s +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 14 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!--<s" +| <body> + +#data +<script><!--<script +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 19 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!--<script" +| <body> + +#data +<script><!--<script +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 20 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!--<script " +| <body> + +#data +<script><!--<script < +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 21 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!--<script <" +| <body> + +#data +<script><!--<script <a +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 22 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!--<script <a" +| <body> + +#data +<script><!--<script </ +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 22 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!--<script </" +| <body> + +#data +<script><!--<script </s +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 23 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!--<script </s" +| <body> + +#data +<script><!--<script </script +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 28 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!--<script </script" +| <body> + +#data +<script><!--<script </scripta +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 29 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!--<script </scripta" +| <body> + +#data +<script><!--<script </script +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 29 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!--<script </script " +| <body> + +#data +<script><!--<script </script> +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 29 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!--<script </script>" +| <body> + +#data +<script><!--<script </script/ +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 29 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!--<script </script/" +| <body> + +#data +<script><!--<script </script < +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 30 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!--<script </script <" +| <body> + +#data +<script><!--<script </script <a +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 31 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!--<script </script <a" +| <body> + +#data +<script><!--<script </script </ +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 31 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!--<script </script </" +| <body> + +#data +<script><!--<script </script </script +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 38 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!--<script </script </script" +| <body> + +#data +<script><!--<script </script </script +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 38 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!--<script </script " +| <body> + +#data +<script><!--<script </script </script/ +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 38 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!--<script </script " +| <body> + +#data +<script><!--<script </script </script> +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +#document +| <html> +| <head> +| <script> +| "<!--<script </script " +| <body> + +#data +<script><!--<script - +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 21 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!--<script -" +| <body> + +#data +<script><!--<script -a +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 22 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!--<script -a" +| <body> + +#data +<script><!--<script -- +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 22 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!--<script --" +| <body> + +#data +<script><!--<script --a +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 23 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!--<script --a" +| <body> + +#data +<script><!--<script --> +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 23 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!--<script -->" +| <body> + +#data +<script><!--<script -->< +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 24 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!--<script --><" +| <body> + +#data +<script><!--<script --></ +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 25 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!--<script --></" +| <body> + +#data +<script><!--<script --></script +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 31 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!--<script --></script" +| <body> + +#data +<script><!--<script --></script +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 32 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!--<script -->" +| <body> + +#data +<script><!--<script --></script/ +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 32 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!--<script -->" +| <body> + +#data +<script><!--<script --></script> +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +#document +| <html> +| <head> +| <script> +| "<!--<script -->" +| <body> + +#data +<script><!--<script><\/script>--></script> +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +#document +| <html> +| <head> +| <script> +| "<!--<script><\/script>-->" +| <body> + +#data +<script><!--<script></scr'+'ipt>--></script> +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +#document +| <html> +| <head> +| <script> +| "<!--<script></scr'+'ipt>-->" +| <body> + +#data +<script><!--<script></script><script></script></script> +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +#document +| <html> +| <head> +| <script> +| "<!--<script></script><script></script>" +| <body> + +#data +<script><!--<script></script><script></script>--><!--</script> +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +#document +| <html> +| <head> +| <script> +| "<!--<script></script><script></script>--><!--" +| <body> + +#data +<script><!--<script></script><script></script>-- ></script> +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +#document +| <html> +| <head> +| <script> +| "<!--<script></script><script></script>-- >" +| <body> + +#data +<script><!--<script></script><script></script>- -></script> +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +#document +| <html> +| <head> +| <script> +| "<!--<script></script><script></script>- ->" +| <body> + +#data +<script><!--<script></script><script></script>- - ></script> +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +#document +| <html> +| <head> +| <script> +| "<!--<script></script><script></script>- - >" +| <body> + +#data +<script><!--<script></script><script></script>-></script> +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +#document +| <html> +| <head> +| <script> +| "<!--<script></script><script></script>->" +| <body> + +#data +<script><!--<script>--!></script>X +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 34 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!--<script>--!></script>X" +| <body> + +#data +<script><!--<scr'+'ipt></script>--></script> +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 44 Unexpected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!--<scr'+'ipt>" +| <body> +| "-->" + +#data +<script><!--<script></scr'+'ipt></script>X +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 42 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "<!--<script></scr'+'ipt></script>X" +| <body> + +#data +<style><!--<style></style>--></style> +#errors +Line: 1 Col: 7 Unexpected start tag (style). Expected DOCTYPE. +Line: 1 Col: 37 Unexpected end tag (style). +#document +| <html> +| <head> +| <style> +| "<!--<style>" +| <body> +| "-->" + +#data +<style><!--</style>X +#errors +Line: 1 Col: 7 Unexpected start tag (style). Expected DOCTYPE. +#document +| <html> +| <head> +| <style> +| "<!--" +| <body> +| "X" + +#data +<style><!--...</style>...--></style> +#errors +Line: 1 Col: 7 Unexpected start tag (style). Expected DOCTYPE. +Line: 1 Col: 36 Unexpected end tag (style). +#document +| <html> +| <head> +| <style> +| "<!--..." +| <body> +| "...-->" + +#data +<style><!--<br><html xmlns:v="urn:schemas-microsoft-com:vml"><!--[if !mso]><style></style>X +#errors +Line: 1 Col: 7 Unexpected start tag (style). Expected DOCTYPE. +#document +| <html> +| <head> +| <style> +| "<!--<br><html xmlns:v="urn:schemas-microsoft-com:vml"><!--[if !mso]><style>" +| <body> +| "X" + +#data +<style><!--...<style><!--...--!></style>--></style> +#errors +Line: 1 Col: 7 Unexpected start tag (style). Expected DOCTYPE. +Line: 1 Col: 51 Unexpected end tag (style). +#document +| <html> +| <head> +| <style> +| "<!--...<style><!--...--!>" +| <body> +| "-->" + +#data +<style><!--...</style><!-- --><style>@import ...</style> +#errors +Line: 1 Col: 7 Unexpected start tag (style). Expected DOCTYPE. +#document +| <html> +| <head> +| <style> +| "<!--..." +| <!-- --> +| <style> +| "@import ..." +| <body> + +#data +<style>...<style><!--...</style><!-- --></style> +#errors +Line: 1 Col: 7 Unexpected start tag (style). Expected DOCTYPE. +Line: 1 Col: 48 Unexpected end tag (style). +#document +| <html> +| <head> +| <style> +| "...<style><!--..." +| <!-- --> +| <body> + +#data +<style>...<!--[if IE]><style>...</style>X +#errors +Line: 1 Col: 7 Unexpected start tag (style). Expected DOCTYPE. +#document +| <html> +| <head> +| <style> +| "...<!--[if IE]><style>..." +| <body> +| "X" + +#data +<title><!--<title>--> +#errors +Line: 1 Col: 7 Unexpected start tag (title). Expected DOCTYPE. +Line: 1 Col: 37 Unexpected end tag (title). +#document +| +| +| +| "<!--<title>" +| <body> +| "-->" + +#data +<title></title> +#errors +Line: 1 Col: 7 Unexpected start tag (title). Expected DOCTYPE. +#document +| +| +| +| "" +| + +#data +foo/title><link></head><body>X +#errors +Line: 1 Col: 7 Unexpected start tag (title). Expected DOCTYPE. +Line: 1 Col: 37 Unexpected end of file. Expected end tag (title). +#document +| <html> +| <head> +| <title> +| "foo/title><link></head><body>X" +| <body> + +#data +<noscript><!--<noscript></noscript>--></noscript> +#errors +Line: 1 Col: 10 Unexpected start tag (noscript). Expected DOCTYPE. +Line: 1 Col: 49 Unexpected end tag (noscript). +#document +| <html> +| <head> +| <noscript> +| "<!--<noscript>" +| <body> +| "-->" + +#data +<noscript><!--</noscript>X<noscript>--></noscript> +#errors +Line: 1 Col: 10 Unexpected start tag (noscript). Expected DOCTYPE. +#document +| <html> +| <head> +| <noscript> +| "<!--" +| <body> +| "X" +| <noscript> +| "-->" + +#data +<noscript><iframe></noscript>X +#errors +Line: 1 Col: 10 Unexpected start tag (noscript). Expected DOCTYPE. +#document +| <html> +| <head> +| <noscript> +| "<iframe>" +| <body> +| "X" + +#data +<noframes><!--<noframes></noframes>--></noframes> +#errors +Line: 1 Col: 10 Unexpected start tag (noframes). Expected DOCTYPE. +Line: 1 Col: 49 Unexpected end tag (noframes). +#document +| <html> +| <head> +| <noframes> +| "<!--<noframes>" +| <body> +| "-->" + +#data +<noframes><body><script><!--...</script></body></noframes></html> +#errors +Line: 1 Col: 10 Unexpected start tag (noframes). Expected DOCTYPE. +#document +| <html> +| <head> +| <noframes> +| "<body><script><!--...</script></body>" +| <body> + +#data +<textarea><!--<textarea></textarea>--></textarea> +#errors +Line: 1 Col: 10 Unexpected start tag (textarea). Expected DOCTYPE. +Line: 1 Col: 49 Unexpected end tag (textarea). +#document +| <html> +| <head> +| <body> +| <textarea> +| "<!--<textarea>" +| "-->" + +#data +<textarea></textarea></textarea> +#errors +Line: 1 Col: 10 Unexpected start tag (textarea). Expected DOCTYPE. +#document +| <html> +| <head> +| <body> +| <textarea> +| "</textarea>" + +#data +<iframe><!--<iframe></iframe>--></iframe> +#errors +Line: 1 Col: 8 Unexpected start tag (iframe). Expected DOCTYPE. +Line: 1 Col: 41 Unexpected end tag (iframe). +#document +| <html> +| <head> +| <body> +| <iframe> +| "<!--<iframe>" +| "-->" + +#data +<iframe>...<!--X->...<!--/X->...</iframe> +#errors +Line: 1 Col: 8 Unexpected start tag (iframe). Expected DOCTYPE. +#document +| <html> +| <head> +| <body> +| <iframe> +| "...<!--X->...<!--/X->..." + +#data +<xmp><!--<xmp></xmp>--></xmp> +#errors +Line: 1 Col: 5 Unexpected start tag (xmp). Expected DOCTYPE. +Line: 1 Col: 29 Unexpected end tag (xmp). +#document +| <html> +| <head> +| <body> +| <xmp> +| "<!--<xmp>" +| "-->" + +#data +<noembed><!--<noembed></noembed>--></noembed> +#errors +Line: 1 Col: 9 Unexpected start tag (noembed). Expected DOCTYPE. +Line: 1 Col: 45 Unexpected end tag (noembed). +#document +| <html> +| <head> +| <body> +| <noembed> +| "<!--<noembed>" +| "-->" + +#data +<!doctype html><table> + +#errors +Line 2 Col 0 Unexpected end of file. Expected table content. +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <table> +| " +" + +#data +<!doctype html><table><td><span><font></span><span> +#errors +Line 1 Col 26 Unexpected table cell start tag (td) in the table body phase. +Line 1 Col 45 Unexpected end tag (span). +Line 1 Col 51 Expected closing tag. Unexpected end of file. +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <table> +| <tbody> +| <tr> +| <td> +| <span> +| <font> +| <font> +| <span> + +#data +<!doctype html><form><table></form><form></table></form> +#errors +35: Stray end tag “form”. +41: Start tag “form” seen in “table”. +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <form> +| <table> +| <form> diff --git a/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests17.dat b/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests17.dat new file mode 100644 index 0000000000..7b555f888d --- /dev/null +++ b/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests17.dat @@ -0,0 +1,153 @@ +#data +<!doctype html><table><tbody><select><tr> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <select> +| <table> +| <tbody> +| <tr> + +#data +<!doctype html><table><tr><select><td> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <select> +| <table> +| <tbody> +| <tr> +| <td> + +#data +<!doctype html><table><tr><td><select><td> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <table> +| <tbody> +| <tr> +| <td> +| <select> +| <td> + +#data +<!doctype html><table><tr><th><select><td> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <table> +| <tbody> +| <tr> +| <th> +| <select> +| <td> + +#data +<!doctype html><table><caption><select><tr> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <table> +| <caption> +| <select> +| <tbody> +| <tr> + +#data +<!doctype html><select><tr> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <select> + +#data +<!doctype html><select><td> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <select> + +#data +<!doctype html><select><th> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <select> + +#data +<!doctype html><select><tbody> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <select> + +#data +<!doctype html><select><thead> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <select> + +#data +<!doctype html><select><tfoot> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <select> + +#data +<!doctype html><select><caption> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <select> + +#data +<!doctype html><table><tr></table>a +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <table> +| <tbody> +| <tr> +| "a" diff --git a/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests18.dat b/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests18.dat new file mode 100644 index 0000000000..680e1f068a --- /dev/null +++ b/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests18.dat @@ -0,0 +1,269 @@ +#data +<!doctype html><plaintext></plaintext> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <plaintext> +| "</plaintext>" + +#data +<!doctype html><table><plaintext></plaintext> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <plaintext> +| "</plaintext>" +| <table> + +#data +<!doctype html><table><tbody><plaintext></plaintext> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <plaintext> +| "</plaintext>" +| <table> +| <tbody> + +#data +<!doctype html><table><tbody><tr><plaintext></plaintext> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <plaintext> +| "</plaintext>" +| <table> +| <tbody> +| <tr> + +#data +<!doctype html><table><tbody><tr><plaintext></plaintext> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <plaintext> +| "</plaintext>" +| <table> +| <tbody> +| <tr> + +#data +<!doctype html><table><td><plaintext></plaintext> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <table> +| <tbody> +| <tr> +| <td> +| <plaintext> +| "</plaintext>" + +#data +<!doctype html><table><caption><plaintext></plaintext> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <table> +| <caption> +| <plaintext> +| "</plaintext>" + +#data +<!doctype html><table><tr><style></script></style>abc +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| "abc" +| <table> +| <tbody> +| <tr> +| <style> +| "</script>" + +#data +<!doctype html><table><tr><script></style></script>abc +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| "abc" +| <table> +| <tbody> +| <tr> +| <script> +| "</style>" + +#data +<!doctype html><table><caption><style></script></style>abc +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <table> +| <caption> +| <style> +| "</script>" +| "abc" + +#data +<!doctype html><table><td><style></script></style>abc +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <table> +| <tbody> +| <tr> +| <td> +| <style> +| "</script>" +| "abc" + +#data +<!doctype html><select><script></style></script>abc +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <select> +| <script> +| "</style>" +| "abc" + +#data +<!doctype html><table><select><script></style></script>abc +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <select> +| <script> +| "</style>" +| "abc" +| <table> + +#data +<!doctype html><table><tr><select><script></style></script>abc +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <select> +| <script> +| "</style>" +| "abc" +| <table> +| <tbody> +| <tr> + +#data +<!doctype html><frameset></frameset><noframes>abc +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <frameset> +| <noframes> +| "abc" + +#data +<!doctype html><frameset></frameset><noframes>abc</noframes><!--abc--> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <frameset> +| <noframes> +| "abc" +| <!-- abc --> + +#data +<!doctype html><frameset></frameset></html><noframes>abc +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <frameset> +| <noframes> +| "abc" + +#data +<!doctype html><frameset></frameset></html><noframes>abc</noframes><!--abc--> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <frameset> +| <noframes> +| "abc" +| <!-- abc --> + +#data +<!doctype html><table><tr></tbody><tfoot> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <table> +| <tbody> +| <tr> +| <tfoot> + +#data +<!doctype html><table><td><svg></svg>abc<td> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <table> +| <tbody> +| <tr> +| <td> +| <svg svg> +| "abc" +| <td> diff --git a/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests19.dat b/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests19.dat new file mode 100644 index 0000000000..0d62f5a5b0 --- /dev/null +++ b/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests19.dat @@ -0,0 +1,1237 @@ +#data +<!doctype html><math><mn DefinitionUrl="foo"> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <math math> +| <math mn> +| definitionURL="foo" + +#data +<!doctype html><html></p><!--foo--> +#errors +#document +| <!DOCTYPE html> +| <html> +| <!-- foo --> +| <head> +| <body> + +#data +<!doctype html><head></head></p><!--foo--> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <!-- foo --> +| <body> + +#data +<!doctype html><body><p><pre> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <p> +| <pre> + +#data +<!doctype html><body><p><listing> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <p> +| <listing> + +#data +<!doctype html><p><plaintext> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <p> +| <plaintext> + +#data +<!doctype html><p><h1> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <p> +| <h1> + +#data +<!doctype html><form><isindex> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <form> + +#data +<!doctype html><isindex action="POST"> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <form> +| action="POST" +| <hr> +| <label> +| "This is a searchable index. Enter search keywords: " +| <input> +| name="isindex" +| <hr> + +#data +<!doctype html><isindex prompt="this is isindex"> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <form> +| <hr> +| <label> +| "this is isindex" +| <input> +| name="isindex" +| <hr> + +#data +<!doctype html><isindex type="hidden"> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <form> +| <hr> +| <label> +| "This is a searchable index. Enter search keywords: " +| <input> +| name="isindex" +| type="hidden" +| <hr> + +#data +<!doctype html><isindex name="foo"> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <form> +| <hr> +| <label> +| "This is a searchable index. Enter search keywords: " +| <input> +| name="isindex" +| <hr> + +#data +<!doctype html><ruby><p><rp> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <ruby> +| <p> +| <rp> + +#data +<!doctype html><ruby><div><span><rp> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <ruby> +| <div> +| <span> +| <rp> + +#data +<!doctype html><ruby><div><p><rp> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <ruby> +| <div> +| <p> +| <rp> + +#data +<!doctype html><ruby><p><rt> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <ruby> +| <p> +| <rt> + +#data +<!doctype html><ruby><div><span><rt> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <ruby> +| <div> +| <span> +| <rt> + +#data +<!doctype html><ruby><div><p><rt> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <ruby> +| <div> +| <p> +| <rt> + +#data +<!doctype html><math/><foo> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <math math> +| <foo> + +#data +<!doctype html><svg/><foo> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <svg svg> +| <foo> + +#data +<!doctype html><div></body><!--foo--> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <div> +| <!-- foo --> + +#data +<!doctype html><h1><div><h3><span></h1>foo +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <h1> +| <div> +| <h3> +| <span> +| "foo" + +#data +<!doctype html><p></h3>foo +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <p> +| "foo" + +#data +<!doctype html><h3><li>abc</h2>foo +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <h3> +| <li> +| "abc" +| "foo" + +#data +<!doctype html><table>abc<!--foo--> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| "abc" +| <table> +| <!-- foo --> + +#data +<!doctype html><table> <!--foo--> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <table> +| " " +| <!-- foo --> + +#data +<!doctype html><table> b <!--foo--> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| " b " +| <table> +| <!-- foo --> + +#data +<!doctype html><select><option><option> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <select> +| <option> +| <option> + +#data +<!doctype html><select><option></optgroup> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <select> +| <option> + +#data +<!doctype html><select><option></optgroup> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <select> +| <option> + +#data +<!doctype html><p><math><mi><p><h1> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <p> +| <math math> +| <math mi> +| <p> +| <h1> + +#data +<!doctype html><p><math><mo><p><h1> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <p> +| <math math> +| <math mo> +| <p> +| <h1> + +#data +<!doctype html><p><math><mn><p><h1> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <p> +| <math math> +| <math mn> +| <p> +| <h1> + +#data +<!doctype html><p><math><ms><p><h1> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <p> +| <math math> +| <math ms> +| <p> +| <h1> + +#data +<!doctype html><p><math><mtext><p><h1> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <p> +| <math math> +| <math mtext> +| <p> +| <h1> + +#data +<!doctype html><frameset></noframes> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <frameset> + +#data +<!doctype html><html c=d><body></html><html a=b> +#errors +#document +| <!DOCTYPE html> +| <html> +| a="b" +| c="d" +| <head> +| <body> + +#data +<!doctype html><html c=d><frameset></frameset></html><html a=b> +#errors +#document +| <!DOCTYPE html> +| <html> +| a="b" +| c="d" +| <head> +| <frameset> + +#data +<!doctype html><html><frameset></frameset></html><!--foo--> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <frameset> +| <!-- foo --> + +#data +<!doctype html><html><frameset></frameset></html> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <frameset> +| " " + +#data +<!doctype html><html><frameset></frameset></html>abc +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <frameset> + +#data +<!doctype html><html><frameset></frameset></html><p> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <frameset> + +#data +<!doctype html><html><frameset></frameset></html></p> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <frameset> + +#data +<html><frameset></frameset></html><!doctype html> +#errors +#document +| <html> +| <head> +| <frameset> + +#data +<!doctype html><body><frameset> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> + +#data +<!doctype html><p><frameset><frame> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <frameset> +| <frame> + +#data +<!doctype html><p>a<frameset> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <p> +| "a" + +#data +<!doctype html><p> <frameset><frame> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <frameset> +| <frame> + +#data +<!doctype html><pre><frameset> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <pre> + +#data +<!doctype html><listing><frameset> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <listing> + +#data +<!doctype html><li><frameset> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <li> + +#data +<!doctype html><dd><frameset> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <dd> + +#data +<!doctype html><dt><frameset> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <dt> + +#data +<!doctype html><button><frameset> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <button> + +#data +<!doctype html><applet><frameset> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <applet> + +#data +<!doctype html><marquee><frameset> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <marquee> + +#data +<!doctype html><object><frameset> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <object> + +#data +<!doctype html><table><frameset> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <table> + +#data +<!doctype html><area><frameset> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <area> + +#data +<!doctype html><basefont><frameset> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <basefont> +| <frameset> + +#data +<!doctype html><bgsound><frameset> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <bgsound> +| <frameset> + +#data +<!doctype html><br><frameset> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <br> + +#data +<!doctype html><embed><frameset> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <embed> + +#data +<!doctype html><img><frameset> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <img> + +#data +<!doctype html><input><frameset> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <input> + +#data +<!doctype html><keygen><frameset> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <keygen> + +#data +<!doctype html><wbr><frameset> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <wbr> + +#data +<!doctype html><hr><frameset> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <hr> + +#data +<!doctype html><textarea></textarea><frameset> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <textarea> + +#data +<!doctype html><xmp></xmp><frameset> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <xmp> + +#data +<!doctype html><iframe></iframe><frameset> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <iframe> + +#data +<!doctype html><select></select><frameset> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <select> + +#data +<!doctype html><svg></svg><frameset><frame> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <frameset> +| <frame> + +#data +<!doctype html><math></math><frameset><frame> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <frameset> +| <frame> + +#data +<!doctype html><svg><foreignObject><div> <frameset><frame> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <frameset> +| <frame> + +#data +<!doctype html><svg>a</svg><frameset><frame> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <svg svg> +| "a" + +#data +<!doctype html><svg> </svg><frameset><frame> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <frameset> +| <frame> + +#data +<html>aaa<frameset></frameset> +#errors +#document +| <html> +| <head> +| <body> +| "aaa" + +#data +<html> a <frameset></frameset> +#errors +#document +| <html> +| <head> +| <body> +| "a " + +#data +<!doctype html><div><frameset> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <frameset> + +#data +<!doctype html><div><body><frameset> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <div> + +#data +<!doctype html><p><math></p>a +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <p> +| <math math> +| "a" + +#data +<!doctype html><p><math><mn><span></p>a +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <p> +| <math math> +| <math mn> +| <span> +| <p> +| "a" + +#data +<!doctype html><math></html> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <math math> + +#data +<!doctype html><meta charset="ascii"> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <meta> +| charset="ascii" +| <body> + +#data +<!doctype html><meta http-equiv="content-type" content="text/html;charset=ascii"> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <meta> +| content="text/html;charset=ascii" +| http-equiv="content-type" +| <body> + +#data +<!doctype html><head><!--aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa--><meta charset="utf8"> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <!-- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa --> +| <meta> +| charset="utf8" +| <body> + +#data +<!doctype html><html a=b><head></head><html c=d> +#errors +#document +| <!DOCTYPE html> +| <html> +| a="b" +| c="d" +| <head> +| <body> + +#data +<!doctype html><image/> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <img> + +#data +<!doctype html>a<i>b<table>c<b>d</i>e</b>f +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| "a" +| <i> +| "bc" +| <b> +| "de" +| "f" +| <table> + +#data +<!doctype html><table><i>a<b>b<div>c<a>d</i>e</b>f +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <i> +| "a" +| <b> +| "b" +| <b> +| <div> +| <b> +| <i> +| "c" +| <a> +| "d" +| <a> +| "e" +| <a> +| "f" +| <table> + +#data +<!doctype html><i>a<b>b<div>c<a>d</i>e</b>f +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <i> +| "a" +| <b> +| "b" +| <b> +| <div> +| <b> +| <i> +| "c" +| <a> +| "d" +| <a> +| "e" +| <a> +| "f" + +#data +<!doctype html><table><i>a<b>b<div>c</i> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <i> +| "a" +| <b> +| "b" +| <b> +| <div> +| <i> +| "c" +| <table> + +#data +<!doctype html><table><i>a<b>b<div>c<a>d</i>e</b>f +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <i> +| "a" +| <b> +| "b" +| <b> +| <div> +| <b> +| <i> +| "c" +| <a> +| "d" +| <a> +| "e" +| <a> +| "f" +| <table> + +#data +<!doctype html><table><i>a<div>b<tr>c<b>d</i>e +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <i> +| "a" +| <div> +| "b" +| <i> +| "c" +| <b> +| "d" +| <b> +| "e" +| <table> +| <tbody> +| <tr> + +#data +<!doctype html><table><td><table><i>a<div>b<b>c</i>d +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <table> +| <tbody> +| <tr> +| <td> +| <i> +| "a" +| <div> +| <i> +| "b" +| <b> +| "c" +| <b> +| "d" +| <table> + +#data +<!doctype html><body><bgsound> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <bgsound> + +#data +<!doctype html><body><basefont> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <basefont> + +#data +<!doctype html><a><b></a><basefont> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <a> +| <b> +| <basefont> + +#data +<!doctype html><a><b></a><bgsound> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <a> +| <b> +| <bgsound> + +#data +<!doctype html><figcaption><article></figcaption>a +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <figcaption> +| <article> +| "a" + +#data +<!doctype html><summary><article></summary>a +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <summary> +| <article> +| "a" + +#data +<!doctype html><p><a><plaintext>b +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <p> +| <a> +| <plaintext> +| <a> +| "b" + +#data +<!DOCTYPE html><div>a<a></div>b<p>c</p>d +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <div> +| "a" +| <a> +| <a> +| "b" +| <p> +| "c" +| "d" diff --git a/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests2.dat b/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests2.dat new file mode 100644 index 0000000000..60d8592216 --- /dev/null +++ b/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests2.dat @@ -0,0 +1,763 @@ +#data +<!DOCTYPE html>Test +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| "Test" + +#data +<textarea>test</div>test +#errors +Line: 1 Col: 10 Unexpected start tag (textarea). Expected DOCTYPE. +Line: 1 Col: 24 Expected closing tag. Unexpected end of file. +#document +| <html> +| <head> +| <body> +| <textarea> +| "test</div>test" + +#data +<table><td> +#errors +Line: 1 Col: 7 Unexpected start tag (table). Expected DOCTYPE. +Line: 1 Col: 11 Unexpected table cell start tag (td) in the table body phase. +Line: 1 Col: 11 Expected closing tag. Unexpected end of file. +#document +| <html> +| <head> +| <body> +| <table> +| <tbody> +| <tr> +| <td> + +#data +<table><td>test</tbody></table> +#errors +Line: 1 Col: 7 Unexpected start tag (table). Expected DOCTYPE. +Line: 1 Col: 11 Unexpected table cell start tag (td) in the table body phase. +#document +| <html> +| <head> +| <body> +| <table> +| <tbody> +| <tr> +| <td> +| "test" + +#data +<frame>test +#errors +Line: 1 Col: 7 Unexpected start tag (frame). Expected DOCTYPE. +Line: 1 Col: 7 Unexpected start tag frame. Ignored. +#document +| <html> +| <head> +| <body> +| "test" + +#data +<!DOCTYPE html><frameset>test +#errors +Line: 1 Col: 29 Unepxected characters in the frameset phase. Characters ignored. +Line: 1 Col: 29 Expected closing tag. Unexpected end of file. +#document +| <!DOCTYPE html> +| <html> +| <head> +| <frameset> + +#data +<!DOCTYPE html><frameset><!DOCTYPE html> +#errors +Line: 1 Col: 40 Unexpected DOCTYPE. Ignored. +Line: 1 Col: 40 Expected closing tag. Unexpected end of file. +#document +| <!DOCTYPE html> +| <html> +| <head> +| <frameset> + +#data +<!DOCTYPE html><font><p><b>test</font> +#errors +Line: 1 Col: 38 End tag (font) violates step 1, paragraph 3 of the adoption agency algorithm. +Line: 1 Col: 38 End tag (font) violates step 1, paragraph 3 of the adoption agency algorithm. +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <font> +| <p> +| <font> +| <b> +| "test" + +#data +<!DOCTYPE html><dt><div><dd> +#errors +Line: 1 Col: 28 Missing end tag (div, dt). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <dt> +| <div> +| <dd> + +#data +<script></x +#errors +Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE. +Line: 1 Col: 11 Unexpected end of file. Expected end tag (script). +#document +| <html> +| <head> +| <script> +| "</x" +| <body> + +#data +<table><plaintext><td> +#errors +Line: 1 Col: 7 Unexpected start tag (table). Expected DOCTYPE. +Line: 1 Col: 18 Unexpected start tag (plaintext) in table context caused voodoo mode. +Line: 1 Col: 22 Unexpected end of file. Expected table content. +#document +| <html> +| <head> +| <body> +| <plaintext> +| "<td>" +| <table> + +#data +<plaintext></plaintext> +#errors +Line: 1 Col: 11 Unexpected start tag (plaintext). Expected DOCTYPE. +Line: 1 Col: 23 Expected closing tag. Unexpected end of file. +#document +| <html> +| <head> +| <body> +| <plaintext> +| "</plaintext>" + +#data +<!DOCTYPE html><table><tr>TEST +#errors +Line: 1 Col: 30 Unexpected non-space characters in table context caused voodoo mode. +Line: 1 Col: 30 Unexpected end of file. Expected table content. +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| "TEST" +| <table> +| <tbody> +| <tr> + +#data +<!DOCTYPE html><body t1=1><body t2=2><body t3=3 t4=4> +#errors +Line: 1 Col: 37 Unexpected start tag (body). +Line: 1 Col: 53 Unexpected start tag (body). +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| t1="1" +| t2="2" +| t3="3" +| t4="4" + +#data +</b test +#errors +Line: 1 Col: 8 Unexpected end of file in attribute name. +Line: 1 Col: 8 End tag contains unexpected attributes. +Line: 1 Col: 8 Unexpected end tag (b). Expected DOCTYPE. +Line: 1 Col: 8 Unexpected end tag (b) after the (implied) root element. +#document +| <html> +| <head> +| <body> + +#data +<!DOCTYPE html></b test<b &=&>X +#errors +Line: 1 Col: 32 Named entity didn't end with ';'. +Line: 1 Col: 33 End tag contains unexpected attributes. +Line: 1 Col: 33 Unexpected end tag (b) after the (implied) root element. +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| "X" + +#data +<!doctypehtml><scrIPt type=text/x-foobar;baz>X</SCRipt +#errors +Line: 1 Col: 9 No space after literal string 'DOCTYPE'. +Line: 1 Col: 54 Unexpected end of file in the tag name. +#document +| <!DOCTYPE html> +| <html> +| <head> +| <script> +| type="text/x-foobar;baz" +| "X</SCRipt" +| <body> + +#data +& +#errors +Line: 1 Col: 1 Unexpected non-space characters. Expected DOCTYPE. +#document +| <html> +| <head> +| <body> +| "&" + +#data +&# +#errors +Line: 1 Col: 1 Numeric entity expected. Got end of file instead. +Line: 1 Col: 1 Unexpected non-space characters. Expected DOCTYPE. +#document +| <html> +| <head> +| <body> +| "&#" + +#data +&#X +#errors +Line: 1 Col: 3 Numeric entity expected but none found. +Line: 1 Col: 3 Unexpected non-space characters. Expected DOCTYPE. +#document +| <html> +| <head> +| <body> +| "&#X" + +#data +&#x +#errors +Line: 1 Col: 3 Numeric entity expected but none found. +Line: 1 Col: 3 Unexpected non-space characters. Expected DOCTYPE. +#document +| <html> +| <head> +| <body> +| "&#x" + +#data +- +#errors +Line: 1 Col: 4 Numeric entity didn't end with ';'. +Line: 1 Col: 4 Unexpected non-space characters. Expected DOCTYPE. +#document +| <html> +| <head> +| <body> +| "-" + +#data +&x-test +#errors +Line: 1 Col: 1 Named entity expected. Got none. +Line: 1 Col: 1 Unexpected non-space characters. Expected DOCTYPE. +#document +| <html> +| <head> +| <body> +| "&x-test" + +#data +<!doctypehtml><p><li> +#errors +Line: 1 Col: 9 No space after literal string 'DOCTYPE'. +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <p> +| <li> + +#data +<!doctypehtml><p><dt> +#errors +Line: 1 Col: 9 No space after literal string 'DOCTYPE'. +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <p> +| <dt> + +#data +<!doctypehtml><p><dd> +#errors +Line: 1 Col: 9 No space after literal string 'DOCTYPE'. +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <p> +| <dd> + +#data +<!doctypehtml><p><form> +#errors +Line: 1 Col: 9 No space after literal string 'DOCTYPE'. +Line: 1 Col: 23 Expected closing tag. Unexpected end of file. +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <p> +| <form> + +#data +<!DOCTYPE html><p></P>X +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <p> +| "X" + +#data +& +#errors +Line: 1 Col: 4 Named entity didn't end with ';'. +Line: 1 Col: 4 Unexpected non-space characters. Expected DOCTYPE. +#document +| <html> +| <head> +| <body> +| "&" + +#data +&AMp; +#errors +Line: 1 Col: 1 Named entity expected. Got none. +Line: 1 Col: 1 Unexpected non-space characters. Expected DOCTYPE. +#document +| <html> +| <head> +| <body> +| "&AMp;" + +#data +<!DOCTYPE html><html><head></head><body><thisISasillyTESTelementNameToMakeSureCrazyTagNamesArePARSEDcorrectLY> +#errors +Line: 1 Col: 110 Expected closing tag. Unexpected end of file. +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <thisisasillytestelementnametomakesurecrazytagnamesareparsedcorrectly> + +#data +<!DOCTYPE html>X</body>X +#errors +Line: 1 Col: 24 Unexpected non-space characters in the after body phase. +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| "XX" + +#data +<!DOCTYPE html><!-- X +#errors +Line: 1 Col: 21 Unexpected end of file in comment. +#document +| <!DOCTYPE html> +| <!-- X --> +| <html> +| <head> +| <body> + +#data +<!DOCTYPE html><table><caption>test TEST</caption><td>test +#errors +Line: 1 Col: 54 Unexpected table cell start tag (td) in the table body phase. +Line: 1 Col: 58 Expected closing tag. Unexpected end of file. +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <table> +| <caption> +| "test TEST" +| <tbody> +| <tr> +| <td> +| "test" + +#data +<!DOCTYPE html><select><option><optgroup> +#errors +Line: 1 Col: 41 Expected closing tag. Unexpected end of file. +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <select> +| <option> +| <optgroup> + +#data +<!DOCTYPE html><select><optgroup><option></optgroup><option><select><option> +#errors +Line: 1 Col: 68 Unexpected select start tag in the select phase treated as select end tag. +Line: 1 Col: 76 Expected closing tag. Unexpected end of file. +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <select> +| <optgroup> +| <option> +| <option> +| <option> + +#data +<!DOCTYPE html><select><optgroup><option><optgroup> +#errors +Line: 1 Col: 51 Expected closing tag. Unexpected end of file. +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <select> +| <optgroup> +| <option> +| <optgroup> + +#data +<!DOCTYPE html><datalist><option>foo</datalist>bar +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <datalist> +| <option> +| "foo" +| "bar" + +#data +<!DOCTYPE html><font><input><input></font> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <font> +| <input> +| <input> + +#data +<!DOCTYPE html><!-- XXX - XXX --> +#errors +#document +| <!DOCTYPE html> +| <!-- XXX - XXX --> +| <html> +| <head> +| <body> + +#data +<!DOCTYPE html><!-- XXX - XXX +#errors +Line: 1 Col: 29 Unexpected end of file in comment (-) +#document +| <!DOCTYPE html> +| <!-- XXX - XXX --> +| <html> +| <head> +| <body> + +#data +<!DOCTYPE html><!-- XXX - XXX - XXX --> +#errors +#document +| <!DOCTYPE html> +| <!-- XXX - XXX - XXX --> +| <html> +| <head> +| <body> + +#data +<isindex test=x name=x> +#errors +Line: 1 Col: 23 Unexpected start tag (isindex). Expected DOCTYPE. +Line: 1 Col: 23 Unexpected start tag isindex. Don't use it! +#document +| <html> +| <head> +| <body> +| <form> +| <hr> +| <label> +| "This is a searchable index. Enter search keywords: " +| <input> +| name="isindex" +| test="x" +| <hr> + +#data +test +test +#errors +Line: 2 Col: 4 Unexpected non-space characters. Expected DOCTYPE. +#document +| <html> +| <head> +| <body> +| "test +test" + +#data +<!DOCTYPE html><body><title>test</body> +#errors +#document +| +| +| +| +| +| "test</body>" + +#data +<!DOCTYPE html><body><title>X +#errors +#document +| +| +| +| +| +| "X" +| <meta> +| name="z" +| <link> +| rel="foo" +| <style> +| " +x { content:"</style" } " + +#data +<!DOCTYPE html><select><optgroup></optgroup></select> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> +| <select> +| <optgroup> + +#data + + +#errors +Line: 2 Col: 1 Unexpected End of file. Expected DOCTYPE. +#document +| <html> +| <head> +| <body> + +#data +<!DOCTYPE html> <html> +#errors +#document +| <!DOCTYPE html> +| <html> +| <head> +| <body> + +#data +<!DOCTYPE html><script> +</script> <title>x +#errors +#document +| +| +| +| +#errors +Line: 1 Col: 6 Unexpected start tag (head). Expected DOCTYPE. +Line: 1 Col: 21 Unexpected start tag (script) that can be in head. Moved. +#document +| +| +| +#errors +Line: 1 Col: 6 Unexpected start tag (head). Expected DOCTYPE. +Line: 1 Col: 28 Unexpected start tag (style) that can be in head. Moved. +#document +| +| +| +#errors +Line: 1 Col: 6 Unexpected start tag (head). Expected DOCTYPE. +#document +| +| +| +| +| "x" +| x +#errors +Line: 1 Col: 7 Unexpected start tag (style). Expected DOCTYPE. +Line: 1 Col: 22 Unexpected end of file. Expected end tag (style). +#document +| +| +| --> x +#errors +Line: 1 Col: 7 Unexpected start tag (style). Expected DOCTYPE. +#document +| +| +| x +#errors +Line: 1 Col: 7 Unexpected start tag (style). Expected DOCTYPE. +#document +| +| +| x +#errors +Line: 1 Col: 7 Unexpected start tag (style). Expected DOCTYPE. +#document +| +| +| x +#errors +Line: 1 Col: 7 Unexpected start tag (style). Expected DOCTYPE. +#document +| +| +|

+#errors +#document +| +| +| +| +| +| ddd +#errors +#document +| +| +| +#errors +#document +| +| +| +| +|
  • +| +| ", + "