Navigation

    • Register
    • Login
    • Search
    • Recent
    • Popular
    1. Home
    2. Tyler
    3. Posts
    T
    • Profile
    • Following 0
    • Followers 0
    • Topics 13
    • Posts 38
    • Best 5
    • Groups 0

    Posts made by Tyler

    • Continuous MySqlConnector errors

      I've been chasing down a problem and along the way, I'm now confident unrelated to the problem, I found there's many errors between Theopenem and MariaDB

      Application.log

      2025-01-27 14:35:47,724 [ExpirationManager #1] ERROR Hangfire.MySql.ExpirationManager MySqlConnector.MySqlException (0x80004005): The Command Timeout expired before the operation completed. ---> MySqlConnector.MySqlException (0x80004005): The Command Timeout expired before the operation completed.
      at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
      at MySqlConnector.Protocol.Serialization.BufferedByteReader.<ReadBytesAsync>d__2.MoveNext() in /_/src/MySqlConnector/Protocol/Serialization/BufferedByteReader.cs:line 36
      --- End of stack trace from previous location where exception was thrown ---
      at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
      at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
      at MySqlConnector.Protocol.Serialization.ProtocolUtility.ReadPacketAsync(BufferedByteReader bufferedByteReader, IByteHandler byteHandler, Func`1 getNextSequenceNumber, ProtocolErrorBehavior protocolErrorBehavior, IOBehavior ioBehavior) in /_/src/MySqlConnector/Protocol/Serialization/ProtocolUtility.cs:line 408
      at MySqlConnector.Protocol.Serialization.ProtocolUtility.DoReadPayloadAsync(BufferedByteReader bufferedByteReader, IByteHandler byteHandler, Func`1 getNextSequenceNumber, ArraySegmentHolder`1 previousPayloads, ProtocolErrorBehavior protocolErrorBehavior, IOBehavior ioBehavior) in /_/src/MySqlConnector/Protocol/Serialization/ProtocolUtility.cs:line 466
      at MySqlConnector.Protocol.Serialization.StandardPayloadHandler.ReadPayloadAsync(ArraySegmentHolder`1 cache, ProtocolErrorBehavior protocolErrorBehavior, IOBehavior ioBehavior) in /_/src/MySqlConnector/Protocol/Serialization/StandardPayloadHandler.cs:line 42
      at MySqlConnector.Core.ServerSession.ReceiveReplyAsync(IOBehavior ioBehavior, CancellationToken cancellationToken) in /_/src/MySqlConnector/Core/ServerSession.cs:line 765
      --- End of stack trace from previous location where exception was thrown ---
      at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
      at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
      at MySqlConnector.Core.ServerSession.<ReceiveReplyAsyncAwaited>d__78.MoveNext() in /_/src/MySqlConnector/Core/ServerSession.cs:line 800
      --- End of stack trace from previous location where exception was thrown ---
      at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
      at MySqlConnector.Core.ResultSet.<ReadResultSetHeaderAsync>d__2.MoveNext() in /_/src/MySqlConnector/Core/ResultSet.cs:line 49
      at MySqlConnector.MySqlDataReader.ActivateResultSet() in /_/src/MySqlConnector/MySqlDataReader.cs:line 124
      at MySqlConnector.MySqlDataReader.<CreateAsync>d__97.MoveNext() in /_/src/MySqlConnector/MySqlDataReader.cs:line 436
      --- End of stack trace from previous location where exception was thrown ---
      at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
      at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
      at MySqlConnector.Core.CommandExecutor.<ExecuteReaderAsync>d__0.MoveNext() in /_/src/MySqlConnector/Core/CommandExecutor.cs:line 61
      --- End of stack trace from previous location where exception was thrown ---
      at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
      at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
      at MySqlConnector.MySqlCommand.<ExecuteNonQueryAsync>d__69.MoveNext() in /_/src/MySqlConnector/MySqlCommand.cs:line 263
      --- End of stack trace from previous location where exception was thrown ---
      at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
      at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
      at MySqlConnector.MySqlCommand.ExecuteNonQuery() in /_/src/MySqlConnector/MySqlCommand.cs:line 100
      at Dapper.SqlMapper.ExecuteCommand(IDbConnection cnn, CommandDefinition& command, Action`2 paramReader) in /_/Dapper/SqlMapper.cs:line 2848
      at Dapper.SqlMapper.ExecuteImpl(IDbConnection cnn, CommandDefinition& command) in /_/Dapper/SqlMapper.cs:line 581
      at Dapper.SqlMapper.Execute(IDbConnection cnn, String sql, Object param, IDbTransaction transaction, Nullable`1 commandTimeout, Nullable`1 commandType) in /_/Dapper/SqlMapper.cs:line 452
      at Hangfire.MySql.ExpirationManager.<>c__DisplayClass9_1.<Execute>b__0(MySqlConnection connection)
      

      Event Viewer filtering for source: MariaDB

      Aborted connection 793505 to db: 'theopenem' user: 'root' host: 'Crab.avenue.lan' (Got an error reading communication packets)
      

      Event Viewer has 41,199 events with the same event ID, 100, with the oldest on record going to January 8th. I'm not aware of anything in particular that happened on January 8th.

      The error I was chasing down now appears to be related to drivers for the machines being imaged, I thought it was an issue with accessing the .wim files but I found a thread on here talking about drivers so I went and imaged a machine I'm extremely familiar with and it worked. So probably not related. At this time I don't know of any symptoms connected to these errors. So, I consider this a bug report not a support request.

      posted in Feature Requests / Feedback
      T
      Tyler
    • RE: Microsoft Storage Spaces

      I had to step away from this for a little while but I just ran into a small snag on it.

      When a system is using Storage Spaces to pool drives, the drives do not appear in PS> Get-Disk, and this messes up the disk numbers. In wie_global_functions.ps1 : Get-Hard-Drives() we get an array of the valid disks

      $script:HardDrives=$(get-disk | where-object {$_.NumberOfPartitions -gt 0 -and $_.BusType -ne "USB"} | Sort-Object Number)
      

      In wie_deploy.ps1 : Process-Hard-Drives() we foreach through that array with an external index to get the schema

      $currentHdNumber = -1
      foreach ($hardDrive in $script:HardDrives) {
              log " ** Processing Hard Drive $($hardDrive.Number)" -display -timeStamp
              $currentHdNumber++
      [...]
      $script:hdSchema = $(curl.exe $script:curlOptions -H Authorization:$script:userTokenEncoded --data "profileId=$profile_id&clientHdNumber=$currentHdNumber&newHdSize=$($hardDrive.Size)&schemaHds=$script:imaged_schema_drives&clientLbs=$($hardDrive.LogicalSectorSize)" ${script:web}CheckHdRequirements --connect-timeout 10 --stderr -)
      

      So now we have 3 numbers, $script:hardDrive.Number, $currentHdNumber, and $script:hdSchema.SchemaHdNumber. Under normal circumstances these are all the same number, but in Storage Spaces, and who knows maybe other RAID setups, hardDrive.Number is the system's index for that disk, while currentHdNumber and SchemaHdNumber are the position of the disk in an unordered array.

      That's all good and fine, great actually, because this disjoint allows the wie to ignore this problem.

      currentHdNumber is used to request the schema so it will always request 0 first, and on most systems there's only one drive. Any time we want to get something from the server, we want this number.

      hardDrive.Number then reflects any modification to the disk order. As long as we use hardDrive.Number to direct disk operations it'll work out.

      In wie_deploy.ps1 : Download-Image(), the line used to stream the .wim onto the partition is

      $udpProc=$(Start-Process cmd "/c curl.exe $script:curlOptions -H Authorization:$script:userTokenEncoded --data ""profileId=$profile_id&hdNumber=$($hardDrive.Number)&fileName=part$wimSource.winpe.wim"" ${script:web}GetImagingFile | wimapply - 1 C: 2>>$clientLog > x:\wim.progress" -NoNewWindow -PassThru)
      

      Which uses hardDrive.Number to ask the server to send the image over. The server doesn't know about disk 3, so the request errors out. Changing this to currentHdNumber or SchemaHdNumber fixes it, and now the wie is able to deploy images to storage spaces

      There is actually a secret 4th number, $script:imageHdToUse, which is just SchemaHdNumber

      posted in Feature Requests / Feedback
      T
      Tyler
    • fShowMenu can only display 59 items

      All of the select an item menus in the WIE use a function fShowMenu(), I haven't properly chased this down yet, it's not in the scripts that get downloaded, but from google I think it's this

      https://www.powershellgallery.com/packages/PowerShellFrame/0.0.0.20/Content/Public\Show-NavigationableMenu.ps1

      I also haven't worked through to fully comprehend this code, but I can describe what I'm experiencing.

      I had 59 profiles on an image, everything worked.
      Added one more, now I get a fatal error "Menu too big!" when I go to select a profile on that image.
      Remove one, everything works again.

      With this limitation, nothing that gets displayed via an fShowMenu can have more than 59 items, this is primarily Images and Profiles-on-One-Image. Presumably this issue does not surface unless the menus are displayed, so Model Match bypasses it.

      posted in Feature Requests / Feedback
      T
      Tyler
    • Hardware Targeting File Copy Modules

      It would be very nice if I could set up File Copy Modules with drivers for specific devices, and during deploy, if that hardware is present, the module gets applied.

      I'm dealing with an issue right now where a certain Intel wifi module has a known issue in the latest published drivers where it won't report any wifi network from WAPs that offer 802.11ax, even though they can negotiate down. The solution is a released-but-not-published driver package. The issue is OEMs haven't always used a consistent module in a given model. I'm currently including it in driver packages for models that can have this module, but I'm not certain that's harmless, and it's a manual identification process.

      I would much rather configure a module to identify this device separately and get the drivers as needed. This would also simplify dealing with a lot of minor variation within models, such as the presence of fingerprint, smartcard, and NFC readers, different graphics packages, WWAN/GPS modules, which are often the same hardware appearing on a range of models within a generation or generic parts sourced by the whole industry.

      posted in Feature Requests / Feedback
      T
      Tyler
    • RE: File copy driver for WIE upload location

      As far as I know, File Copy Modules do not act on the WIE. They describe files that the WIE should add to a computer when imaging it. If "Is Driver" is enabled, it will then use DISM to install the files on the newly imaged computer.

      If you want the WIE to add drivers to a computer as part of imaging it, you configure that at Images -> {specific image} -> Image Profiles -> {specific profile} -> File Copy

      posted in Support
      T
      Tyler
    • RE: File copy driver for WIE upload location

      I don't know how to do the specific thing you're trying, but you may be able to solve the overall problem by adding the drivers to the WIE .wim image after creating it, using DISM

      https://learn.microsoft.com/en-us/windows-hardware/manufacture/desktop/add-and-remove-drivers-to-an-offline-windows-image?view=windows-11

      This page lays out the whole process but pay special attention to the caution text on /recurse, a bloated image will take longer to boot in all cases, but if you are using PXE then that penalty will be higher, and some older machines can only download PXE files at 10/100, making it even worse.

      posted in Support
      T
      Tyler
    • RE: Microsoft Storage Spaces

      I've put together how to create the pools, this needs a lot of work but the basics are there

      $matchedDiskSets = Get-PhysicalDisk | Group-Object 'FriendlyName' | Where-Object {$_.Count -gt 1}
      # assuming matched disks should always be pooled, this should be a configuration recieved from the server
      if ($matchedDiskSets -gt 0) {
      
      
          <# assuming all existing pools are bad
             should try to identify good pools
             to associate disks with pools:
             $pools = Get-StoragePool -isPrimordial $false -ErrorAction SilentlyContinue
             $disksInPool = $pools | foreach { get-physicalDisks -StoragePool $_ }
          #>
          
          Get-StoragePool -isPrimordial $false -ErrorAction SilentlyContinue | Remove-StoragePool
          # ignoring secondary pools for now
          $matchedDiskSets[0].Group | ForEach-Object {
              Clear-Disk `
                  -UniqueID $_.UniqueID `
                  -RemoveOEM `
                  -RemoveData `
                  -Confirm:$false `
                  -ErrorAction SilentlyContinue
              }
          $matchedDiskSets[0].Group | Reset-PhysicalDisk
      
          # create new pool and virtualdisk, I picked WindowsPool and WindowsDisk arbitrarily
          New-StoragePool `
              -FriendlyName "WindowsPool" `
              -StorageSubsystemFriendlyName "Windows Storage*" `
              -PhysicalDisks $matchedDiskSets[0].Group `
              -ResiliencySetting Simple `
              | New-VirtualDisk -FriendlyName "WindowsDisk" -UseMaximum
      
      }
      

      The critical problem resulting from this is that the virtual disk is not going to be disk 1. It seems to vary, this is from a log from a previous image attempt with a manually created pool.

          ** Starting Image Download For Hard Drive 3 Partition 3
          
          [ERROR] Error reading 208 bytes from fd 0 (err=109): The pipe has been ended
          
          [ERROR] "[fd 0]": Error reading header: Broken pipe
          ERROR: Exiting with error code 50:
          Could not read data from a file.
      

      The unit I'm working with presently made the virtual disk be disk 2 to start, and then disk 3 after a reboot.

      PS X:\Windows\System32> get-physicaldisk
      
      Number FriendlyName
      ------ ------------
      1      Skhynix BC501 NVMe 512GB
      0      Skhynix BC501 NVMe 512GB
      
      PS X:\Windows\System32> get-disk
      
      Number    Friendly Name
      --------- ----------------
      2         WindowsDisk
      
      

      and in wie_deploy.ps1 it's assumed that machine-side disks will relate 1-to-1 with disks in the image

      line 326

      $udpProc=$(Start-Process cmd "/c curl.exe $script:curlOptions -H Authorization:$script:userTokenEncoded --data ""profileId=$profile_id&hdNumber=$($hardDrive.Number)&fileName=part$wimSource.winpe.wim"" ${script:web}GetImagingFile | wimapply - 1 C: 2>>$clientLog > x:\wim.progress" -NoNewWindow -PassThru)

      Which makes sense until pools are involved and there are gaps in the index of logical disks. This is the next thing I'm going to run down, not sure how I'm going to map the two indexes.

      edit: the windows 10 installer can't see this disk so I'm probably missing a little detail somewhere.

      posted in Feature Requests / Feedback
      T
      Tyler
    • Microsoft Storage Spaces

      Microsoft has this thing called Storage Spaces, I don't know the history but it's something akin to RAID, but also like Intel RST. As a result of the later, on Microsoft systems apparently sometimes the factory configuration uses Storage Spaces.

      So I have a Surface Laptop 2 on my desk, I imaged it like I image everything and it came up with a 512GB SSD; but also a second blank 512GB SSD. Looking at images of the motherboard what's happening here is the 1TB configuration uses two all-in-one SSD chips, each 512GB, each literally a distinct SSD, and they're supposed to be pooled under a single Storage Space to appear as one.

      It's possible to configure these Spaces in powershell but I can't imagine there's any reasonable way to detect that this should be done, so configuration regarding pools would need to be added to the image profile and I'm unclear if the image needs to be built for Spaces or if windows will adapt. This may also require considering the physical disks differently while partitioning and formatting the drives.

      I'm going to be looking into patching this into the core scripts soon

      posted in Feature Requests / Feedback
      T
      Tyler
    • RE: Having multiple servers

      @theopenem_admin Just spent a while finding my own mistakes, so now I do have the new server listed correctly on the dashboard and the dashboard loads promptly. I have cleared up a lot of errors, but I'm still getting this one when the dashboard is loaded

      FrontEnd.log

      2024-03-06 11:53:16,772 [9] ERROR Toems_ApiCalls.ApiRequest Response Data Was Null For Resource: FileSystem/GetSMBFreeSpace/
      

      I suspect something is still configured to think about SMB?
      Maybe I'll find it as I regenerate WIE.

      ClientAPI.log and Application.log are no longer accruing errors.


      This is already solved but for future problem havers, I was getting:

      2024-03-06 10:29:21,042 [44] ERROR Toems_ApiCalls.ApiRequest Could Not Complete API Request. The Response Produced An Error.Storage/GetFreeSpace
      2024-03-06 10:29:21,074 [44] ERROR Toems_ApiCalls.ApiRequest

      {
      	"Message":"An error has occurred.",
      	"ExceptionMessage":"One or more errors occurred.",
      	"ExceptionType":"System.AggregateException",
      	"StackTrace":"
      		at System.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification)
      		at Toems_ClientApi.Controllers.Authorization.InterComAuth.AuthenticateAsync(HttpAuthenticationContext context, CancellationToken cancellationToken)
      		at System.Web.Http.Controllers.AuthenticationFilterResult.<ExecuteAsync>d__5.MoveNext()
      		--- End of stack trace from previous location where exception was thrown ---
      		at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
      		at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
      		at System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__15.MoveNext()",
      	"InnerException":
      	{
      		"Message":"An error has occurred.",
      		"ExceptionMessage":"An error occurred accessing the database. This usually means that the connection to the database failed. Check that the connection string is correct and that the appropriate DbContext constructor is being used to specify it or find it in the application's config file. See http://go.microsoft.com/fwlink/?LinkId=386386 for information on DbContext and connections. See the inner exception for details of the failure.",
      	"ExceptionType":"System.Data.Entity.Core.ProviderIncompatibleException",
      	"StackTrace":"
      		at System.Data.Entity.Utilities.DbProviderServicesExtensions.GetProviderManifestTokenChecked(DbProviderServices providerServices, DbConnection connection)
      		at System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory)
      		at System.Data.Entity.Utilities.DbConnectionExtensions.GetProviderInfo(DbConnection connection, DbProviderManifest& providerManifest)
      		at System.Data.Entity.DbModelBuilder.Build(DbConnection providerConnection)
      		at System.Data.Entity.Internal.LazyInternalContext.CreateModel(LazyInternalContext internalContext)
      		at System.Data.Entity.Internal.RetryLazy`2.GetValue(TInput input)
      		at System.Data.Entity.Internal.LazyInternalContext.InitializeContext()
      		at System.Data.Entity.Internal.InternalContext.Initialize()
      		at System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType)
      		at System.Data.Entity.Internal.Linq.InternalSet`1.Initialize()
      		at System.Data.Entity.Internal.Linq.InternalSet`1.get_InternalContext()
      		at System.Data.Entity.Infrastructure.DbQuery`1.System.Linq.IQueryable.get_Provider()
      		at System.Linq.Queryable.Where[TSource](IQueryable`1 source, Expression`1 predicate)
      		at Toems_DataModel.GenericRepository`1.GetFirstOrDefault(Expression`1 filter, Func`2 orderBy)
      		at Toems_Service.Entity.ServiceSetting.GetSetting(String settingName)
      		at Toems_Service.Entity.ServiceSetting.GetSettingValue(String settingName)
      		at Toems_ClientApi.Controllers.Authorization.InterComAuth.<isValidRequest>d__9.MoveNext()",
      	"InnerException":
      	{
      		"Message":"An error has occurred.",
      		"ExceptionMessage":"The provider did not return a ProviderManifestToken string.",
      		"ExceptionType":"System.Data.Entity.Core.ProviderIncompatibleException",
      		"StackTrace":"
      			at System.Data.Entity.Core.Common.DbProviderServices.GetProviderManifestToken(DbConnection connection)
      			at System.Data.Entity.Utilities.DbProviderServicesExtensions.GetProviderManifestTokenChecked(DbProviderServices providerServices, DbConnection connection)",
      		"InnerException":
      		{
      			"Message":"An error has occurred.",
      			"ExceptionMessage":"Unable to connect to any of the specified MySQL hosts.",
      			"ExceptionType":"MySql.Data.MySqlClient.MySqlException",
      			"StackTrace":"
      				at MySql.Data.MySqlClient.NativeDriver.Open()
      				at MySql.Data.MySqlClient.Driver.Open()
      				at MySql.Data.MySqlClient.Driver.Create(MySqlConnectionStringBuilder settings)
      				at MySql.Data.MySqlClient.MySqlPool.CreateNewPooledConnection()
      				at MySql.Data.MySqlClient.MySqlPool.GetPooledConnection()
      				at MySql.Data.MySqlClient.MySqlPool.TryToGetDriver()
      				at MySql.Data.MySqlClient.MySqlPool.GetConnection()
      				at MySql.Data.MySqlClient.MySqlConnection.Open()
      				at MySql.Data.MySqlClient.MySqlProviderServices.GetDbProviderManifestToken(DbConnection connection)
      				at System.Data.Entity.Core.Common.DbProviderServices.GetProviderManifestToken(DbConnection connection)",
      			"InnerException":
      				{
      				"Message":"An error has occurred.",
      				"ExceptionMessage":"No such host is known",
      				"ExceptionType":"System.Net.Sockets.SocketException",
      				"StackTrace":"
      					at System.Net.Dns.GetAddrInfo(String name)
      					at System.Net.Dns.InternalGetHostByName(String hostName, Boolean includeIPv6)
      					at System.Net.Dns.GetHostEntry(String hostNameOrAddress)
      					at MySql.Data.Common.MyNetworkStream.CreateStream(MySqlConnectionStringBuilder settings, Boolean unix)
      					at MySql.Data.Common.StreamCreator.GetStream(MySqlConnectionStringBuilder settings)
      					at MySql.Data.MySqlClient.NativeDriver.Open()"
      				}
      			}
      		}
      	}
      }
      2024-03-06 10:29:21,074 [44] ERROR Toems_Service.Workflows.ComServerFreeSpace Com server returned null for status. Check your com server URL!
      

      The problem was that in toec-api\web.config I had pasted incorrectly and had connectionString="server=server=localhost; [...], this kind of error is hard for my eyes to pick up on.

      There was also an interim error where an entire html page was dumped in the logs saying the com server's credentials were not authorized to connect from that host, I'll need to go in HeidiSQL and add a GRANT when the next server is coming up.

      Tangent on that, for MariaDB, do you recommend sticking with the root account for all servers, or setting different credentials for each server?

      posted in Support
      T
      Tyler
    • RE: Having multiple servers

      I matched the permissions on C:\toems_local_storage, no change, is there somewhere in IIS I have to configure permissions as well?

      posted in Support
      T
      Tyler
    • RE: Having multiple servers

      Alright so,

      Since storage location is configured globally I'm taking the old server down until I retrofit it to an iSCSI target (and install the recent update)

      I have:

      • copied the database over as discussed
      • Configured the Theopenem sites on the new server
      • Set Storage Type Local, Storage Path D:\
      • Disabled the sites in the old server's IIS
      • Configured the Com Server entry
      • Added it to the default cluster
      • Removed the old server from the default cluster

      When I go to the Dashboard, it takes 20+ seconds to load, and the whole site locks up

      When the dashboard loads, there's nothing listed there.

      This feels like something is wrong, but I don't actually know that

      posted in Support
      T
      Tyler
    • RE: Having multiple servers

      What is the format for Storage Path with local storage? I don't have the default value anymore

      I have the iSCSI target mounted as D:\ and this target is just for Theopenem

      posted in Support
      T
      Tyler
    • RE: Having multiple servers

      Is there a code sheet for verifydb?

      It's giving me "5"

      posted in Support
      T
      Tyler
    • RE: Having multiple servers

      The industry I work in will always need imaging, I don't really use the management part, you may be right about that. Theopenem is the only solution I have found that is actually good at imaging in large quantities, everything else is single user solutions maybe with a hack that lets them scale a tiny bit.

      posted in Support
      T
      Tyler
    • RE: Having multiple servers

      Thanks for pointing out this video, it's not listed and I forgot to check the channel directly.

      I suspect being attached to IIS is a contributing factor in Theopenem's popularity. Running Windows Server costs a lot of money and is not the most efficient utilization of server resources, while running a critical service on a user facing edition of Windows 10+ subjects you to mandatory periodic updates. As far as I can tell containers are the direction everything is headed in and platform agnostic containers open up the potential for cloud hosting, though I don't know exactly how far of a reach that is.

      This is getting into feedback, but I really do think that opening up the platform and hosting options could alter the nature of Theopenem's popularity. I'm going to go take notes on that video now, thanks again.

      posted in Support
      T
      Tyler
    • Having multiple servers

      I have a single machine hosting Toec API, Toems API, Toems WebUI, and MariaDB, I would like to add a new sever, later on remove the first server, and still later add a second server which uses a different fileserver. I've been thinking about this for a while and I'm not making headway on figuring out what of this is possible, what needs to be done, and what order to do it in.

      My current understanding

      1. There needs to be a single database(?)

      My current uncertainties

      1. Does every Toems API node need it's own Toec API node?
      2. Does every Toems API node need it's own WebUI node?
      3. Is it possible to have more than one storage location?
        • I'm currently using SMB but I will be able to instead use "local" storage via iSCSI targets
      4. Does anything in the config.web files need to be duplicated to link with the additional nodes?
      5. Is Theopenem able to run on ASP.NET Core?
        6.a. If it can, has anybody tried to containerize the nodes?
        6.b. If it can, has anybody tried to run Theopenem on Linux?
        • I have Theopenem running on a windows 10 desktop currently, I'm moving it to a windows server VM on a linux based server, but I'd much rather move it to kubernetes and not have a full GUI VM at all.
      6. What is the intended use of having multiple clusters?
      7. Is there a load balancing feature already?

      Issues I've run into so far

      When I copy the production database to the new installation, it is larger (original: 49.8MiB, copy: 53.9MiB, the difference appears to be primarily in computer_logs, audit_logs, state, job, and jobparameter. Is this normal?

      posted in Support
      T
      Tyler
    • Login screen password field misbehaves with password managers

      I've been experiencing this from the beginning but now I'm migrating to the new release. When I have my password manager autofill, it enters a password, and then that gets cleared.

      On chrome, using the old built in password manager or the new Google Password Manager, the offer to fill the password would not initially appeared, I had to put the cursor focus into a text field, then remove it, and re-enter the username field. Then after filling, I had to focus the password field, then remove focus, then the field would be filled. This being workable made me deprioritize this post

      I switched to Bitwarden. Now it does offer to fill, but nothing I do will restore the filled password. Instead I copy & paste the password. While the password field is in this bounced state, the login attempt will fail.

      In the Inspect menu, changing type="text" to type="password" corrects the behavior; but Theopenem uses ASP to generate HTML and I have not found a means to enact this change

      <input name="WebLogin$Password" type="password" id="Password" class="password watermark" maxlength="8">
      

      In C:\Program Files\Theopenem\Toems-UI\default.aspx, commenting out line 53 seems to correct the behavior as well.

      <script type="text/javascript">
          $(document).ready(function () {
              $('.uname').watermark('Username', { useNative: false });
              $('.uname').focus();
              //$('.password').watermark('Password', { useNative: false });
              $('.textbox').watermark('Verification Code', { useNative: false });
          });
      </script>
      

      I do not experience this problem on the User Creation screen, but those textboxs aren't css password fields, and I don't know where the javascript would be.

      default.aspx:

      <asp:TextBox ID="Password" runat="server" TextMode="Password" CssClass="password" ClientIDMode="Static"></asp:TextBox>
      

      create.aspx:

      <asp:TextBox ID="txtUserPwd" runat="server" TextMode="Password" CssClass="textbox"></asp:TextBox>
      

      I am not a web developer, I may have come to misguided conclusions.

      posted in Feature Requests / Feedback
      T
      Tyler
    • RE: Risky action blocked

      @gunnie I'm getting this from most software on windows 11 now, including other parts of windows. Yesterday I got one of these because Remote Desktop Connection tried to save the .rdp file to my documents folder.

      There's an unintuitive way to interact with the UI in your screenshot that lets you authorize it, I don't remember it at the moment, something there is a button

      posted in Support
      T
      Tyler
    • RE: Support for diacritics in scripts

      @eruthon You want to avoid passing Výučbový softvér through Theopenem at all; either have it hardcoded in the script file, or have the script get it from somewhere else like an SMB server.

      posted in Support
      T
      Tyler
    • RE: Support for diacritics in scripts

      @eruthon I haven't fully fleshed out this idea but you may be able to patch the issue in the short term by casting the string around until it's right. The specifics depend on what exactly is happening, From the info so far it sounds like the data is utf8 but something is assuming it's ANSI

      The syntax in powershell for this should be

      $temp = [System.Text.Encoding]::ANSI.GetBytes("text")
      $out = [System.Text.Encoding]::UTF8.GetString($temp)
      

      This will assume the binary data of "text" is encoded as ANSI, put that binary in a generic form, and then produce a UTF8 string using those bytes. You could of course collapse this into a single line, I expanded it for readability.

      It may actually be correct to do UTF8.GetBytes(), I don't have the text on hand to test. You should be able to test the method by copying the characters you see in Notepad++

      posted in Support
      T
      Tyler