initial
This commit is contained in:
commit
86dbbbf69f
5
cmd/fastmirror/main.go
Normal file
5
cmd/fastmirror/main.go
Normal file
@ -0,0 +1,5 @@
|
||||
package main
|
||||
|
||||
func main() {
|
||||
fastmirror.cliEntry()
|
||||
}
|
99
fastmirror.go
Normal file
99
fastmirror.go
Normal file
@ -0,0 +1,99 @@
|
||||
package fastmirror
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"log"
|
||||
"os"
|
||||
"os/exec"
|
||||
"path/filepath"
|
||||
"runtime"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func cliEntry() {
|
||||
if runtime.GOOS != "linux" {
|
||||
log.Fatal("This program is only for Linux")
|
||||
}
|
||||
if !isUbuntu() {
|
||||
log.Fatal("This program is only for Ubuntu")
|
||||
}
|
||||
|
||||
fp := identifySourcesFile()
|
||||
|
||||
fmt.Printf("Found sources file: %s\n", fp)
|
||||
|
||||
architecture := runtime.GOARCH
|
||||
switch architecture {
|
||||
case "amd64", "386":
|
||||
fmt.Println("Use archive.ubuntu.com for packages")
|
||||
default:
|
||||
fmt.Println("Use ports.ubuntu.com for packages")
|
||||
}
|
||||
}
|
||||
|
||||
func getUbuntuCodename() string {
|
||||
cmd := exec.Command("lsb_release", "-cs")
|
||||
output, err := cmd.Output()
|
||||
if err != nil {
|
||||
log.Fatal("Failed to run lsb_release: %v\n", err)
|
||||
}
|
||||
codename := strings.TrimSpace(string(output))
|
||||
return codename
|
||||
}
|
||||
|
||||
func isUbuntu() bool {
|
||||
cmd := exec.Command("lsb_release", "-is")
|
||||
output, err := cmd.Output()
|
||||
if err != nil {
|
||||
log.Fatal("Failed to run lsb_release: %v\n", err)
|
||||
}
|
||||
|
||||
distro := strings.TrimSpace(string(output))
|
||||
if distro == "Ubuntu" {
|
||||
return true
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
func identifySourcesFile() string {
|
||||
const sourcesList = "/etc/apt/sources.list"
|
||||
const sourcesListD = "/etc/apt/sources.list.d/"
|
||||
if checkFileForUbuntu(sourcesList) {
|
||||
fmt.Printf("Found Ubuntu sources file: %s\n", sourcesList)
|
||||
return sourcesList
|
||||
}
|
||||
files, err := ioutil.ReadDir(sourcesListD)
|
||||
if err != nil {
|
||||
fmt.Printf("Failed to read directory %s: %v\n", sourcesListD, err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
for _, file := range files {
|
||||
if file.IsDir() {
|
||||
continue
|
||||
}
|
||||
|
||||
filePath := filepath.Join(sourcesListD, file.Name())
|
||||
if checkFileForUbuntu(filePath) {
|
||||
fmt.Printf("Found Ubuntu sources file: %s\n", filePath)
|
||||
return filePath
|
||||
}
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func checkFileForUbuntu(filePath string) bool {
|
||||
content, err := ioutil.ReadFile(filePath)
|
||||
if err != nil {
|
||||
fmt.Printf("Failed to read file %s: %v\n", filePath, err)
|
||||
return false
|
||||
}
|
||||
|
||||
if strings.Contains(strings.ToLower(string(content)), "ubuntu.com") {
|
||||
return true
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
Loading…
Reference in New Issue
Block a user