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