New update available

openmediavault 5.5.19

  • Issue #884: Do not bind session to IP address anymore.

New update available

openmediavault 5.5.18

  • Update locales.
  • Fix bug in omv-mkaptidx.
  • Hardening omv.deploy.initramfs state to prevent an Salt render error if there is no initramfs package installed.
  • Disable accepting router advertisements for static IPv6 network interfaces.
  • Modify network interface RRD graph title.
  • Issue #873: FTP IdentLookup setting is not honored in configuration file.
  • Issue #875: Avahi is not refreshed after adding new NFS share.
  • Issue #877: Add F2FS file system support.
  • Issue #881: Improve RPC to execute cron jobs.

Dynamically inject routes in lazy loaded modules using Angular 11

If you would like to dynamically inject routes in lazy loaded modules in your Angular 11 app, then you need to do the following.

Make sure your service that is responsible for loading the route configuration via HTTP from the server is loading while the app is bootstrapped. This way we can be sure the route configuration is available after the app is bootstrapped.

const routes: Routes = [
  ...,
  { path: '**', redirectTo: '/404' }
];

@NgModule({
  exports: [RouterModule],
  imports: [
    RouterModule.forRoot(routes, {
      useHash: true
    })
  ],
  providers: [
    RouteConfigService,
    {
      provide: APP_INITIALIZER,
      useFactory: (routeConfigService: RouteConfigService) => {
        return () => {
          return routeConfigService.load().toPromise();
        };
      },
      multi: true,
      deps: [RouteConfigService]
    }
  ]
})
export class AppRoutingModule {}

You also need to ensure that your service is a singleton across the whole app.

@NgModule({
  declarations: [],
  imports: [...],
  exports: [...]
})
export class CoreModule {
  static forRoot(): ModuleWithProviders<CoreModule> {
    return {
      ngModule: CoreModule,
      providers: [
        RouteConfigService
      ]
    };
  }
}
@NgModule({
  declarations: [AppComponent],
  imports: [
    ...
    CoreModule.forRoot(),
    AppRoutingModule
  ],
  providers: [...],
  bootstrap: [AppComponent]
})
export class AppModule {}

And finally append the following provider in your lazy loaded module.

const routes: Routes = [
  ...
];

@NgModule({
  exports: [RouterModule],
  imports: [RouterModule.forChild(routes)],
  providers: [
    {
      provide: ROUTES,
      multi: true,
      useFactory: (routeConfigService: RouteConfigService) => {
        routeConfigService.inject('someArgsToIdentifyWhatToInject', routes);
        return routes;
      },
      deps: [RouteConfigService]
    }
  ]
})
export class MyLayzRoutingModule {}
@NgModule({
  declarations: [
    ...
  ],
  imports: [
    ...,
    MyLayzRoutingModule
  ]
})
export class LazyModule {}

New update available

openmediavault 5.5.17

WARNING … This update might cause problems on systems that are using USB hardware based on JMicron controllers.

  • Update locales.
  • Issue #842: Fix bug in UDEV rules to workaround a JMicron bug. If your USB controller reports the vendor ‘JMICRON’, then you might be affected by this issue. After installing this package your mounted filesystem configuration might be broken. To fix that, you need to unmount and remount the filesystems that are connected via this USB controller. If the filesystem contains any shared folders, you can’t unmount it, because of that you need to delete all shared folders that are located on the filesystem to be unmounted. Make sure to choose the right menu to only delete the shared folder configuration WITHOUT the content. You can only delete shared folders they are not used by any service, so make sure this applies to these shared folders. After you’ve unmounted these filesystems in the UI, apply the changes, reboot the system and then mount the filesystems again. After that you can reconfigure your shared folders and services from scratch. Sorry for this inconvenience.
  • Issue #846: Fix locking issue in SMB recycle bin cleanup and iptables scripts.