コード例 #1
0
        public void FromDirectoryTest()
        {
            ArchiveBuilder builder = new ArchiveBuilder();
            var            entries = builder.FromDirectory("archive", "/opt/demo", Array.Empty <ITaskItem>());

            Assert.Equal(2, entries.Count);

            var readme = entries[0];

            Assert.Equal("root", readme.Group);
            Assert.Equal(1L, readme.Inode);
            Assert.False(readme.IsAscii);
            Assert.Equal(string.Empty, readme.LinkTo);
            Assert.Equal(LinuxFileMode.S_IROTH | LinuxFileMode.S_IRGRP | LinuxFileMode.S_IRUSR | LinuxFileMode.S_IFREG, readme.Mode);
            Assert.Equal("root", readme.Owner);
            Assert.False(readme.RemoveOnUninstall);
            Assert.Equal("archive\\README.md", readme.SourceFilename);
            Assert.Equal("/opt/demo/README.md", readme.TargetPath);
            Assert.Equal("/opt/demo/README.md", readme.TargetPathWithFinalSlash);
            Assert.Equal(ArchiveEntryType.None, readme.Type);

            var script = entries[1];

            Assert.Equal("root", script.Group);
            Assert.Equal(2L, script.Inode);
            Assert.False(script.IsAscii);
            Assert.Equal(string.Empty, script.LinkTo);
            Assert.Equal(LinuxFileMode.S_IROTH | LinuxFileMode.S_IRGRP | LinuxFileMode.S_IRUSR | LinuxFileMode.S_IFREG, script.Mode);
            Assert.Equal("root", script.Owner);
            Assert.False(script.RemoveOnUninstall);
            Assert.Equal("archive\\script.sh", script.SourceFilename);
            Assert.Equal("/opt/demo/script.sh", script.TargetPath);
            Assert.Equal("/opt/demo/script.sh", script.TargetPathWithFinalSlash);
            Assert.Equal(ArchiveEntryType.None, script.Type);
        }
コード例 #2
0
        public void FromDirectoryWithAppHost()
        {
            ArchiveBuilder builder = new ArchiveBuilder();
            var            entries = builder.FromDirectory("archive", "demo", "/opt/demo", Array.Empty <ITaskItem>());

            Assert.Equal(3, entries.Count);

            var readme = entries[0];

            Assert.Equal("root", readme.Group);
            Assert.Equal(1L, readme.Inode);
            Assert.False(readme.IsAscii);
            Assert.Equal(string.Empty, readme.LinkTo);
            Assert.Equal(LinuxFileMode.S_IROTH | LinuxFileMode.S_IRGRP | LinuxFileMode.S_IRUSR | LinuxFileMode.S_IFREG, readme.Mode);
            Assert.Equal("root", readme.Owner);
            Assert.False(readme.RemoveOnUninstall);
            Assert.Equal(Path.Combine("archive", "README.md"), readme.SourceFilename);
            Assert.Equal("/opt/demo/README.md", readme.TargetPath);
            Assert.Equal("/opt/demo/README.md", readme.TargetPathWithFinalSlash);
            Assert.Equal(ArchiveEntryType.None, readme.Type);

            var script = entries[1];

            Assert.Equal("root", script.Group);
            Assert.Equal(2L, script.Inode);
            Assert.False(script.IsAscii);
            Assert.Equal(string.Empty, script.LinkTo);
            Assert.Equal(LinuxFileMode.S_IROTH | LinuxFileMode.S_IRGRP | LinuxFileMode.S_IRUSR | LinuxFileMode.S_IFREG, script.Mode);
            Assert.Equal("root", script.Owner);
            Assert.False(script.RemoveOnUninstall);
            Assert.Equal(Path.Combine("archive", "script.sh"), script.SourceFilename);
            Assert.Equal("/opt/demo/script.sh", script.TargetPath);
            Assert.Equal("/opt/demo/script.sh", script.TargetPathWithFinalSlash);
            Assert.Equal(ArchiveEntryType.None, script.Type);

            var symlink = entries[2];

            Assert.Equal("root", symlink.Group);
            Assert.Equal(3L, symlink.Inode);
            Assert.False(symlink.IsAscii);
            Assert.Equal("/opt/demo/demo", symlink.LinkTo);
            Assert.Equal(LinuxFileMode.S_IXOTH | LinuxFileMode.S_IROTH | LinuxFileMode.S_IXGRP | LinuxFileMode.S_IRGRP | LinuxFileMode.S_IXUSR | LinuxFileMode.S_IWUSR | LinuxFileMode.S_IRUSR | LinuxFileMode.S_IFLNK, symlink.Mode);
            Assert.Equal("root", symlink.Owner);
            Assert.False(symlink.RemoveOnUninstall);
            Assert.Null(symlink.SourceFilename);
            Assert.Equal("/usr/local/bin/demo", symlink.TargetPath);
            Assert.Equal("/usr/local/bin/demo", symlink.TargetPathWithFinalSlash);
            Assert.Equal(ArchiveEntryType.None, symlink.Type);
        }
コード例 #3
0
        public void FromDirectoryWithMetadataTest()
        {
            ArchiveBuilder builder = new ArchiveBuilder();

            Dictionary <string, string> metadata = new Dictionary <string, string>()
            {
                { "CopyToPublishDirectory", "Always" },
                { "LinuxPath", "/bin/script.sh" },
                { "LinuxFileMode", "755" },
            };

            var taskItem  = new TaskItem("script.sh", metadata);
            var taskItems = new ITaskItem[] { taskItem };
            var entries   = builder.FromDirectory("archive", "/opt/demo", taskItems);

            Assert.Equal(2, entries.Count);

            var readme = entries[0];

            Assert.Equal("root", readme.Group);
            Assert.Equal(1L, readme.Inode);
            Assert.False(readme.IsAscii);
            Assert.Equal(string.Empty, readme.LinkTo);
            Assert.Equal(LinuxFileMode.S_IROTH | LinuxFileMode.S_IRGRP | LinuxFileMode.S_IRUSR | LinuxFileMode.S_IFREG, readme.Mode);
            Assert.Equal("root", readme.Owner);
            Assert.False(readme.RemoveOnUninstall);
            Assert.Equal("archive\\README.md", readme.SourceFilename);
            Assert.Equal("/opt/demo/README.md", readme.TargetPath);
            Assert.Equal("/opt/demo/README.md", readme.TargetPathWithFinalSlash);
            Assert.Equal(ArchiveEntryType.None, readme.Type);

            var script = entries[1];

            Assert.Equal("root", script.Group);
            Assert.Equal(2L, script.Inode);
            Assert.False(script.IsAscii);
            Assert.Equal(string.Empty, script.LinkTo);

            // -rwxr-xr-x
            Assert.Equal(LinuxFileMode.S_IXOTH | LinuxFileMode.S_IROTH | LinuxFileMode.S_IXGRP | LinuxFileMode.S_IRGRP | LinuxFileMode.S_IXUSR | LinuxFileMode.S_IWUSR | LinuxFileMode.S_IRUSR, script.Mode);
            Assert.Equal("root", script.Owner);
            Assert.False(script.RemoveOnUninstall);
            Assert.Equal("archive\\script.sh", script.SourceFilename);
            Assert.Equal("/bin/script.sh", script.TargetPath);
            Assert.Equal("/bin/script.sh", script.TargetPathWithFinalSlash);
            Assert.Equal(ArchiveEntryType.None, script.Type);
        }
コード例 #4
0
        public static void HandlerItem(bool dev, PublishDirInfo item)
        {
            var rpmPath = GetPackPath(dev, item, FileEx.RPM);

            //var cpioPath = GetPackPath(item, FileEx.CPIO);

            using var targetStream = File.Open(rpmPath, FileMode.Create, FileAccess.ReadWrite, FileShare.None);
            //using var cpioStream = File.Open(cpioPath, FileMode.Create, FileAccess.ReadWrite, FileShare.None);
            using var cpioStream = new MemoryStream();

            ArchiveBuilder2 archiveBuilder2 = new()
            {
                Log = TaskLoggingHelper.Instance,
            };
            ArchiveBuilder archiveBuilder = archiveBuilder2;

            var archiveEntries = archiveBuilder.FromDirectory(
                item.Path,
                Constants.HARDCODED_APP_NAME,
                LinuxPackConstants.Prefix,
                Array.Empty <ITaskItem>());

            LinuxPackConstants.AddFileNameDesktop(archiveBuilder2, archiveEntries);

            //archiveEntries.AddRange(archiveBuilder.FromLinuxFolders(this.LinuxFolders));

            archiveEntries = archiveEntries
                             .OrderBy(e => e.TargetPathWithFinalSlash, StringComparer.Ordinal)
                             .ToList();

            CpioFileCreator cpioCreator = new CpioFileCreator();

            cpioCreator.FromArchiveEntries(
                archiveEntries,
                cpioStream);
            cpioStream.Position = 0;

            // Prepare the list of dependencies
            List <PackageDependency> dependencies = new List <PackageDependency>();

            if (item.DeploymentMode == DeploymentMode.FDE)
            {
                dependencies.Add(new PackageDependency {
                    Name = LinuxPackConstants.aspnetcore_runtime_6_0
                });
            }

            //if (this.RpmDotNetDependencies != null)
            //{
            //    dependencies.AddRange(
            //        this.RpmDotNetDependencies.Select(
            //            d => GetPackageDependency(d)));
            //}

            //if (this.RpmDependencies != null)
            //{
            //    dependencies.AddRange(
            //        this.RpmDependencies.Select(
            //            d => GetPackageDependency(d)));
            //}

            RpmPackageCreator rpmCreator = new RpmPackageCreator();

            rpmCreator.CreatePackage(
                archiveEntries,
                cpioStream,
                LinuxPackConstants.PackageName,
                Utils.GetVersion(dev),
                RpmTask.GetPackageArchitecture(item.Name),
                LinuxPackConstants.Release,
                LinuxPackConstants.CreateUser,
                LinuxPackConstants.UserName,
                LinuxPackConstants.InstallService,
                LinuxPackConstants.ServiceName,
                LinuxPackConstants.RpmVendor,
                LinuxPackConstants.Description,
                LinuxPackConstants.Url,
                LinuxPackConstants.Prefix,
                LinuxPackConstants.PreInstallScript,
                LinuxPackConstants.PostInstallScript,
                LinuxPackConstants.PreRemoveScript,
                LinuxPackConstants.PostRemoveScript,
                dependencies,
                null !,
                privateKey !,
                targetStream);
        }
コード例 #5
0
        public static void HandlerItem(bool dev, PublishDirInfo item)
        {
            var debPath = GetPackPath(dev, item, FileEx.DEB);
            //var debTarPath = GetPackPath(item, FileEx.DEB_TAR);
            var debTarXzPath = GetPackPath(dev, item, FileEx.DEB_TAR_XZ);

            using var targetStream = File.Open(debPath, FileMode.Create, FileAccess.ReadWrite, FileShare.None);
            //using var tarStream = File.Open(debTarPath, FileMode.Create, FileAccess.ReadWrite, FileShare.None);
            using var tarStream = new MemoryStream();

            ArchiveBuilder2 archiveBuilder2 = new()
            {
                Log = TaskLoggingHelper.Instance,
            };
            ArchiveBuilder archiveBuilder = archiveBuilder2;

            var archiveEntries = archiveBuilder.FromDirectory(
                item.Path,
                Constants.HARDCODED_APP_NAME,
                LinuxPackConstants.Prefix,
                Array.Empty <ITaskItem>());

            LinuxPackConstants.AddFileNameDesktop(archiveBuilder2, archiveEntries);

            //archiveEntries.AddRange(archiveBuilder.FromLinuxFolders(this.LinuxFolders));
            DebTask.EnsureDirectories(archiveEntries);

            archiveEntries = archiveEntries
                             .OrderBy(e => e.TargetPathWithFinalSlash, StringComparer.Ordinal)
                             .ToList();

            TarFileCreator.FromArchiveEntries(archiveEntries, tarStream);
            tarStream.Position = 0;

            // Prepare the list of dependencies
            List <string> dependencies = new List <string>();

            if (item.DeploymentMode == DeploymentMode.FDE)
            {
                dependencies.Add(LinuxPackConstants.aspnetcore_runtime_6_0);
            }

            //if (this.DebDependencies != null)
            //{
            //    var debDependencies = this.DebDependencies.Select(d => d.ItemSpec).ToArray();

            //    dependencies.AddRange(debDependencies);
            //}

            //if (this.DebDotNetDependencies != null)
            //{
            //    var debDotNetDependencies = this.DebDotNetDependencies.Select(d => d.ItemSpec).ToArray();

            //    dependencies.AddRange(debDotNetDependencies);
            //}

            // Prepare the list of recommended dependencies
            List <string> recommends = new List <string>();

            //if (this.DebRecommends != null)
            //{
            //    recommends.AddRange(this.DebRecommends.Select(d => d.ItemSpec));
            //}

            // XZOutputStream class has low quality (doesn't even know it's current position,
            // needs to be disposed to finish compression, etc),
            // So we are doing compression in a separate step
            using (var tarXzStream = File.Open(debTarXzPath, FileMode.Create, FileAccess.ReadWrite, FileShare.None))
                using (var xzStream = new XZOutputStream(tarXzStream, XZOutputStream.DefaultThreads, XZOutputStream.DefaultPreset, true))
                {
                    tarStream.CopyTo(xzStream);
                }

            using (var tarXzStream = File.Open(debTarXzPath, FileMode.Open, FileAccess.Read, FileShare.None))
            {
                var pkg = DebPackageCreator.BuildDebPackage(
                    archiveEntries,
                    LinuxPackConstants.PackageName,
                    LinuxPackConstants.Description,
                    LinuxPackConstants.DebMaintainer,
                    Utils.GetVersion(dev),
                    DebTask.GetPackageArchitecture(item.Name),
                    LinuxPackConstants.CreateUser,
                    LinuxPackConstants.UserName,
                    LinuxPackConstants.InstallService,
                    LinuxPackConstants.ServiceName,
                    LinuxPackConstants.Prefix,
                    //LinuxPackConstants.DebSection,
                    "utils",
                    LinuxPackConstants.DebPriority,
                    LinuxPackConstants.DebHomepage,
                    LinuxPackConstants.PreInstallScript,
                    LinuxPackConstants.PostInstallScript,
                    LinuxPackConstants.PreRemoveScript,
                    LinuxPackConstants.PostRemoveScript,
                    dependencies,
                    recommends,
                    null !);

                DebPackageCreator.WriteDebPackage(
                    archiveEntries,
                    tarXzStream,
                    targetStream,
                    pkg);
            }

            File.Delete(debTarXzPath);
        }