code: func doDebianSource(cmdline []string) {
  	var (
  		signer  = flag.String("signer", "", `Signing key name, also used as package author`)
  		upload  = flag.String("upload", "", `Where to upload the source package (usually "ethereum/ethereum")`)
  		sshUser = flag.String("sftp-user", "", `Username for SFTP upload (usually "geth-ci")`)
  		workdir = flag.String("workdir", "", `Output directory for packages (uses temp dir if unset)`)
  		now     = time.Now()
  	)
  	flag.CommandLine.Parse(cmdline)
  	*workdir = makeWorkdir(*workdir)
  	env := build.Env()
  	maybeSkipArchive(env)
  
  	// Import the signing key.
  	if key := getenvBase64("PPA_SIGNING_KEY"); len(key) > 0 {
  		gpg := exec.Command("gpg", "--import")
  		gpg.Stdin = bytes.NewReader(key)
  		build.MustRun(gpg)
  	}
  
  	// Create Debian packages and upload them
  	for _, pkg := range debPackages {
  		for _, distro := range debDistros {
  			meta := newDebMetadata(distro, *signer, env, now, pkg.Name, pkg.Version, pkg.Executables)
  			pkgdir := stageDebianSource(*workdir, meta)
  			debuild := exec.Command("debuild", "-S", "-sa", "-us", "-uc", "-d", "-Zxz")
  			debuild.Dir = pkgdir
  			build.MustRun(debuild)
  
  			var (
  				basename = fmt.Sprintf("%s_%s", meta.Name(), meta.VersionString())
  				source   = filepath.Join(*workdir, basename+".tar.xz")
  				dsc      = filepath.Join(*workdir, basename+".dsc")
  				changes  = filepath.Join(*workdir, basename+"_source.changes")
  			)
  			if *signer != "" {
  				build.MustRunCommand("debsign", changes)
  			}
  			if *upload != "" {
  				ppaUpload(*workdir, *upload, *sshUser, []string{source, dsc, changes})
  			}
  		}
  	}
  }
docs: // Debian Packaging