Inedo Community Forums Forums
    • Recent
    • Tags
    • Popular
    • Login
    1. Home
    2. atripp
    3. Posts

    Welcome to the Inedo Forums! Check out the Forums Guide for help getting started.

    If you are experiencing any issues with the forum software, please visit the Contact Form on our website and let us know!

    atrippA Offline
    • Profile
    • Following 0
    • Followers 3
    • Topics 1
    • Posts 1,947
    • Groups 2

    Posts

    Recent Best Controversial
    • RE: Running proget in a container with SSL

      Hello; for this, or really any other Dockerized web application, you can setup a reverse proxy. There are a ton of ways to do this, but I'd suggest to search for "How to Configure a Nginx as a HTTPS Reverse Proxy" and see which option(s) make sense for your environment

      posted in Support
      atrippA
      atripp
    • RE: Package Upload Information

      This would be captured in an event (Admin > ProGet Event Log); the UI doesn't currently support package-level queries (you can filter a few other ways), but you could do a database query pretty easily...

      SELECT *
      FROM [EventOccurrences]
       WHERE [Event_Code] = 'PKGADD'
         AND [Feed_Id] = 2
         AND [Details_Xml].value('(/Details/@Package_Name)[1]', 'varchar(max)')  LIKE 'Carbon'
         AND [Details_Xml].value('(/Details/@Package_Version)[1]', 'varchar(max)')  LIKE '2.9.0'
      
      posted in Support
      atrippA
      atripp
    • RE: Running Proget using GMSA

      Hello; all versions of ProGet support gMSA. From the application (ProGet's) perspective, it's just a regular user.

      posted in Support
      atrippA
      atripp
    • RE: registry.npmjs.org connector requires authentication - why?

      I'll start with the easy one; connectors are "read only", there is no mechanism to push a package to a connector in ProGet.

      As for authentication, I really don't know. That's weird, and it's definitely nothing in ProGet.

      The 401 could be coming from a proxy server (inside your network) or from registry.npmjs.org itself, and there's no way to know within ProGet which it is.

      • I can't imagine it's a proxy server that somehow works with a npmjs.org username/password. But, maybe it is.

      • I don't know why registry.nmpjs.org would send you a 401. Other users haven't experienced this, and I just tested it on a brand new instance myself... and the connector worked just fine. There is talk of throttling large organizations, so maybe it's related to them blocking your IP or something?

      It could have also just been a temporary glitch, somewere. Maybe if you remove authentication, it will work.

      ABout the only way to diagnose this would be to attach ProGet to a tool like Fiddler or WireShark, so you can see the requests PRoGet makes, then reproduce those exact same requests, and either reach out to your internal IT folks or try your luck with npmjs.

      posted in Support
      atrippA
      atripp
    • RE: Performance docs/case studies

      Hello;

      Your best metric is going to be your users; if they're complaining it's slow, then it's probably too slow. My guess is that it's intermittant (during peak times).

      But in any case, it's not about the number of packages (a micro server can easily serve millions of packages nearly instantly), it's about the number of simultaneous connections (requests) to the server, and the features you've enabled (like license checking, etc).

      It sounds like you've got a single "2 core instance with 8gb of ram" server; while you can try to increase the hardware, the bottleneck is most likely network related; a single server might not just be enough to keep up with the traffic from your developers. Keep in mind that "plain old NPM" (i.e. registry.npmjs.org) runs on a massive, dedicated data center and is heavily cached (basically read-only).

      The ProGet Free to ProGet Enterprise article contains some general guidance that might help answer your questions:

      • High Performance: 1 Server per 50 Developers. The network never slows down, never crashes.
      • Average Performance: 1 Server per 100 Developers. The network slows down and drops productivity 10% on average during peak times daily.
      • Acceptable Performance: 1 Server per 200 Developers. The network slows down and drops productivity 10-30% during peak times daily.
      • Unacceptable Performance: 1 Server per 250+ Developers. The network is unstable and crashes.

      You can try disabling connectors, disabling license checking, disabling vulnerability scanning -- but those are really important features, so your best bet will be to plan for a load-balanced scenario.

      See How to Prevent Server Overload in ProGet to learn more.

      posted in Support
      atrippA
      atripp
    • RE: Cloud Storage for Proget, Did you plan to support Google Cloud Storage in the future ?

      Hello; this is the first such request for GCP. These are extensible components, and it's possible we can support it very easily -- but we like to partner with customers, since we have very little knowledge about GCP and like to make sure it works in the field before making it public.

      The best way to get this rolling would be to submit a feature request, and ideally bring it up with your technical account manager to see if it can get escalated.

      posted in Support
      atrippA
      atripp
    • RE: Displaying different version in Asset doesn't work correctly in 2.2.7

      Hello; thank for the report I was able to confirm this is an issue (OT-350), and we'll get it fixed ASAP! Perhaps even this next maintenance release

      In the mean time, you can manual append &version=X to the querystring if you need to see the previous version.

      posted in Support
      atrippA
      atripp
    • RE: Uninstall of Otter Management installer

      The uninstaller found within the traditional installer (i.e. not the Inedo Hub) can be a bit tricky to debug... this is one of the many reasons behind building the Inedo Hub. We will likely only support the Hub next year.

      If you're not getting any errors when you run the installer, the easiest way to diagnose the uninstaller is by following the code. It may be a missing registry key, permissions, etc.

      You can also use the code to see exactly what needs to be uninstalled, should you need to do it manually.

              public static void Uninstall(UninstallOptions options)
              {
                  string servicePath;
                  string webPath;
                  try
                  {
                      GetRegistryInfo(out servicePath, out webPath);
                  }
                  catch
                  {
                      return;
                  }
      
                  string connectionString;
                  try
                  {
                      GetServiceInfo(servicePath, out connectionString);
                  }
                  catch
                  {
                      return;
                  }
      
                  StopService("INEDOOTTERSVC");
                  StopService("INEDOOTTERWEBSVC");
      
                  RunProcess(Path.Combine(servicePath, "Otter.Service.exe"), "uninstall");
                  RunProcess(Path.Combine(servicePath, "Otter.Service.exe"), "uninstallweb");
      
                  try { IIS.Current.DeleteWebSite("Otter"); }
                  catch { }
      
                  try { IIS.Current.DeleteAppPool("OtterAppPool"); }
                  catch { }
      
                  Thread.Sleep(5000);
      
                  DeleteDirectory(webPath);
                  DeleteDirectory(servicePath);
      
                  if (options.DeleteDatabase && !string.IsNullOrWhiteSpace(connectionString))
                  {
                      try
                      {
                          var connStringBuilder = new SqlConnectionStringBuilder(connectionString);
                          var dbName = connStringBuilder.InitialCatalog;
                          if (!string.IsNullOrWhiteSpace(dbName))
                          {
                              connStringBuilder.InitialCatalog = string.Empty;
      
                              using (var conn = new SqlConnection(connStringBuilder.ToString()))
                              {
                                  conn.Open();
      
                                  using (var cmd = new SqlCommand(string.Format("DROP DATABASE [{0}]", dbName), conn))
                                  {
                                      cmd.ExecuteNonQuery();
                                  }
                              }
                          }
                      }
                      catch
                      {
                      }
                  }
      
                  Registry.LocalMachine.DeleteSubKeyTree(@"SOFTWARE\Inedo\Otter", false);
                  Registry.LocalMachine.DeleteSubKeyTree(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\InedoOtter", false);
                  DeleteDirectory(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonStartMenu), @"Inedo\Otter"));
                  try { Directory.Delete(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonStartMenu), "Inedo"), false); }
                  catch { }
      
                  FinishUninstall();
              }
      
              private static void GetRegistryInfo(out string servicePath, out string webPath)
              {
                  using (var key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Inedo\Otter", false))
                  {
                      servicePath = (string)key.GetValue("ServicePath");
                      webPath = (string)key.GetValue("WebPath");
                  }
              }
              private static void GetServiceInfo(string servicePath, out string connectionString)
              {
                  var xdoc = XDocument.Load(Path.Combine(servicePath, "Otter.Service.exe.config"));
      
                  connectionString = xdoc
                      .Element("configuration")
                      .Element("appSettings")
                      .Elements("add")
                      .Where(s => (string)s.Attribute("key") == "InedoLib.DbConnectionString")
                      .Select(s => (string)s.Attribute("value"))
                      .First();
              }
      
      posted in Support
      atrippA
      atripp
    • RE: Inedo.com security

      We don't have a bug bounty program, but please submit a ticket if you find anything and we will immediately address it.

      posted in Support
      atrippA
      atripp
    • RE: Proget Deployment Tab Pagination and order by date desc

      Hi Fabrice, can you open a feature request for this? It's a ticket, and we can more easily track/prioritize it on our end this way.

      We generally avoid just adding "pagination and order by" in data lists because it usually means you're having to click through page after page and play around with order to find what you're looking for. We'd like to make it much easier :)

      So to do that, we'd love to learn more about the use case, because we have a feature on our roadmap to give a lot more insight into "which project uses a component", and I think you're definitely on the right track by using those headers.

      So screenshots, etc., would be great (and having this tracked in that feature request is so much simpler for us to manage internally).

      We can update this post once we have more insight, and if anyone is curious we can just reply with more info here :)

      posted in Support
      atrippA
      atripp
    • RE: Feature Request- Server Import Improvment

      hi Jonathan, can you help me with a test case on the duplicate server issue?

      Are you trying do an infrastructure import that has the same server name defined twice in the same JSON document?

      posted in Support
      atrippA
      atripp
    • RE: Feature Request- Server Import Improvment

      hi Jonathan,

      I haven't forgotten about this, but are finally clearing out our backlog,...

      1. What type of errors are you encountering?

      2. Can you be more specific about the "overwrite existing"? What are you importing, and what would you like? Currently it should be "merged" for the most part, depending on what you're wanting to merge...

      Alana

      posted in Support
      atrippA
      atripp
    • RE: ProGet platform offering

      We have a lot of customers who host an instance of ProGet in the cloud, but we do not offer hosting at this time for a number of reasons:

      • better control of infrastructure; you can design your instance to fit for you, instead of in the limited buckets that would be provided
      • choose your own provider; instead of being forced into using whatever cloud provider (or random datacenter) we choose, you can pick the one that you use
      • full control over disaster recovery; no company will care about your data as much as you will, and getting a month free of hosting after losing all of your data probably isn't going to make any of your stakeholders happy

      As far as how to host a ProGet instance in the cloud, you would be safe simply using built-in authentication and installing it on a public-facing server with only the HTTPS port open. "Anyone" could access the log-in page, and any feeds that you give "Anonymous" access to, but on it's own, ProGet has been pen-tested and will be secure.

      You could also do any of the following:

      • IP Restrict at the network level
      • use ExpressRoute (a kind of VPN)
      • integrate LDAP (Azure version) instead of built-in authentication
      • sync Azure AD with your AD

      Those are progressively more difficult to configure, so it just depends on how much effort you want in a POC.

      Note: we don't recommend regular HTTP, because then a "man-in-the-middle" attack could capture authentication information. But if it's only a POC, maybe it's ok.

      Finally, some articles for your consideration;

      • A Comparison: Artifactory vs ProGet
      • Azure DevOps and BuildMaster Compared - this is specific to BuildMaster, but most of the points will apply to ProGet
      posted in Support
      atrippA
      atripp
    • RE: Proget Virtual packages -

      hi Charlie,

      Can you provide us with a very specific reproduction case?

      Here is a very specific case where it's working as expected...

      {
       "name": "dfhack-test-1",
       "version": "0.44.12-r2.p190516000",
       "contents": [
         {
          "type": "virtualDirectory",
          "source": "dwarffortress/core/linux64:0.44.12"
         },
         {
          "type": "virtualDirectory",
          "source": "dfhack/core/linux64:0.44.12-r2"
         },
         {
          "type": "virtualDirectory",
          "virtualPath": "hack/plugins",
          "source": "dfhack/plugin/weblegends/linux64-pre:0.44.12-r2.p190516000"
         },
         {
          "type": "virtualDirectory",
          "virtualPath": "hack/plugins",
          "source": "dfhack/plugin/df-ai/linux64-pre:0.44.12-r2.p190516000"
         }
        ]
      }
      

      You can see this package live at https://proget.lubar.me/feeds/DwarfFortress-prerelease/dfhack-test-1/0.44.12-r2.p190516000

      posted in Support
      atrippA
      atripp
    • RE: Scanning containers vulnerabilities

      Not as of ProGet 5.1, but this is definitely on our roadmap and we plan to do it likely in 5.2 or 5.3.

      posted in Support
      atrippA
      atripp
    • RE: Unable to authenticate to Proget

      Ah, I'm glad to hear it :)

      Romp should be able to download packages directly, then install them? Just have Romp point to a feed source instead of a local file on disk

      Anyways this usecase sounds really awesome, I would love to learn more about it once you get it closer to working.

      posted in Support
      atrippA
      atripp
    • RE: Unable to authenticate to Proget

      That definitely sounds Windows Authentication related... do you have a site in IIS setup that doesn't have Windows Auth enabled? That might be the way to go.

      Unfortunately containers (even windows one) don't seem to work well with Kerberors/Windows Auth...

      posted in Support
      atrippA
      atripp
    • RE: CRAN support?

      Eventually, but we haven't had too many requests for it :)

      If this is something you're interested in, we'd love to partner with a customer or two to help get this developed.

      posted in Support
      atrippA
      atripp
    • RE: Adding functions in Otter

      I'm not 100% sure I understand, but when I see "small functions of reusable code", the first thing that comes to mind are Modules. These are bits of OtterScript that you can from OtterScript using the call statement.

      module Get-DomainMembership<$Param1, $OptionalParam2 = default, out $OutParam>
      {
         set $outParam = hello;
      }
      
      call Get-DomainMembership
      (
        Param1: some value,
        Param2 => $SomeVariable
      );
      

      And then there are also Script Assets, which are PowerShell scripts that you call using the pscall operation from within OtterScript.

      Is this helpful?

      posted in Support
      atrippA
      atripp
    • RE: Collect phase failed with SQL Error Exception

      Good news, thanks to some data from customers enabling our CEIP, we've identified some problems and will fix them ASAP. Please wait for a new version on Friday of this week :)

      posted in Support
      atrippA
      atripp
    • 1 / 1