dzikoysk / reposilite

Lightweight and easy-to-use repository management software dedicated for the Maven-based artifacts in the JVM ecosystem 📦
https://reposilite.com
Apache License 2.0
1.37k stars 181 forks source link

Maven deploy upload failure on FreeBSD within Jail #1548

Closed HC-224 closed 2 years ago

HC-224 commented 2 years ago

What happened?

I have a basic setup made by following the guides for setting up a management user and maven deploy, when running mvn deploy an exception is thrown in Reposilite for each file. Maven will report a successful deployment although Reposilite will have no files added, viewing the web front end shows nothing has been uploaded.

I am running v3.0.3 inside of a FreeBSD (TrueNAS CORE) Jail, something I noticed in the stack is that the exception thrown references a missing mount point in fstab, however Jails do not appear to have an fstab at all. I presume that may be the reason for the issue.

I concatenated the stack after the first two exceptions, they all appear to be more or less the same.

Unfortunately I wasn't able to build Reposilite myself to test some changes. Not that I know for certain where the issue is though.

Reposilite version

3.x

Relevant log output

/* Output from console before web portal records logs */

18:33:18.257 INFO | 
18:33:18.296 INFO | Reposilite 3.0.3
18:33:18.297 INFO | 
18:33:18.297 INFO | --- Environment
18:33:18.339 INFO | Platform: 11.0.15 (FreeBSD :: amd64)
18:33:18.345 INFO | Running as: root
18:33:18.347 INFO | Working directory: /usr/local/opt/reposilite
18:33:18.349 INFO | Plugin directory: /usr/local/opt/reposilite/plugins
18:33:18.350 INFO | Configuration: /usr/local/opt/reposilite/configuration.cdn
18:33:18.352 INFO | Threads: 32 WEB / 16 IO / 2 DB
18:33:18.685 INFO | HikariPool-1 - Added connection org.sqlite.jdbc4.JDBC4Connection@772485dd
18:33:18.728 INFO | 
18:33:18.729 INFO | --- Loading plugins:
18:33:18.932 INFO | failure, configuration, local-configuration, shared-configuration, access-token
18:33:18.932 INFO | authentication, console, statistics, frontend, storage
18:33:18.932 INFO | maven, status, web
18:33:19.046 INFO | 
18:33:19.046 INFO | --- Local configuration
18:33:19.047 INFO | Loading local configuration from local file
18:33:19.107 INFO | Local configuration has been loaded from local file
18:33:19.782 INFO | 

/* Output from web console with debug */

18:18:13.437 DEBUG | ignoring overridden com.reposilite.storage.s3.S3StorageProviderSettings.getEndpoint

18:18:13.437 DEBUG | ignoring overridden com.reposilite.storage.s3.S3StorageProviderSettings.getBucketName

18:18:13.438 DEBUG | ignoring overridden com.reposilite.storage.s3.S3StorageProviderSettings.getAccessKey

18:18:13.442 DEBUG | applying configured custom definition for com.reposilite.storage.StorageProviderSettings

18:18:13.443 DEBUG | generating array definition for java.util.List<com.reposilite.maven.application.ProxiedRepository>

18:18:13.447 DEBUG | generating definition for com.reposilite.maven.application.ProxiedRepository

18:18:13.448 DEBUG | collecting non-static fields and methods from com.reposilite.maven.application.ProxiedRepository

18:18:13.454 DEBUG | ignoring overridden com.reposilite.maven.application.ProxiedRepository.getConnectTimeout

18:18:13.454 DEBUG | ignoring overridden com.reposilite.maven.application.ProxiedRepository.getReadTimeout

18:18:13.455 DEBUG | ignoring overridden com.reposilite.maven.application.ProxiedRepository.getReference

18:18:13.455 DEBUG | ignoring overridden com.reposilite.maven.application.ProxiedRepository.getAuthorization

18:18:13.456 DEBUG | ignoring overridden com.reposilite.maven.application.ProxiedRepository.getAllowedGroups

18:18:13.456 DEBUG | ignoring overridden com.reposilite.maven.application.ProxiedRepository.getHttpProxy

18:18:13.457 DEBUG | ignoring overridden com.reposilite.maven.application.ProxiedRepository.getStore

18:18:13.487 DEBUG | generating array definition for java.util.List<java.lang.String>

18:18:13.489 DEBUG | generating definition for com.reposilite.maven.application.ProxiedCredentials

18:18:13.490 DEBUG | collecting non-static fields and methods from com.reposilite.maven.application.ProxiedCredentials

18:18:13.490 DEBUG | ignoring overridden com.reposilite.maven.application.ProxiedCredentials.getPassword

18:18:13.491 DEBUG | ignoring overridden com.reposilite.maven.application.ProxiedCredentials.getLogin

18:18:13.506 DEBUG | generating definition for com.reposilite.statistics.application.StatisticsSettings

18:18:13.506 DEBUG | collecting non-static fields and methods from com.reposilite.statistics.application.StatisticsSettings

18:18:13.507 DEBUG | ignoring overridden com.reposilite.statistics.application.StatisticsSettings.getResolvedRequestsInterval

18:18:13.511 DEBUG | applying configured custom definition for com.reposilite.statistics.api.ResolvedRequestsInterval

18:18:13.513 DEBUG | generating definition for com.reposilite.web.application.WebSettings

18:18:13.513 DEBUG | collecting non-static fields and methods from com.reposilite.web.application.WebSettings

18:18:13.516 DEBUG | ignoring overridden com.reposilite.web.application.WebSettings.getForwardedIp

18:18:13.527 INFO | 

18:18:13.527 INFO | --- Shared settings

18:18:13.528 INFO | Loading shared configuration from remote database

18:18:13.571 DEBUG | HikariPool-1 - Reset (autoCommit) on connection org.sqlite.jdbc4.JDBC4Connection@772485dd

18:18:13.573 DEBUG | HikariPool-1 - Reset (autoCommit) on connection org.sqlite.jdbc4.JDBC4Connection@772485dd

18:18:13.960 INFO | Domains 'authentication', 'frontend', 'maven', 'statistics', 'web' have been loaded from remote database

18:18:13.963 DEBUG | Schema for authentication:

18:18:13.964 DEBUG | {   "$schema" : "http://json-schema.org/draft-07/schema#",   "type" : "object",   "properties" : {     "ldap" : {       "type" : "object",       "properties" : {         "enabled" : {           "type" : "boolean",           "title" : "Enabled",           "description" : "LDAP Authenticator is enabled"         },         "hostname" : {           "type" : "string",           "title" : "Hostname",           "description" : "LDAP server address"         },         "port" : {           "type" : "integer",           "format" : "int32",           "title" : "Port",           "description" : "LDAP server port"         },         "baseDn" : {           "type" : "string",           "title" : "Base DN",           "description" : "Base DN with users"         },         "searchUserDn" : {           "type" : "string",           "title" : "Search-User DN",           "description" : "User used to perform searches in LDAP server (requires permissions to read all LDAP entries)"         },         "searchUserPassword" : {           "type" : "string",           "title" : "Search-User Password",           "description" : "Search user's password"         },         "userAttribute" : {           "type" : "string",           "title" : "User Attribute",           "description" : "Attribute in LDAP that represents unique username used to create access token"         },         "userFilter" : {           "type" : "string",           "title" : "User Filter",           "description" : "LDAP user filter"         },         "userType" : {           "type" : "string",           "enum" : [ "PERSISTENT", "TEMPORARY" ],           "title" : "User Type",           "description" : "Should the created through LDAP access token be TEMPORARY or PERSISTENT"         }       },       "title" : "LDAP",       "description" : "LDAP Authenticator settings",       "additionalProperties" : false     }   },   "title" : "Authentication",   "description" : "Authenticator settings",   "additionalProperties" : false }

18:18:13.965 DEBUG | Schema for frontend:

18:18:13.966 DEBUG | {   "$schema" : "http://json-schema.org/draft-07/schema#",   "type" : "object",   "properties" : {     "id" : {       "type" : "string",       "title" : "Id",       "description" : "Repository id used in Maven repository configuration"     },     "title" : {       "type" : "string",       "title" : "Title",       "description" : "The title displayed on the frontend homepage."     },     "description" : {       "type" : "string",       "title" : "Description",       "description" : "The description displayed on the frontend homepage."     },     "organizationWebsite" : {       "type" : "string",       "title" : "Organisation Website",       "description" : "Link to organization's website."     },     "organizationLogo" : {       "type" : "string",       "title" : "Organisation Logo",       "description" : "Link to organization's logo."     },     "icpLicense" : {       "type" : "string",       "title" : "ICP License",       "description" : "Web services in China require ICP license, a permit issued by the Chinese government to permit China-based websites to operate in China.\nIn order to fulfill the conditions, you should apply for ICP license from your service provider and fill in this parameter."     }   },   "title" : "Frontend",   "description" : "Frontend settings",   "additionalProperties" : false }

18:18:13.966 DEBUG | Schema for maven:

18:18:13.968 DEBUG | {   "$schema" : "http://json-schema.org/draft-07/schema#",   "type" : "object",   "properties" : {     "repositories" : {       "title" : "Repositories",       "description" : "List of Maven repositories.",       "type" : "array",       "items" : {         "type" : "object",         "properties" : {           "id" : {             "type" : "string",             "title" : "Id",             "description" : "The id of this repository."           },           "visibility" : {             "type" : "string",             "enum" : [ "PUBLIC", "HIDDEN", "PRIVATE" ],             "title" : "Visibility",             "description" : "The visibility of this repository."           },           "redeployment" : {             "type" : "boolean",             "title" : "Redeployment",             "description" : "Does this repository accept redeployment of the same artifact version."           },           "preserveSnapshots" : {             "type" : "boolean",             "title" : "Preserved snapshots",             "description" : "By default Reposilite deletes all deprecated build files. If you'd like to preserve them, set this property to true."           },           "storageProvider" : {             "oneOf" : [ {               "type" : "object",               "properties" : {                 "type" : {                   "type" : "string",                   "const" : "fs"                 },                 "quota" : {                   "type" : "string",                   "title" : "Quota",                   "description" : "Control the maximum amount of data stored in this repository. Supported formats: 90%, 500MB, 10GB (optional, by default: unlimited)"                 },                 "mount" : {                   "type" : "string",                   "title" : "Mount",                   "description" : "Use custom directory to locate the repository data (optional, by default it's './repositories/{name}')"                 }               },               "title" : "File system Storage Provider",               "description" : "Local file system (disk) storage provider settings",               "additionalProperties" : false             }, {               "type" : "object",               "properties" : {                 "type" : {                   "type" : "string",                   "const" : "s3"                 },                 "bucketName" : {                   "type" : "string",                   "title" : "Bucket",                   "description" : "The selected AWS bucket"                 },                 "endpoint" : {                   "type" : "string",                   "title" : "Endpoint",                   "description" : "Overwrite the AWS endpoint (optional)"                 },                 "accessKey" : {                   "type" : "string",                   "title" : "Access Key",                   "description" : "Overwrite AWS access-key used to authenticate (optional)"                 },                 "secretKey" : {                   "type" : "string",                   "title" : "Secret Key",                   "description" : "Overwrite AWS secret-key used to authenticate (optional)"                 },                 "region" : {                   "type" : "string",                   "title" : "Region",                   "description" : "Overwrite AWS region (optional)"                 }               },               "title" : "S3 Storage Provider",               "description" : "Amazon S3 storage provider settings",               "additionalProperties" : false             } ]           },           "proxied" : {             "title" : "Mirrored repositories",             "description" : "List of mirrored repositories associated with this repository.",             "type" : "array",             "items" : {               "type" : "object",               "properties" : {                 "reference" : {                   "type" : "string",                   "title" : "Link",                   "description" : "Either the id of other local repository or the URL of a remote repository."                 },                 "store" : {                   "type" : "boolean",                   "title" : "Store",                   "description" : "Reposilite can store proxied artifacts locally to reduce response time and improve stability."                 },                 "allowedGroups" : {                   "title" : "Allowed Groups",                   "description" : "Allowed artifact groups. If none are given, all artifacts can be obtained from this proxy.",                   "type" : "array",                   "items" : {                     "type" : "string",                     "title" : "Allowed Groups",                     "description" : "Allowed artifact groups. If none are given, all artifacts can be obtained from this proxy."                   }                 },                 "connectTimeout" : {                   "type" : "integer",                   "format" : "int32",                   "title" : "Connect Timeout",                   "description" : "How long Reposilite can wait for establishing the connection with a remote host."                 },                 "readTimeout" : {                   "type" : "integer",                   "format" : "int32",                   "title" : "Read Timeout",                   "description" : "How long Reposilite can read data from remote proxy."                 },                 "authorization" : {                   "type" : [ "object", "null" ],                   "properties" : {                     "login" : {                       "type" : "string",                       "title" : "Login",                       "description" : "Login to use by proxied HTTP client"                     },                     "password" : {                       "type" : "string",                       "title" : "Password",                       "description" : "Raw password used by proxied HTTP client to connect to the given repository"                     }                   },                   "title" : "Proxied credentials",                   "description" : "The authorization credentials used to access proxied repository.",                   "additionalProperties" : false                 },                 "httpProxy" : {                   "type" : "string",                   "title" : "HTTP Proxy",                   "description" : "Custom proxy configuration for HTTP/SOCKS client used by Reposilite. Examples: <br/>\nHTTP 127.0.0.1:1081 <br/>\nSOCKS 127.0.0.1:1080 login password "                 }               },               "title" : "Mirrored Maven Repository",               "description" : "Configuration of proxied host",               "additionalProperties" : false             }           }         },         "title" : "Maven Repository",         "description" : "Settings for a given repository.",         "additionalProperties" : false       }     }   },   "title" : "Maven",   "description" : "Repositories settings",   "additionalProperties" : false }

18:18:13.969 DEBUG | Schema for statistics:

18:18:13.969 DEBUG | {   "$schema" : "http://json-schema.org/draft-07/schema#",   "type" : "object",   "properties" : {     "resolvedRequestsInterval" : {       "type" : "string",       "enum" : [ "DAILY", "WEEKLY", "MONTHLY", "YEARLY" ],       "title" : "Resolved Requests Interval",       "description" : "How often Reposilite should divide recorded requests into separated groups.\nWith higher precision you can get more detailed timestamps, but it'll increase database size.\nIt's not that important for small repos with low traffic, but public instances should not use daily interval."     }   },   "title" : "Statistics",   "description" : "Statistics module configuration.",   "additionalProperties" : false }

18:18:13.969 DEBUG | Schema for web:

18:18:13.970 DEBUG | {   "$schema" : "http://json-schema.org/draft-07/schema#",   "type" : "object",   "properties" : {     "forwardedIp" : {       "type" : "string",       "title" : "Forwarded IP",       "description" : "Any kind of proxy services change real ip.\nThe origin ip should be available in one of the headers. <br />\nNginx: X-Forwarded-For <br />\nCloudflare: CF-Connecting-IP <br />\nPopular: X-Real-IP"     }   },   "title" : "Web",   "description" : "General web settings",   "additionalProperties" : false }

18:18:14.035 DEBUG | HikariPool-1 - Reset (autoCommit) on connection org.sqlite.jdbc4.JDBC4Connection@772485dd

18:18:14.101 DEBUG | HikariPool-1 - Reset (autoCommit) on connection org.sqlite.jdbc4.JDBC4Connection@772485dd

18:18:14.205 INFO | 

18:18:14.205 INFO | --- Repositories

18:18:14.211 INFO | + releases (public)

18:18:14.211 INFO | + snapshots (public)

18:18:14.212 INFO | + private (private)

18:18:14.214 INFO | 3 repositories have been found

18:18:14.220 DEBUG | HikariPool-1 - Reset (autoCommit) on connection org.sqlite.jdbc4.JDBC4Connection@772485dd

18:18:14.270 INFO | 

18:18:14.274 INFO | Binding server at 0.0.0.0::8080

18:18:14.393 DEBUG | CacheBypassHandler has been registered

18:18:14.641 INFO | Starting Javalin ...

18:18:14.715 INFO | jetty-11.0.11; built: 2022-06-21T21:42:55.454Z; git: 58487315cb75e0f5c81cc6fa50096cbeb3b9554e; jvm 11.0.15+10-1

18:18:14.805 INFO | Session workerName=node0

18:18:14.824 INFO | Started i.j.j.@4ae2e781{/,null,AVAILABLE}

18:18:14.842 INFO | Started ServerConnector@46320c9a{HTTP/1.1, (http/1.1)}{0.0.0.0:8080}

18:18:14.852 INFO | Started Server@7135ce0a{STARTING}[11.0.11,sto=0] @3510ms

18:18:14.870 INFO | Listening on http://0.0.0.0:8080/

18:18:14.906 INFO | You are running Javalin 5.0.0-SNAPSHOT (released September 8, 2022).

18:18:14.914 INFO | Javalin started in 265ms \o/

18:18:14.923 INFO | Done (0.70s)!

18:18:14.923 INFO | 

18:18:14.966 INFO | Reposilite 3.0.3 Commands:

18:18:14.966 INFO |   failures - Display all recorded exceptions

18:18:14.966 INFO |   help [<command>] - List of available commands

18:18:14.966 INFO |   level <level> - Change current level of visible logging

18:18:14.967 INFO |   route-add <access_token> <path> <permissions> - Add new route to access token

18:18:14.967 INFO |   route-remove <access_token> <path> - Remove route from access token

18:18:14.967 INFO |   stats [<repository>] [<filter>] - Display collected metrics

18:18:14.967 INFO |   status - Display summary status of app health

18:18:14.967 INFO |   stop - Shutdown server

18:18:14.967 INFO |   token-export <file> - Export access tokens to file

18:18:14.967 INFO |   token-generate [--secret=<value>] <name> [<permissions>] - Generate a new access token

18:18:14.967 INFO |   token-import <file> - Import access tokens from file

18:18:14.968 INFO |   token-modify <name> <permissions> - Change token permissions

18:18:14.968 INFO |   token-regenerate <name> [--secret=<value>] - Regenerate token secret

18:18:14.968 INFO |   token-rename <name> <new name> - Change token name

18:18:14.968 INFO |   token-revoke <name> - Revoke token

18:18:14.968 INFO |   tokens - List all generated tokens

18:18:14.968 INFO | 

18:18:14.968 INFO | Collecting status metrics...

18:18:14.968 INFO | 

18:18:16.216 INFO | Reposilite 3.0.3 Status

18:18:16.217 INFO |   Active: true

18:18:16.217 INFO |   Uptime: 0.01min

18:18:16.217 INFO |   Memory usage of process: 17.65M

18:18:16.217 INFO |   Active threads in group: 11

18:18:16.217 INFO |   Recorded failures: 0

18:18:16.217 INFO |   Latest version of Reposilite: 3.0.3

18:18:16.217 INFO | 

18:18:18.691 DEBUG | HikariPool-1 - Reset (autoCommit) on connection org.sqlite.jdbc4.JDBC4Connection@772485dd

18:18:18.693 DEBUG | HikariPool-1 - Reset (autoCommit) on connection org.sqlite.jdbc4.JDBC4Connection@772485dd

18:18:18.837 DEBUG | GET /api/maven/details/ from 192.168.20.6

18:18:18.848 DEBUG | HikariPool-1 - Reset (autoCommit) on connection org.sqlite.jdbc4.JDBC4Connection@772485dd

18:18:18.850 DEBUG | HikariPool-1 - Reset (autoCommit) on connection org.sqlite.jdbc4.JDBC4Connection@772485dd

18:18:18.853 DEBUG | HikariPool-1 - Reset (autoCommit) on connection org.sqlite.jdbc4.JDBC4Connection@772485dd

18:18:18.868 INFO | CLI | hc224@/192.168.20.6:40300 accessed remote console

18:18:54.697 ERROR | /releases/net/exploitables/SlashLib/1.2.4/SlashLib-1.2.4.jar

18:18:54.699 ERROR | java.io.IOException: Mount point not found in fstab

18:18:54.700 ERROR |  at java.base/sun.nio.fs.BsdFileStore.findMountEntry(BsdFileStore.java:78)

18:18:54.702 ERROR |  at java.base/sun.nio.fs.UnixFileStore.<init>(UnixFileStore.java:69)

18:18:54.702 ERROR |  at java.base/sun.nio.fs.BsdFileStore.<init>(BsdFileStore.java:40)

18:18:54.703 ERROR |  at java.base/sun.nio.fs.BsdFileSystemProvider.getFileStore(BsdFileSystemProvider.java:46)

18:18:54.704 ERROR |  at java.base/sun.nio.fs.BsdFileSystemProvider.getFileStore(BsdFileSystemProvider.java:34)

18:18:54.705 ERROR |  at java.base/sun.nio.fs.UnixFileSystemProvider.getFileStore(UnixFileSystemProvider.java:373)

18:18:54.706 ERROR |  at java.base/java.nio.file.Files.getFileStore(Files.java:1488)

18:18:54.707 ERROR |  at com.reposilite.storage.filesystem.PercentageQuota.canHold$lambda-0(FileSystemQuotaProviders.kt:63)

18:18:54.708 ERROR |  at panda.std.Result.map(Result.java:152)

18:18:54.709 ERROR |  at com.reposilite.storage.filesystem.PercentageQuota.canHold(FileSystemQuotaProviders.kt:62)

18:18:54.710 ERROR |  at com.reposilite.storage.filesystem.FileSystemStorageProvider.putFile(FileSystemStorageProvider.kt:62)

18:18:54.711 ERROR |  at com.reposilite.maven.Repository.putFile(Repository.kt:57)

18:18:54.711 ERROR |  at com.reposilite.maven.MavenService.deployFile(MavenService.kt:70)

18:18:54.712 ERROR |  at com.reposilite.maven.MavenFacade.deployFile(MavenFacade.kt:58)

18:18:54.713 ERROR |  at com.reposilite.maven.infrastructure.MavenEndpoints$deployFile$1$1$1$1.invoke(MavenEndpoints.kt:94)

18:18:54.714 ERROR |  at com.reposilite.maven.infrastructure.MavenEndpoints$deployFile$1$1$1$1.invoke(MavenEndpoints.kt:92)

18:18:54.715 ERROR |  at com.reposilite.maven.infrastructure.MavenRoutes$requireRepository$1.invoke(MavenRoutes.kt:26)

18:18:54.716 ERROR |  at com.reposilite.maven.infrastructure.MavenRoutes$requireRepository$1.invoke(MavenRoutes.kt:23)

18:18:54.717 ERROR |  at com.reposilite.maven.infrastructure.MavenRoutes.repository(MavenRoutes.kt:19)

18:18:54.718 ERROR |  at com.reposilite.maven.infrastructure.MavenRoutes.requireRepository(MavenRoutes.kt:23)

18:18:54.723 ERROR |  at com.reposilite.maven.infrastructure.MavenEndpoints$deployFile$1$1$1.invoke(MavenEndpoints.kt:92)

18:18:54.724 ERROR |  at com.reposilite.maven.infrastructure.MavenEndpoints$deployFile$1$1$1.invoke(MavenEndpoints.kt:91)

18:18:54.725 ERROR |  at com.reposilite.maven.infrastructure.MavenRoutes.requireGav(MavenRoutes.kt:32)

18:18:54.725 ERROR |  at com.reposilite.maven.infrastructure.MavenEndpoints$deployFile$1$1.invoke(MavenEndpoints.kt:91)

18:18:54.726 ERROR |  at com.reposilite.maven.infrastructure.MavenEndpoints$deployFile$1$1.invoke(MavenEndpoints.kt:90)

18:18:54.727 ERROR |  at com.reposilite.shared.ContextDsl$authorized$1.invoke$lambda-0(ContextDsl.kt:78)

18:18:54.728 ERROR |  at panda.std.Result.peek(Result.java:252)

18:18:54.729 ERROR |  at com.reposilite.shared.ContextDsl$authorized$1.invoke(ContextDsl.kt:78)

18:18:54.730 ERROR |  at com.reposilite.shared.ContextDsl$authorized$1.invoke(ContextDsl.kt:76)

18:18:54.731 ERROR |  at com.reposilite.shared.ContextDsl$authenticated$1.accept(ContextDsl.kt:68)

18:18:54.732 ERROR |  at com.reposilite.shared.ContextDsl$authenticated$1.accept(ContextDsl.kt:68)

18:18:54.733 ERROR |  at panda.std.Result.peek(Result.java:252)

18:18:54.735 ERROR |  at com.reposilite.shared.ContextDsl.authenticated(ContextDsl.kt:68)

18:18:54.736 ERROR |  at com.reposilite.shared.ContextDsl.authorized(ContextDsl.kt:76)

18:18:54.737 ERROR |  at com.reposilite.shared.ContextDsl.authorized$default(ContextDsl.kt:75)

18:18:54.738 ERROR |  at com.reposilite.maven.infrastructure.MavenEndpoints$deployFile$1.invoke(MavenEndpoints.kt:90)

18:18:54.738 ERROR |  at com.reposilite.maven.infrastructure.MavenEndpoints$deployFile$1.invoke(MavenEndpoints.kt:89)

18:18:54.739 ERROR |  at com.reposilite.web.application.JavalinConfiguration$configureReactiveRoutingPlugin$plugin$1.invoke(JavalinConfiguration.kt:117)

18:18:54.740 ERROR |  at com.reposilite.web.application.JavalinConfiguration$configureReactiveRoutingPlugin$plugin$1.invoke(JavalinConfiguration.kt:104)

18:18:54.741 ERROR |  at com.reposilite.web.routing.RoutingPlugin.createHandler$lambda-3(RoutingPlugin.kt:38)

18:18:54.742 ERROR |  at io.javalin.routing.HandlerEntry.handle(HandlerEntry.kt:19)

18:18:54.743 ERROR |  at io.javalin.http.servlet.DefaultTasks.HTTP$lambda-8$lambda-6$lambda-5(DefaultTasks.kt:34)

18:18:54.744 ERROR |  at io.javalin.http.servlet.JavalinServlet.handleTask(JavalinServlet.kt:79)

18:18:54.745 ERROR |  at io.javalin.http.servlet.JavalinServlet.handleSync(JavalinServlet.kt:46)

18:18:54.746 ERROR |  at io.javalin.http.servlet.JavalinServlet.service(JavalinServlet.kt:34)

18:18:54.747 ERROR |  at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:587)

18:18:54.748 ERROR |  at io.javalin.jetty.JavalinJettyServlet.service(JavalinJettyServlet.kt:58)

18:18:54.749 ERROR |  at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:587)

18:18:54.753 ERROR |  at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:764)

18:18:54.754 ERROR |  at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:529)

18:18:54.755 ERROR |  at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:221)

18:18:54.757 ERROR |  at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1571)

18:18:54.758 ERROR |  at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:221)

18:18:54.759 ERROR |  at io.javalin.jetty.JettyServer$start$wsAndHttpHandler$1.doHandle(JettyServer.kt:56)

18:18:54.761 ERROR |  at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:176)

18:18:54.762 ERROR |  at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:484)

18:18:54.764 ERROR |  at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1544)

18:18:54.765 ERROR |  at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:174)

18:18:54.766 ERROR |  at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1297)

18:18:54.767 ERROR |  at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:129)

18:18:54.768 ERROR |  at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:122)

18:18:54.769 ERROR |  at org.eclipse.jetty.server.Server.handle(Server.java:562)

18:18:54.770 ERROR |  at org.eclipse.jetty.server.HttpChannel.lambda$handle$0(HttpChannel.java:505)

18:18:54.771 ERROR |  at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:762)

18:18:54.772 ERROR |  at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:497)

18:18:54.785 ERROR |  at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:282)

18:18:54.786 ERROR |  at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:319)

18:18:54.787 ERROR |  at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:100)

18:18:54.788 ERROR |  at org.eclipse.jetty.io.SelectableChannelEndPoint$1.run(SelectableChannelEndPoint.java:53)

18:18:54.789 ERROR |  at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.runTask(AdaptiveExecutionStrategy.java:412)

18:18:54.790 ERROR |  at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.consumeTask(AdaptiveExecutionStrategy.java:381)

18:18:54.791 ERROR |  at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.tryProduce(AdaptiveExecutionStrategy.java:268)

18:18:54.792 ERROR |  at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.lambda$new$0(AdaptiveExecutionStrategy.java:138)

18:18:54.793 ERROR |  at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:407)

18:18:54.794 ERROR |  at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:894)

18:18:54.795 ERROR |  at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1038)

18:18:54.795 ERROR |  at java.base/java.lang.Thread.run(Thread.java:829)

18:18:54.821 ERROR | /releases/net/exploitables/SlashLib/1.2.4/SlashLib-1.2.4.jar.sha1

18:18:54.822 ERROR | java.io.IOException: Mount point not found in fstab

18:18:54.823 ERROR |  at java.base/sun.nio.fs.BsdFileStore.findMountEntry(BsdFileStore.java:78)

18:18:54.824 ERROR |  at java.base/sun.nio.fs.UnixFileStore.<init>(UnixFileStore.java:69)

18:18:54.825 ERROR |  at java.base/sun.nio.fs.BsdFileStore.<init>(BsdFileStore.java:40)

18:18:54.825 ERROR |  at java.base/sun.nio.fs.BsdFileSystemProvider.getFileStore(BsdFileSystemProvider.java:46)

18:18:54.826 ERROR |  at java.base/sun.nio.fs.BsdFileSystemProvider.getFileStore(BsdFileSystemProvider.java:34)

18:18:54.827 ERROR |  at java.base/sun.nio.fs.UnixFileSystemProvider.getFileStore(UnixFileSystemProvider.java:373)

18:18:54.828 ERROR |  at java.base/java.nio.file.Files.getFileStore(Files.java:1488)

18:18:54.829 ERROR |  at com.reposilite.storage.filesystem.PercentageQuota.canHold$lambda-0(FileSystemQuotaProviders.kt:63)

18:18:54.829 ERROR |  at panda.std.Result.map(Result.java:152)

18:18:54.830 ERROR |  at com.reposilite.storage.filesystem.PercentageQuota.canHold(FileSystemQuotaProviders.kt:62)

18:18:54.831 ERROR |  at com.reposilite.storage.filesystem.FileSystemStorageProvider.putFile(FileSystemStorageProvider.kt:62)

18:18:54.832 ERROR |  at com.reposilite.maven.Repository.putFile(Repository.kt:57)

18:18:54.833 ERROR |  at com.reposilite.maven.MavenService.deployFile(MavenService.kt:70)

18:18:54.834 ERROR |  at com.reposilite.maven.MavenFacade.deployFile(MavenFacade.kt:58)

18:18:54.835 ERROR |  at com.reposilite.maven.infrastructure.MavenEndpoints$deployFile$1$1$1$1.invoke(MavenEndpoints.kt:94)

18:18:54.835 ERROR |  at com.reposilite.maven.infrastructure.MavenEndpoints$deployFile$1$1$1$1.invoke(MavenEndpoints.kt:92)

18:18:54.836 ERROR |  at com.reposilite.maven.infrastructure.MavenRoutes$requireRepository$1.invoke(MavenRoutes.kt:26)

18:18:54.837 ERROR |  at com.reposilite.maven.infrastructure.MavenRoutes$requireRepository$1.invoke(MavenRoutes.kt:23)

18:18:54.838 ERROR |  at com.reposilite.maven.infrastructure.MavenRoutes.repository(MavenRoutes.kt:19)

18:18:54.838 ERROR |  at com.reposilite.maven.infrastructure.MavenRoutes.requireRepository(MavenRoutes.kt:23)

18:18:54.839 ERROR |  at com.reposilite.maven.infrastructure.MavenEndpoints$deployFile$1$1$1.invoke(MavenEndpoints.kt:92)

18:18:54.840 ERROR |  at com.reposilite.maven.infrastructure.MavenEndpoints$deployFile$1$1$1.invoke(MavenEndpoints.kt:91)

18:18:54.841 ERROR |  at com.reposilite.maven.infrastructure.MavenRoutes.requireGav(MavenRoutes.kt:32)

18:18:54.841 ERROR |  at com.reposilite.maven.infrastructure.MavenEndpoints$deployFile$1$1.invoke(MavenEndpoints.kt:91)

18:18:54.842 ERROR |  at com.reposilite.maven.infrastructure.MavenEndpoints$deployFile$1$1.invoke(MavenEndpoints.kt:90)

18:18:54.843 ERROR |  at com.reposilite.shared.ContextDsl$authorized$1.invoke$lambda-0(ContextDsl.kt:78)

18:18:54.843 ERROR |  at panda.std.Result.peek(Result.java:252)

18:18:54.844 ERROR |  at com.reposilite.shared.ContextDsl$authorized$1.invoke(ContextDsl.kt:78)

18:18:54.845 ERROR |  at com.reposilite.shared.ContextDsl$authorized$1.invoke(ContextDsl.kt:76)

18:18:54.845 ERROR |  at com.reposilite.shared.ContextDsl$authenticated$1.accept(ContextDsl.kt:68)

18:18:54.846 ERROR |  at com.reposilite.shared.ContextDsl$authenticated$1.accept(ContextDsl.kt:68)

18:18:54.847 ERROR |  at panda.std.Result.peek(Result.java:252)

18:18:54.848 ERROR |  at com.reposilite.shared.ContextDsl.authenticated(ContextDsl.kt:68)

18:18:54.848 ERROR |  at com.reposilite.shared.ContextDsl.authorized(ContextDsl.kt:76)

18:18:54.849 ERROR |  at com.reposilite.shared.ContextDsl.authorized$default(ContextDsl.kt:75)

18:18:54.850 ERROR |  at com.reposilite.maven.infrastructure.MavenEndpoints$deployFile$1.invoke(MavenEndpoints.kt:90)

18:18:54.851 ERROR |  at com.reposilite.maven.infrastructure.MavenEndpoints$deployFile$1.invoke(MavenEndpoints.kt:89)

18:18:54.851 ERROR |  at com.reposilite.web.application.JavalinConfiguration$configureReactiveRoutingPlugin$plugin$1.invoke(JavalinConfiguration.kt:117)

18:18:54.852 ERROR |  at com.reposilite.web.application.JavalinConfiguration$configureReactiveRoutingPlugin$plugin$1.invoke(JavalinConfiguration.kt:104)

18:18:54.852 ERROR |  at com.reposilite.web.routing.RoutingPlugin.createHandler$lambda-3(RoutingPlugin.kt:38)

18:18:54.853 ERROR |  at io.javalin.routing.HandlerEntry.handle(HandlerEntry.kt:19)

18:18:54.854 ERROR |  at io.javalin.http.servlet.DefaultTasks.HTTP$lambda-8$lambda-6$lambda-5(DefaultTasks.kt:34)

18:18:54.855 ERROR |  at io.javalin.http.servlet.JavalinServlet.handleTask(JavalinServlet.kt:79)

18:18:54.855 ERROR |  at io.javalin.http.servlet.JavalinServlet.handleSync(JavalinServlet.kt:46)

18:18:54.856 ERROR |  at io.javalin.http.servlet.JavalinServlet.service(JavalinServlet.kt:34)

18:18:54.857 ERROR |  at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:587)

18:18:54.858 ERROR |  at io.javalin.jetty.JavalinJettyServlet.service(JavalinJettyServlet.kt:58)

18:18:54.858 ERROR |  at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:587)

18:18:54.859 ERROR |  at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:764)

18:18:54.860 ERROR |  at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:529)

18:18:54.860 ERROR |  at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:221)

18:18:54.861 ERROR |  at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1571)

18:18:54.862 ERROR |  at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:221)

18:18:54.862 ERROR |  at io.javalin.jetty.JettyServer$start$wsAndHttpHandler$1.doHandle(JettyServer.kt:56)

18:18:54.863 ERROR |  at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:176)

18:18:54.864 ERROR |  at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:484)

18:18:54.865 ERROR |  at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1544)

18:18:54.866 ERROR |  at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:174)

18:18:54.867 ERROR |  at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1297)

18:18:54.868 ERROR |  at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:129)

18:18:54.869 ERROR |  at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:122)

18:18:54.869 ERROR |  at org.eclipse.jetty.server.Server.handle(Server.java:562)

18:18:54.870 ERROR |  at org.eclipse.jetty.server.HttpChannel.lambda$handle$0(HttpChannel.java:505)

18:18:54.871 ERROR |  at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:762)

18:18:54.871 ERROR |  at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:497)

18:18:54.872 ERROR |  at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:282)

18:18:54.873 ERROR |  at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:319)

18:18:54.873 ERROR |  at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:100)

18:18:54.874 ERROR |  at org.eclipse.jetty.io.SelectableChannelEndPoint$1.run(SelectableChannelEndPoint.java:53)

18:18:54.875 ERROR |  at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.runTask(AdaptiveExecutionStrategy.java:412)

18:18:54.876 ERROR |  at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.consumeTask(AdaptiveExecutionStrategy.java:381)

18:18:54.876 ERROR |  at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.tryProduce(AdaptiveExecutionStrategy.java:268)

18:18:54.877 ERROR |  at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.lambda$new$0(AdaptiveExecutionStrategy.java:138)

18:18:54.878 ERROR |  at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:407)

18:18:54.878 ERROR |  at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:894)

18:18:54.879 ERROR |  at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1038)

18:18:54.880 ERROR |  at java.base/java.lang.Thread.run(Thread.java:829)
dzikoysk commented 2 years ago

To be honest I don't know much about the environment you use, I see some similar issues in FreeBSD+Jail related threads, for instance:

Looks like Files.getFileStore(rootDirectory).usableSpace file-store in unavailable here, could you try to set fixed quota for your repository, like e.g. 100GB.

HC-224 commented 2 years ago

Setting the quota to 10GB resulted in a successful upload. I would consider this a suitable solution for myself. Thank you!

I understand that BSD is not a popular OS and do agree that this is instead something that should be fixed within the OpenJDK port as mentioned in your second link. Although that thread is 7 years old now.

TrueNAS doesn't offer the full set of configurations to jails, and being ZFS based fstab isn't used at all on the host system. So it may be ZFS related, my Arch Linux systems on ZFS do not have fstab entries for ZFS mounts.

Either way there is a workaround here which is sufficient for me, feel free to close. ZFS supports dataset quotas and limits so that could be used in place of Reposilite's limits. I am unsure what could be done for plain BSD users though.

Edit: Enabling Allow Mount in TrueNAS Jail config with all file systems did not fix this issue when using percentage quotas. I don't see any other config options related to fstab.

dzikoysk commented 2 years ago

Good to know, thanks for your feedback! Because this issue can be solved by workaround and it looks like extremely rare target, I've labeled it as wontfix for now. If some users in the future will experience it, let me know in this issue, we can always go back to this topic if needed :)