Ejemplo n.º 1
0
        public static IEnumerable <IContent> Wrap(TarInput input)
        {
            var baseDir = input.BaseDir == null ? null : SysPath.GetFullPath(input.BaseDir);

            foreach (var file in input.Files)
            {
                var relative = baseDir == null?SysPath.GetFileName(file)
                                   : SysPath.GetFullPath(file).Replace(baseDir, string.Empty)
                                   .TrimStart(SysPath.DirectorySeparatorChar);

                yield return(new RpmContent
                {
                    Source = file,
                    Path = SysPath.Combine(input.InstallDir, relative),
                    User = "******",
                    Group = "root"
                });
            }
        }
Ejemplo n.º 2
0
        public static int Main(string[] parms)
        {
            if (parms.Length != 1)
            {
                Console.WriteLine("Usage: [json-file]");
                return(-1);
            }
            // Read configuration
            var set    = new JsonSerializerSettings();
            var text   = File.ReadAllText(parms.First(), Encoding.UTF8);
            var config = JsonConvert.DeserializeObject <TuxConfig>(text, set);

            config.BuildDirectory = Environment.GetEnvironmentVariable("BUILD_DMG") ?? config.BuildDirectory;
            // Create temporary directory
            var temp = config.AppTemp;

            Directory.CreateDirectory(temp);
            var enc = new UTF8Encoding(false);
            // Write data stuff
            var dataTgz      = Path.Combine(temp, "data.tar.gz");
            var dataFiles    = Directory.GetFiles(config.BuildDirectory, "*.*", SearchOption.AllDirectories);
            var lowerPkgName = config.PkgName.ToLowerInvariant();
            var installRoot  = Path.Combine(".", "opt", lowerPkgName);
            var dataStuff    = new TarInput
            {
                Files      = dataFiles,
                InstallDir = installRoot,
                BaseDir    = config.BuildDirectory
            };
            // Write meta stuff
            var docRoot   = Path.Combine(".", "usr", "share", "doc", lowerPkgName);
            var copyright = Path.Combine(temp, "copyright");

            LinuxIO.WriteScript(copyright, enc, GenerateCopyright(config));
            var changelogTxt = Path.Combine(temp, "changelog");

            LinuxIO.WriteScript(changelogTxt, enc, GenerateChangelog(config));
            var changelog = Path.Combine(temp, "changelog.gz");

            WriteGzArchive(changelog, changelogTxt);
            var metaStuff = new TarInput
            {
                Files      = new[] { copyright, changelog },
                InstallDir = docRoot,
            };

            // Generate RPM data package
            Redhat.Create(config, RpmContent.Wrap(metaStuff), RpmContent.Wrap(dataStuff));
            // Generate DEB data package
            WriteTarGzArchive(dataTgz, metaStuff, dataStuff);
            // Collect control stuff
            var control = Path.Combine(temp, "control");

            Debian.WriteControl(control, config, enc);
            var postinst = Path.Combine(temp, "postinst");

            LinuxIO.WriteScript(postinst, enc, new[]
            {
                "#!/bin/sh",
                "set -e",
                "if [ \"$1\" = \"configure\" ] && [ -x \"`which update-menus 2>/dev/null`\" ]; then",
                "\tupdate-menus",
                "fi"
            });
            var postrm = Path.Combine(temp, "postrm");

            LinuxIO.WriteScript(postrm, enc, new[]
            {
                "#!/bin/sh",
                "set -e",
                "if [ -x \"`which update-menus 2>/dev/null`\" ]; then update-menus; fi"
            });
            // Write control bundle
            var controlTgz = Path.Combine(temp, "control.tar.gz");

            WriteTarGzArchive(controlTgz, new TarInput
            {
                Files      = new[] { control, postinst, postrm },
                InstallDir = Path.Combine(".")
            });
            // Write version
            var binaryFile = Path.Combine(temp, "debian-binary");

            File.WriteAllText(binaryFile, "2.0" + '\n', enc);
            // Write Debian package
            var debFile = $"{config.PackageFile}.deb";

            WriteArFile(debFile, binaryFile, controlTgz, dataTgz);
            // Done
            return(0);
        }