2024-09-05 07:56:29 +00:00
|
|
|
import subprocess,re,os,time
|
|
|
|
import networkx as nx
|
|
|
|
import matplotlib.pyplot as plt
|
|
|
|
import numpy as np
|
|
|
|
|
|
|
|
package_list = []
|
|
|
|
result_list = []
|
|
|
|
G = nx.DiGraph()
|
|
|
|
|
|
|
|
def download_source(package):
|
|
|
|
package_folder = os.getcwd() + "/tmp/" + package
|
|
|
|
if os.path.exists(package_folder) == False:
|
|
|
|
cmd = "mkdir " + package_folder + " && cd " + package_folder + " && apt source " + package
|
|
|
|
#print(cmd)
|
|
|
|
intofolder_source = subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE) #cd /tmp && apt source wpasupplicant
|
|
|
|
intofolder_source.wait()
|
|
|
|
|
|
|
|
def get_source_name(package):
|
|
|
|
package_folder = os.getcwd() + "/tmp/" + package
|
|
|
|
#print(package_folder)
|
|
|
|
path_list = os.listdir(package_folder)
|
|
|
|
for path in path_list:
|
|
|
|
if '_' in path:
|
|
|
|
source_name = path.split("_")[0]
|
|
|
|
else:
|
|
|
|
source_name = path.split("-")[0]
|
|
|
|
break
|
|
|
|
print("package = ",package)
|
|
|
|
print("-----source_name = ",source_name)
|
|
|
|
cmd = "rm -rf " + package_folder
|
|
|
|
#print(cmd)
|
|
|
|
rm_source = subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE) #cd /tmp && apt source wpasupplicant
|
|
|
|
rm_source.wait()
|
|
|
|
return source_name
|
|
|
|
|
|
|
|
def list_del(list):
|
|
|
|
for package in list:
|
|
|
|
if '|' in package:
|
|
|
|
package_test = package.split("|")
|
|
|
|
if package_test [0] in package_list:
|
|
|
|
list.remove(package)
|
|
|
|
list.append(package_test[0])
|
|
|
|
else:
|
|
|
|
list.remove(package)
|
|
|
|
list.append(package_test[1])
|
|
|
|
return list
|
|
|
|
|
|
|
|
def dpkg_analyze(package):
|
|
|
|
cmd = "dpkg -s " + package + " |grep Depends:"
|
|
|
|
#print(package)
|
|
|
|
dpkg_depends = subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE) #dpkg -s wpasupplicant
|
|
|
|
result_stdout = dpkg_depends.stdout.readline()
|
|
|
|
result_without = re.sub(u"\\(.*?\\)", "", str(result_stdout,encoding= " utf-8"))
|
|
|
|
result = result_without.replace('Depends: ','')
|
|
|
|
result = result.replace(' ','')
|
|
|
|
result = result.replace('\n','')
|
|
|
|
result_list = result.split(",")
|
|
|
|
return list_del(result_list)
|
|
|
|
|
|
|
|
f = open ("ubuntu2204-package.txt")
|
|
|
|
lines = f.readlines()
|
|
|
|
number = 0
|
|
|
|
count = 0
|
|
|
|
for line in lines:
|
|
|
|
number = number + 1
|
|
|
|
#if number > 5 and number < 10:
|
|
|
|
if number > 5:
|
|
|
|
package_name = line.split()[1].replace(':amd64','')
|
|
|
|
if "linux-" not in package_name:
|
|
|
|
package_list.append(package_name) #add package name to list
|
|
|
|
|
|
|
|
##初始化使用
|
|
|
|
#a = np.array([['1','2']],dtype="<U1000")
|
|
|
|
#b = np.array([['1','2']])
|
|
|
|
#final_np = np.insert(a, 0, values=b, axis=0)
|
|
|
|
#for i in range(len(package_list)-1):
|
|
|
|
# final_np = np.insert(final_np, 0, values=b, axis=0)
|
|
|
|
|
|
|
|
##初始化使用2
|
|
|
|
final_np = np.loadtxt("temp.csv", delimiter=",", dtype="<U1000")
|
|
|
|
if np.any(final_np == "accountsservice") == False:
|
|
|
|
final_np = np.empty((len(package_list), 2),dtype="<U1000")
|
|
|
|
print(final_np)
|
|
|
|
|
|
|
|
##加载数据
|
|
|
|
#final_np = np.loadtxt("temp.csv", delimiter=",", dtype="<U1000")
|
|
|
|
#print(np.any(final_np == "os-prober"))
|
|
|
|
#print(final_np)
|
|
|
|
#exit(0)
|
|
|
|
|
|
|
|
###test
|
|
|
|
#print(package_list)
|
|
|
|
#list_test = ['hicolor-icon-theme', 'gtk-update-icon-cache', 'ubuntu-mono|adwaita-icon-theme-full']
|
|
|
|
#list_del(list_test)
|
|
|
|
#print(list_test)
|
|
|
|
|
|
|
|
print("len(package_list) = ", len(package_list)) ##1628个
|
|
|
|
#print("package_list = ", package_list)
|
|
|
|
|
|
|
|
line = 0
|
|
|
|
for package in package_list:
|
|
|
|
print(package)
|
|
|
|
if np.any(final_np == package) == False:
|
|
|
|
print(line)
|
|
|
|
download_source(package)
|
|
|
|
final_np[line][0] = package
|
|
|
|
final_np[line][1] = get_source_name(package)
|
2024-09-05 16:04:09 +00:00
|
|
|
elif len(final_np[line][1]) == 0:
|
|
|
|
print(line)
|
|
|
|
download_source(package)
|
|
|
|
final_np[line][0] = package
|
|
|
|
final_np[line][1] = get_source_name(package)
|
2024-09-05 07:56:29 +00:00
|
|
|
else:
|
2024-09-05 16:04:09 +00:00
|
|
|
final_np[line][0] = package
|
2024-09-05 07:56:29 +00:00
|
|
|
final_np[line][1] = final_np[line][1]
|
|
|
|
|
|
|
|
if len(final_np[line][1]) != 0:
|
|
|
|
print(final_np[line][1])
|
|
|
|
result_list.append(final_np[line][1])
|
|
|
|
G.add_node(final_np[line][1])
|
|
|
|
np.savetxt("temp.csv", final_np, delimiter=",", fmt='%s')
|
|
|
|
line = line + 1
|
|
|
|
print(final_np)
|
2024-09-05 16:04:09 +00:00
|
|
|
exit(0)
|
2024-09-05 07:56:29 +00:00
|
|
|
#print("result_list = " , result_list)
|
|
|
|
print("len(result_list)) = ", len(result_list))
|
|
|
|
|
|
|
|
#for package in package_list:
|
|
|
|
# depend_list = dpkg_analyze(package)
|
|
|
|
# print(depend_list)
|
|
|
|
# if len(depend_list) > 0 and len(get_source_name(package)) != 0:
|
|
|
|
# for depend in depend_list:
|
|
|
|
# G.add_edge(get_source_name(package),get_source_name(depend))
|
|
|
|
|
|
|
|
#pos = nx.spring_layout(G)
|
|
|
|
#nx.draw(G,pos,with_labels=True)
|
|
|
|
#plt.show()
|