@@ -10,9 +10,11 @@ import { replace_all } from "@cocalc/util/misc";
10
10
const DEFAULT_IMAGE = "ubuntu:25.04" ;
11
11
12
12
const IMAGE_CACHE =
13
- process . env . COCALC_IMAGE_CACHE ?? join ( data , "cache" , "images" ) ;
14
- const PROJECT_ROOTS =
15
- process . env . COCALC_PROJECT_ROOTS ?? join ( data , "cache" , "project-roots" ) ;
13
+ process . env . COCALC_OVERLAY_IMAGE_CACHE ?? join ( data , "overlay" , "images" ) ;
14
+ const OVERLAY_ROOTFS =
15
+ process . env . COCALC_OVERLAY_ROOTFS ?? join ( data , "overlay" , "rootfs" ) ;
16
+ const OVERLAY_USER =
17
+ process . env . COCALC_OVERLAY_USER ?? join ( data , "overlay" , "user" ) ;
16
18
17
19
export const extractBaseImage = reuseInFlight ( async ( image : string ) => {
18
20
const baseImagePath = join ( IMAGE_CACHE , image ) ;
@@ -82,11 +84,11 @@ export const extractBaseImage = reuseInFlight(async (image: string) => {
82
84
} ) ;
83
85
84
86
function getMergedPath ( project_id ) {
85
- return join ( PROJECT_ROOTS , project_id ) ;
87
+ return join ( OVERLAY_ROOTFS , `project- ${ project_id } ` ) ;
86
88
}
87
89
88
- function getPaths ( { home , image, project_id } ) {
89
- const userOverlays = join ( home , ".overlay" , image ) ;
90
+ function getPaths ( { image, project_id } ) {
91
+ const userOverlays = join ( OVERLAY_USER , `project- ${ project_id } ` , image ) ;
90
92
const upper = join ( userOverlays , "upper" ) ;
91
93
const workdir = join ( userOverlays , "workdir" ) ;
92
94
const merged = getMergedPath ( project_id ) ;
@@ -99,16 +101,14 @@ function getImage(config) {
99
101
100
102
export async function mount ( {
101
103
project_id,
102
- home,
103
104
config,
104
105
} : {
105
106
project_id : string ;
106
- home : string ;
107
107
config ?: Configuration ;
108
108
} ) {
109
109
const image = getImage ( config ) ;
110
110
const lower = await extractBaseImage ( image ) ;
111
- const { upper, workdir, merged } = getPaths ( { home , image, project_id } ) ;
111
+ const { upper, workdir, merged } = getPaths ( { image, project_id } ) ;
112
112
await mkdir ( upper , { recursive : true } ) ;
113
113
await mkdir ( workdir , { recursive : true } ) ;
114
114
await mkdir ( merged , { recursive : true } ) ;
@@ -147,7 +147,7 @@ async function mountOverlayFs({ upper, workdir, merged, lower }) {
147
147
"overlay" ,
148
148
"overlay" ,
149
149
"-o" ,
150
- `lowerdir=${ escape ( lower ) } ,upperdir=${ escape ( upper ) } ,workdir=${ escape ( workdir ) } ` ,
150
+ `lowerdir=${ escape ( lower ) } ,upperdir=${ escape ( upper ) } ,workdir=${ escape ( workdir ) } ,index=on,nfs_export=on,xino=auto,redirect_dir=on ` ,
151
151
merged ,
152
152
] ,
153
153
} ) ;
0 commit comments