Port https://github.com/GoogleCloudPlatform/cos-gpu-installer/pull/43/ to v2 installer

BUG=b/159475619
TEST=presbumit
RELEASE_NOTE=Pass x11 specific args

Change-Id: Ia565e748191ee1fe7a00d8266fbc5f4c8df7aec1
Reviewed-on: https://cos-review.googlesource.com/c/cos/tools/+/20070
Cloud-Build: GCB Service account <228075978874@cloudbuild.gserviceaccount.com>
Reviewed-by: Roy Yang <royyang@google.com>
Reviewed-by: Arnav Kansal <rnv@google.com>
Reviewed-by: Ke Wu <mikewu@google.com>
Tested-by: Arnav Kansal <rnv@google.com>
diff --git a/src/cmd/cos_gpu_installer/internal/installer/installer.go b/src/cmd/cos_gpu_installer/internal/installer/installer.go
index 3b8b007..cc793f2 100644
--- a/src/cmd/cos_gpu_installer/internal/installer/installer.go
+++ b/src/cmd/cos_gpu_installer/internal/installer/installer.go
@@ -40,7 +40,7 @@
 	}
 
 	// Create unified memory device file.
-	if err := utils.RunCommandAndLogOutput(exec.Command("nvidia-modprobe", "-c0", "-u"), false); err != nil {
+	if err := utils.RunCommandAndLogOutput(exec.Command("nvidia-modprobe", "-c0", "-u", "-m"), false); err != nil {
 		return errors.Wrap(err, "failed to create unified memory device file")
 	}
 
@@ -131,6 +131,8 @@
 	cmd = exec.Command(filepath.Join(extractDir, "nvidia-installer"),
 		"--utility-prefix="+gpuInstallDirContainer,
 		"--opengl-prefix="+gpuInstallDirContainer,
+		"--x-prefix="+gpuInstallDirContainer,
+		"--install-libglvnd",
 		"--no-install-compat32-libs",
 		"--log-file-name="+filepath.Join(gpuInstallDirContainer, "nvidia-installer.log"),
 		"--silent",
@@ -299,12 +301,13 @@
 		}
 	}
 	gpuModules := map[string]string{
-		"nvidia":     filepath.Join(gpuInstallDirContainer, "drivers", "nvidia.ko"),
-		"nvidia_uvm": filepath.Join(gpuInstallDirContainer, "drivers", "nvidia-uvm.ko"),
-		"nvidia_drm": filepath.Join(gpuInstallDirContainer, "drivers", "nvidia-drm.ko"),
+		"nvidia":         filepath.Join(gpuInstallDirContainer, "drivers", "nvidia.ko"),
+		"nvidia_uvm":     filepath.Join(gpuInstallDirContainer, "drivers", "nvidia-uvm.ko"),
+		"nvidia_drm":     filepath.Join(gpuInstallDirContainer, "drivers", "nvidia-drm.ko"),
+		"nvidia_modeset": filepath.Join(gpuInstallDirContainer, "drivers", "nvidia-modeset.ko"),
 	}
 	// Need to load modules in order due to module dependency.
-	moduleNames := []string{"nvidia", "nvidia_uvm", "nvidia_drm"}
+	moduleNames := []string{"nvidia", "nvidia_uvm", "nvidia_drm", "nvidia_modeset"}
 	for _, moduleName := range moduleNames {
 		modulePath := gpuModules[moduleName]
 		if err := modules.LoadModule(moduleName, modulePath); err != nil {