package route import ( "fmt" "os" "strconv" "strings" "time" "github.com/IceWhaleTech/CasaOS/pkg/config" "github.com/IceWhaleTech/CasaOS/pkg/samba" "github.com/IceWhaleTech/CasaOS/pkg/utils/command" "github.com/IceWhaleTech/CasaOS/pkg/utils/file" "github.com/IceWhaleTech/CasaOS/pkg/utils/loger" "github.com/IceWhaleTech/CasaOS/service" model2 "github.com/IceWhaleTech/CasaOS/service/model" "go.uber.org/zap" ) func InitFunction() { CheckSerialDiskMount() go InitNetworkMount() } func CheckSerialDiskMount() { // check mount point dbList := service.MyService.Disk().GetSerialAll() list := service.MyService.Disk().LSBLK(true) mountPoint := make(map[string]string, len(dbList)) //remount for _, v := range dbList { mountPoint[v.UUID] = v.MountPoint } for _, v := range list { command.ExecEnabledSMART(v.Path) if v.Children != nil { for _, h := range v.Children { //if len(h.MountPoint) == 0 && len(v.Children) == 1 && h.FsType == "ext4" { if m, ok := mountPoint[h.UUID]; ok { //mount point check volume := m if !file.CheckNotExist(m) { for i := 0; file.CheckNotExist(volume); i++ { volume = m + strconv.Itoa(i+1) } } service.MyService.Disk().MountDisk(h.Path, volume) if volume != m { ms := model2.SerialDisk{} ms.UUID = v.UUID ms.MountPoint = volume service.MyService.Disk().UpdateMountPoint(ms) } } //} } } } service.MyService.Disk().RemoveLSBLKCache() command.OnlyExec("source " + config.AppInfo.ShellPath + "/helper.sh ;AutoRemoveUnuseDir") } func InitNetworkMount() { time.Sleep(time.Second * 10) connections := service.MyService.Connections().GetConnectionsList() for _, v := range connections { connection := service.MyService.Connections().GetConnectionByID(fmt.Sprint(v.ID)) directories, err := samba.GetSambaSharesList(connection.Host, connection.Port, connection.Username, connection.Password) if err != nil { service.MyService.Connections().DeleteConnection(fmt.Sprint(connection.ID)) loger.Error("mount samba err", zap.Any("err", err), zap.Any("info", connection)) continue } baseHostPath := "/mnt/" + connection.Host mountPointList := service.MyService.System().GetDirPath(baseHostPath) for _, v := range mountPointList { service.MyService.Connections().UnmountSmaba(v.Path) } os.RemoveAll(baseHostPath) file.IsNotExistMkDir(baseHostPath) for _, v := range directories { mountPoint := baseHostPath + "/" + v file.IsNotExistMkDir(mountPoint) service.MyService.Connections().MountSmaba(connection.Username, connection.Host, v, connection.Port, mountPoint, connection.Password) } connection.Directories = strings.Join(directories, ",") service.MyService.Connections().UpdateConnection(&connection) } }