< prev index next >

src/jdk.jpackage/linux/classes/jdk/jpackage/internal/LinuxDebBundler.java

Print this page

        

*** 27,38 **** --- 27,43 ---- import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.*; import java.nio.charset.StandardCharsets; + import java.nio.file.FileVisitResult; import java.nio.file.Files; import java.nio.file.Path; + import java.nio.file.SimpleFileVisitor; + import java.nio.file.StandardCopyOption; + import java.nio.file.attribute.BasicFileAttributes; + import java.nio.file.attribute.PosixFilePermission; import java.nio.file.attribute.PosixFilePermissions; import java.text.MessageFormat; import java.util.*; import java.util.regex.Pattern;
*** 313,335 **** } private boolean prepareProto(Map<String, ? super Object> params) throws PackagerException, IOException { File appImage = StandardBundlerParam.getPredefinedAppImage(params); - File appDir = null; // we either have an application image or need to build one if (appImage != null) { - appDir = new File(APP_IMAGE_ROOT.fetchFrom(params), - APP_NAME.fetchFrom(params)); // copy everything from appImage dir into appDir/name ! IOUtils.copyRecursive(appImage.toPath(), appDir.toPath()); } else { ! appDir = APP_BUNDLER.fetchFrom(params).doBundle(params, APP_IMAGE_ROOT.fetchFrom(params), true); } ! return appDir != null; } public File bundle(Map<String, ? super Object> params, File outdir) throws PackagerException { --- 318,343 ---- } private boolean prepareProto(Map<String, ? super Object> params) throws PackagerException, IOException { File appImage = StandardBundlerParam.getPredefinedAppImage(params); // we either have an application image or need to build one if (appImage != null) { // copy everything from appImage dir into appDir/name ! IOUtils.copyRecursive(appImage.toPath(), ! getConfig_RootDirectory(params).toPath()); } else { ! File bundleDir = APP_BUNDLER.fetchFrom(params).doBundle(params, APP_IMAGE_ROOT.fetchFrom(params), true); + if (bundleDir == null) { + return false; + } + Files.move(bundleDir.toPath(), getConfig_RootDirectory( + params).toPath(), StandardCopyOption.REPLACE_EXISTING); } ! return true; } public File bundle(Map<String, ? super Object> params, File outdir) throws PackagerException {
*** 353,362 **** --- 361,371 ---- try { imageDir.mkdirs(); configDir.mkdirs(); if (prepareProto(params) && prepareProjectConfig(params)) { + adjustPermissionsRecursive(imageDir); return buildDeb(params, outdir); } return null; } catch (IOException ex) { Log.verbose(ex);
*** 410,424 **** } } return count; } private boolean prepareProjectConfig(Map<String, ? super Object> params) throws IOException { Map<String, String> data = createReplacementData(params); ! File rootDir = LinuxAppBundler.getRootDir(APP_IMAGE_ROOT.fetchFrom( ! params), params); File binDir = new File(rootDir, "bin"); File iconTarget = getConfig_IconFile(binDir, params); File icon = ICON_PNG.fetchFrom(params); if (!StandardBundlerParam.isRuntimeInstaller(params)) { --- 419,460 ---- } } return count; } + private void adjustPermissionsRecursive(File dir) throws IOException { + Files.walkFileTree(dir.toPath(), new SimpleFileVisitor<Path>() { + @Override + public FileVisitResult visitFile(Path file, + BasicFileAttributes attrs) + throws IOException { + if (file.endsWith(".so") || !Files.isExecutable(file)) { + setPermissions(file.toFile(), "rw-r--r--"); + } else if (Files.isExecutable(file)) { + setPermissions(file.toFile(), "rwxr-xr-x"); + } + return FileVisitResult.CONTINUE; + } + + @Override + public FileVisitResult postVisitDirectory(Path dir, IOException e) + throws IOException { + if (e == null) { + setPermissions(dir.toFile(), "rwxr-xr-x"); + return FileVisitResult.CONTINUE; + } else { + // directory iteration failed + throw e; + } + } + }); + } + private boolean prepareProjectConfig(Map<String, ? super Object> params) throws IOException { Map<String, String> data = createReplacementData(params); ! File rootDir = getConfig_RootDirectory(params); File binDir = new File(rootDir, "bin"); File iconTarget = getConfig_IconFile(binDir, params); File icon = ICON_PNG.fetchFrom(params); if (!StandardBundlerParam.isRuntimeInstaller(params)) {
*** 574,592 **** if (!addedEntry) { registrations.append(" xdg-mime install ") .append(LINUX_INSTALL_DIR.fetchFrom(params)) .append("/") .append(data.get("APPLICATION_FS_NAME")) ! .append("/") .append(mimeInfoFile) .append("\n"); deregistrations.append(" xdg-mime uninstall ") .append(LINUX_INSTALL_DIR.fetchFrom(params)) .append("/") .append(data.get("APPLICATION_FS_NAME")) ! .append("/") .append(mimeInfoFile) .append("\n"); addedEntry = true; } else { desktopMimes.append(";"); --- 610,628 ---- if (!addedEntry) { registrations.append(" xdg-mime install ") .append(LINUX_INSTALL_DIR.fetchFrom(params)) .append("/") .append(data.get("APPLICATION_FS_NAME")) ! .append("/bin/") .append(mimeInfoFile) .append("\n"); deregistrations.append(" xdg-mime uninstall ") .append(LINUX_INSTALL_DIR.fetchFrom(params)) .append("/") .append(data.get("APPLICATION_FS_NAME")) ! .append("/bin/") .append(mimeInfoFile) .append("\n"); addedEntry = true; } else { desktopMimes.append(";");
*** 757,767 **** Map<String, ? super Object> params) throws IOException { Map<String, String> data = new HashMap<>(); String launcher = LinuxAppImageBuilder.getLauncherRelativePath(params); data.put("APPLICATION_NAME", APP_NAME.fetchFrom(params)); ! data.put("APPLICATION_FS_NAME", APP_NAME.fetchFrom(params)); data.put("APPLICATION_PACKAGE", BUNDLE_NAME.fetchFrom(params)); data.put("APPLICATION_VENDOR", VENDOR.fetchFrom(params)); data.put("APPLICATION_MAINTAINER", MAINTAINER.fetchFrom(params)); data.put("APPLICATION_VERSION", VERSION.fetchFrom(params)); data.put("APPLICATION_RELEASE", RELEASE.fetchFrom(params)); --- 793,804 ---- Map<String, ? super Object> params) throws IOException { Map<String, String> data = new HashMap<>(); String launcher = LinuxAppImageBuilder.getLauncherRelativePath(params); data.put("APPLICATION_NAME", APP_NAME.fetchFrom(params)); ! data.put("APPLICATION_FS_NAME", ! getConfig_RootDirectory(params).getName()); data.put("APPLICATION_PACKAGE", BUNDLE_NAME.fetchFrom(params)); data.put("APPLICATION_VENDOR", VENDOR.fetchFrom(params)); data.put("APPLICATION_MAINTAINER", MAINTAINER.fetchFrom(params)); data.put("APPLICATION_VERSION", VERSION.fetchFrom(params)); data.put("APPLICATION_RELEASE", RELEASE.fetchFrom(params));
*** 774,786 **** data.put("APPLICATION_COPYRIGHT", COPYRIGHT.fetchFrom(params)); data.put("APPLICATION_LICENSE_TEXT", LICENSE_TEXT.fetchFrom(params)); data.put("APPLICATION_ARCH", getDebArch()); data.put("APPLICATION_INSTALLED_SIZE", Long.toString(getInstalledSizeKB(params))); ! String deps = LINUX_PACKAGE_DEPENDENCIES.fetchFrom(params); ! data.put("PACKAGE_DEPENDENCIES", ! deps.isEmpty() ? "" : "Depends: " + deps); data.put("RUNTIME_INSTALLER", "" + StandardBundlerParam.isRuntimeInstaller(params)); return data; } --- 811,822 ---- data.put("APPLICATION_COPYRIGHT", COPYRIGHT.fetchFrom(params)); data.put("APPLICATION_LICENSE_TEXT", LICENSE_TEXT.fetchFrom(params)); data.put("APPLICATION_ARCH", getDebArch()); data.put("APPLICATION_INSTALLED_SIZE", Long.toString(getInstalledSizeKB(params))); ! data.put("PACKAGE_DEPENDENCIES", LINUX_PACKAGE_DEPENDENCIES.fetchFrom( ! params)); data.put("RUNTIME_INSTALLER", "" + StandardBundlerParam.isRuntimeInstaller(params)); return data; }
*** 818,827 **** --- 854,869 ---- private File getConfig_CopyrightFile(Map<String, ? super Object> params) { return Path.of(DEB_IMAGE_DIR.fetchFrom(params).getAbsolutePath(), "usr", "share", "doc", BUNDLE_NAME.fetchFrom(params), "copyright").toFile(); } + private File getConfig_RootDirectory( + Map<String, ? super Object> params) { + return Path.of(APP_IMAGE_ROOT.fetchFrom(params).getAbsolutePath(), + BUNDLE_NAME.fetchFrom(params)).toFile(); + } + private File buildDeb(Map<String, ? super Object> params, File outdir) throws IOException { File outFile = new File(outdir, FULL_PACKAGE_NAME.fetchFrom(params)+".deb"); Log.verbose(MessageFormat.format(I18N.getString(
< prev index next >